投稿や固定ページを自動で作成する方法を探していて、見つけたのがこのサイトまさまゆブログ
WP REST API
正直なんなのかチンプンカンプン、少しだけ分かったことは。
1.WordPressのデータベースの情報をJSON形式で取得できるAPIのこと。
2.WordPressのあるサーバーとは別サイトから記事などの表示・操作ができる。
3.PHP以外のプログラミング言語でWordPressのデータの取得と操作できるようになる。
例えばpython?
4.JSON形式でデータを取得するには次のURLにアクセスすれば良い。
http://raspberrypi/wp-json/wp/v2/posts
実際には、このURLでJSONデータを取得できなかったので、前回のパーマリンク設定が動いていないことに気付いたのだが。
まあ、JSONって何、python?の状態なので、不安だらけだが、php+MariaDBよりも楽ができると信じて進むことに。
アプリケーションパスワード
参考サイトに従い、「Application Passwords plugin」をインストール。
WordPressの管理画面で「ユーザ」をクリックする。
管理者の「ユーザ名」をクリックし、プロフィール画面を開く。
プロフィール画面の「アプリケーションパスワード」ブロックの新しいアプリケーションパスワード名の入力欄に「ユーザ名」を入力し、「新しいアプリケーションパスワードを追加」ボタンをクリックする。
「アプリケーションパスワード」用のユーザ名に対応したパスワードが作成され、ポップアップで表示されるので、控えることを忘れずに。 忘れても再度パスワードを作成すれば良いだけだが。
尚、プラグインの不具合なのか、日本語と英語の「アプリケーションパスワード」が両方表示されていて混乱。 取り合えず上段の日本語を使用してパスワードを作成した。
pythonによる自動投稿
実際にThonnyを使用して、自動投稿を行ってみた。 参考にしたのは次のサイト、【Python】「WordPressで記事の自動投稿できるようになる」
ついでに、csvファイルからデータを読み込んで、複数の固定ページを自動作成するように
改造してみた。 データは、趣味の野鳥撮影用に作成したリストから野鳥の名前、学名、撮影場所、時期を抜粋したもの。
# WordPressの自動投稿
import requests
import urllib.parse
from datetime import datetime
import csv
# WordPress接続情報
WP_URL = 'http://raspberrypi'
WP_USERNAME = 'tako'
WP_PASSWORD = '**** **** **** **** **** ****'
# WordPress新規投稿関数
def post_article(status, slug, title, content, category_ids, tag_ids, media_id):
# REST APIを使うための認証情報
user_ = WP_USERNAME
pass_ = WP_PASSWORD
# 投稿記事情報
payload = {"status": status, #ステータス 公開:publish, 下書き:draft
"slug": slug, #URLスラッグ
"title": title, #タイトル
"content": content, #内容
"date": datetime.now().isoformat(), #投稿日時
"categories": category_ids, #カテゴリー
"tags": tag_ids, #タグ
"parent": parent #parent
}
if media_id is not None:
payload['featured_media'] = media_id #アイキャッチ画像
# 記事の新規投稿を行う
res = requests.post(urllib.parse.urljoin(WP_URL, "wp-json/wp/v2/pages"), #"wp-json/wp/v2/posts"にPostすると新規投稿になる
json=payload, #投稿する記事の内容を設定する
auth=(user_, pass_))
#ユーザ、パスワードを設定する
print('----------\n件名:「{}」の投稿リクエスト結果:{} res.status: {}'.format(title, res, repr(res.status_code)))
return res
with open ('sublist11.csv' , 'r' ) as f : # ’r’=読み込み
reader = csv . reader ( f )
for line in reader :
slug = line[0] # slug 和名
title = slug # title 和名
ename = line[1] # ename 英名
lname = line[2] # lname 学名 ラテン語
jenc = urllib.parse.quote(title) # urlエンコード
parent = line[3] # 親
place = line[4] # 撮影場所
season = line[5] # 撮影時期
jref = '<a href="https://ja.wikipedia.org/wiki/' + jenc + '">' + title + '</a>'
eref = '<a href="https://en.wikipedia.org/wiki/' + ename + '">' + ename + '</a>'
lref = '<a href="https://en.wikipedia.org/wiki/' + lname + '">' + lname + '</a>'
article='<div id="sublist">\r'\
'<h6>基本事項</h6>\r'\
'<table><tbody>\r'\
'<tr>\r'\
'<th>Wikipedia</th>\r'\
'<th>(英名)</th>\r'\
'<th>(学名)</th>\r'\
'<th>撮影場所</th>\r'\
'<th>時期</th>\r'\
'</tr>\r'\
'<tr>\r'\
'<td>' + jref + '</td>\r<td>' + eref + '</td>\r<td>' + lref + '</td>\r'\
'<td>' + place + '</td>\r'\
'<td>' + season + '</td>\r'\
'</tr>\r'\
'</tbody>\r'\
'</table>\r'\
'</div>\r'
# 記事を投稿する
post_article('publish',
slug,
title,
article,
category_ids=[],
tag_ids=[],
media_id=0)
読み込んだsublist11.csvがこちら。 ちなみに38は親のpost_id。
アイスランドカモメ,Iceland Gull,Larus glaucoides,38,銚子,冬
アオシギ,Solitary Snipe,Gallinago solitaria,38,日光,冬
実際に出来た固定ページがこちら。
articleにhtml文をずらずらと書き込んだ恥ずかしい力業、まあやりたいことが何となくできたので良しとすることに。 それにしても自己流なのでこんな使い方しか出来ずお粗末。