WordPress

WordPress - REST APIを使用してPythonで記事を新規追加する方法

WordPressのバージョン4.7 "Vaughan" から、REST APIが標準サポートされるようになりました。Pythonを使ってREST APIを叩いて記事を投稿する方法のメモです。

REST APIを叩くための準備

記事の取得は誰もが許可なくできてOKなのですが、記事の投稿を無許可で誰もができてしまうとセキュリティに問題があります。記事追加のAPIを誰もが叩けてしまうと、管理画面のIDとパスワードがバレてしまう状態と同じで、変な記事を投稿されてしまったり、無意味な記事が大量に投稿されてしまったり問題だらけになってしまいます。

なので、記事追加、更新系のREST APIは、認証したユーザーしか叩けない仕様になっています。

その認証をするための方法は、標準で3つ用意されています。

  1. OAuth 認証
  2. アプリケーションパスワード
  3. ベーシック認証

本記事では、2. アプリケーションパスワード を使っていきます。

アプリケーションパスワードによる認証を利用する方法

アプリケーションパスワードは、通常のWordPressパスワードに代わるもので、ユニークでありすぐ破棄することができるものです。WordPressのプロフィール画面で変更、破棄がカンタンすることができます。ただ、すぐ破棄できるといえども、バレてしまうと誰もが一時的にREST APIを叩き放題になってしまうので要注意。

このアプリケーションパスワードをカンタンに発行できるプラグインが「Application Passwords」用意されています。
このプラグインを追加すると、ユーザー > あなたのプロフィールから、アプリケーションパスワードを発行できるようになります。

PythonからWordPressのREST APIを叩く

以下のサンプルコードを叩いてみて下さい。

# -*- coding: utf-8 -*-
import requests
import json
import base64

password = "あなたのアプリケーションパスワード"
user_id = "あなたのアプリケーションパスワードのユーザID"
end_point_url ="https://example.com/wp-json/wp/v2/posts"

title = "Pythonから投稿するサンプル"

content = """<h2>サンプルだよ</h2>

あいうえお
かきくけこ
"""

status = "draft"

data = json.dumps({'title': title, 
                   'content' : content,
                   'status' : status})

headers = {'content-type': "Application/json"}

r = requests.post(end_point_url, data=data, headers=headers, auth=(user_id, password))
print(r.text)

-WordPress