PythonからWP REST APIを使って記事の投稿と、記事の取得をする

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件までのようです。
よかったらシェアしてね!

この記事を書いた人

次男が高校ラグビー部での活動を終え、卒部を迎えました。これで、長男、次男ともに中学での野球部、高校でのラグビー部の活動が全て終わりました。9年間怪我をしながらも無事にやり切りました。小学校のソフトボールも入れると15年にもなりました。息子たちも大変でしたが、親も休日は部活動の送迎、応援、動画撮影、編集にと忙しくも楽しい時間を過ごすことができました。

目次
閉じる