Hello World / plɹoM ollǝH

Programmers Live in Vain

WordPress で JWT Authentication を使って Python から投稿してみる

クライアントはWindows、サーバーはXserver。

1. JWT Authentication for WP REST API プラグインをインストール

wordpress.org

2. FTPソフトを自分のPCにインストール

WinSCPとかFFFTPとか

winscp.net

ja.osdn.net

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'])