PythonからWP REST APIを使って記事の投稿と、記事の取得をします。
目次
WordPressの設定
- 以前の記事と同様ですが、再掲します。
- WordPressの管理画面の「ユーザー」–「プロフィール」
- アプリケーションパスワードの設定をします。
- 「新しいアプリケーションパスワード名」に任意の名前を設定します。
- 今回は「tomono」を設定します。
- すると、「tomono」のパスワードが表示されるので、控えておきます。
Pythonのプログラム
環境
- WSL2のUbuntu20
- Python 3.8.10
記事の投稿
- AUTH_USER には、WordPressのアカウント名
- AUTH_PASS には、先程控えておいたパスワードを設定します。
# モジュールをインポート
import requests
import json
# アクセス情報の設定
AUTH_USER = 'ariki'
AUTH_PASS = '********************************'
# 投稿するURLの設定
END_POINT_URL ="https://tech-blog.tomono.jp/wp-json/wp/v2/posts/"
# 投稿内容
p_title = "PythonからのWP REST API経由での投稿です"
p_content = 'PythonからのWP REST API経由での投稿です。'
p_status = "publish"
payload = {
'title': p_title ,
'content' : p_content ,
'status' : p_status,
'slug' : 'python_wp_rest_api_post'
}
headers = {'content-type': "Application/json"}
r = requests.post( END_POINT_URL, data=json.dumps(payload) , headers=headers, auth=(AUTH_USER, AUTH_PASS) )
print(r)
プログラムの実行
$ python3 tech_wp_post_record.py
<Response [201]>
- 記事が投稿されました。
記事の取得
記事を取得して、公開日、更新日、タイトルを表示します。
# モジュールをインポート
import requests
# アクセス情報の設定
SITE_URL = "https://tech-blog.tomono.jp"
API_URL = f"{SITE_URL}/wp-json/wp/v2/posts?_fields=date,modified,title"
AUTH_USER = 'ariki'
AUTH_PASS = '*********************************'
# リクエスト送信してレスポンスのJSONを解析
response = requests.get(API_URL).json()
# レスポンスを一つずつ処理
for data in response:
# 公開日、更新日、タイトルを表示
print(f'{data["date"]}, {data["modified"]},{data["title"]["rendered"]}')
プログラムの実行
$ python3 tech_wp_get_all_post.py
2022-06-20T18:42:27, 2022-06-20T18:42:29,Google Apps ScriptからWP REST APIを使って記事の投稿をする
2022-06-16T10:26:42, 2022-06-16T13:01:31,【Adobe XD】「ステート」を使ったハンバーガーメニュー
2022-05-18T19:30:14, 2022-05-19T08:01:03,Flutter3.0 + Android Studio + Xcode + Mac(Intel CPU) の環境構築の備忘録
2022-05-14T23:43:08, 2022-05-14T23:43:10,Flutter3.0 + Android Studio + Windows10 の環境構築の備忘録
2022-04-25T16:07:35, 2022-04-25T16:07:37,querySelectorAll()メソッドで取得してforEach()メソッドで反復処理する
2022-04-25T11:16:50, 2022-04-25T11:18:49,Adobe XDで線や文字にグラデーションをかけるには
2022-04-15T16:50:24, 2022-04-15T16:50:26,ゲームでAWSのソリューション構築体験ができる「AWS Cloud Quest:Cloud Practitioner」をプレイしてみました。その1
2022-03-17T16:52:52, 2022-03-17T16:52:55,Chrome OS FlexをTOSHIBA dynabook TB57/NBにインストールして動作検証をしてみました
2022-03-10T10:26:27, 2022-03-10T11:36:53,縦長のページ(PDF・画像)を、複数の用紙に分けて印刷する方法
2022-02-25T18:19:26, 2022-03-29T15:35:08,【Adobe XD】ステート機能を使ったスライダーの作成
- WordPress内の記事は、10件以上あるのに、10件しか取得できません
- WP REST APIでは、デフォルトでは、取得件数は10件に制限されていました。
記事の取得 取得件数を20件に指定
# モジュールをインポート
import requests
# アクセス情報の設定
SITE_URL = "https://tech-blog.tomono.jp"
API_URL = f"{SITE_URL}/wp-json/wp/v2/"
AUTH_USER = 'ariki'
AUTH_PASS = '*********************************'
PER_PAGE = '?per_page=20'
# すべてのアイテムを取得
def get_all(label: str):
return requests.get(
f"{API_URL}{label}{PER_PAGE}",
auth=(AUTH_USER, AUTH_PASS),
).json()
# カテゴリ
print(f"カテゴリ : {len(get_all('categories'))} 件")
# タグ
print(f"タグ : {len(get_all('tags'))} 件")
# メディア
print(f"メディア : {len(get_all('media'))} 件")
# 記事
print(f"記事 : {len(get_all('posts'))} 件")
# 記事の全IDの取得
all_post_id = []
for i in get_all('posts'):
all_post_id.append(i['id'])
print(f"取得記事のID : {all_post_id}")
プログラムの実行
$ python3 tech_wp_get_all_item.py
カテゴリ : 13 件
タグ : 20 件
メディア : 20 件
記事 : 20 件
取得記事のID : [2660, 2423, 2562, 2501, 2486, 2471, 2430, 2344, 2338, 2288, 2248, 2231, 2208, 2182, 2191, 2150, 2147, 2104, 1980, 2054]
- リクエストのパラメータに「per_page」のオプションを付けることで、20件の取得が出来ました。
- 但し、「per_page」のオプションの上限は、100件までのようです。