WordPress で JWT Authentication を使って Python から投稿してみる
クライアントはWindows、サーバーはXserver。
1. JWT Authentication for WP REST API プラグインをインストール
2. FTPソフトを自分のPCにインストール
3. FTPソフトからXserverのサーバーに接続
FTPサーバーの情報は、もっとちゃんとしたところに書いてありそうだが、とりあえず「Xserverのサーバーパネル→FTPサブアカウント設定→FTPソフト設定」から確認できた。ここに書いてある情報で手元のFTPソフトからサーバーに接続するとルートフォルダから見れる。
4. public_html/.htaccessを編集
プラグインのページに書いてある
RewriteEngine on RewriteCond %{HTTP:Authorization} ^(.*) RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
を.htaccessファイルに追加する
5. public_html/wp-config.phpを編集
↓の2項目を追記する
define('JWT_AUTH_SECRET_KEY', 'your-top-secret-key'); define('JWT_AUTH_CORS_ENABLE', false);
JWT_AUTH_SECRET_KEY は https://api.wordpress.org/secret-key/1.1/salt/ から適当なのを持ってくる(更新のたびに変わる)。 JWT_AUTH_CORS_ENABLE は Cross Origin Resource Sharing を許可する場合はtrueにする。
6. Pythonからtokenを取得して投稿
import json, requests, os if __name__ == '__main__': r = requests.post('https://example.com/wp-json/jwt-auth/v1/token', json={ 'username': os.environ['USERNAME'], 'password': os.environ['PASSWORD'], }) token = json.loads(r.content)['token'] r = requests.post('https://example.com/wp-json/wp/v2/posts', json={ 'title': 'Hello World', 'content': 'This is my post.', 'status': 'publish' }, headers={ 'Authorization': 'Bearer ' + token }) print(json.loads(r.content)['link'])