WP REST APIとOAuth1でWordPressへ外部から投稿

Pocket

WP REST API/WP OAUTH

下記記事に詳しく投稿方法が掲載されている。記事のメモ。

WP API and OAuth – Using WordPress without WordPress

WordPressでRESTを有効にするプラグイン「WP REST API(Version 1.2.3)1」と
認証を行うプラグイン「WP-API/OAuth1」を使う。

取得

投稿の取得は認証の必要はなくWP REST APIを有効しGETリクエストすればレスポンス(JSON形式)として投稿内容を取得できる。

投稿一覧の取得例

http://www.example.com/wp-json/posts

投稿

投稿や削除はOAuthでクライアントを認証する。

認証・許可の流れ

OAuth1でクライアントを認証するメモ。

  1. WordPressでWP-API/OAuth1のインストールと有効化。
  2. WordPressでクライアント用のkey/secretを発行。
  3. クライアントは発行されたkey/secretを付けてWordPressの認証用エンドポイントへリクエスト。
  4. WordPressはトークンをクライアントへレスポンス。
  5. クライアントはユーザーをトークンとともにWordPressへリダイレクト。
  6. ユーザーはWordPressで許可処理を行う。
  7. WordPressはユーザーをクライアントへリダイレクト。
  8. クライアントから投稿。

key/secretはWP-CLIで発行する2

$ wp oauth1 add
ID: 1718
Key: gOmxpyafVeSr
Secret: xc4OFIoz5VsWAS8wHifz6U1498FuF9fXFmfiiisRmVrbxMwG

クライアントの用意(Guzzleを利用)

ComposerでHTTPクライアントGuzzleをインストール3

composer.json

{
  "require": {
    "guzzlehttp/guzzle": "~5",
  },
  "require-dev": {
    "guzzlehttp/oauth-subscriber": "0.2.*",
    "symfony/var-dumper": "^2.7"
  }
}

インストール

$ composer install

WordPressは外部へのリダイレクトを禁止しているのでfunctions.phpへ許可の記述を行う。
(リダイレクト先がhttp://www.example.com:8080/callback.phpの例。)

add_filter('http_request_host_is_external', 'allow_my_custom_host', 10, 3);
function allow_my_custom_host($allow, $host, $url) {
  if ($url == 'http://www.example.com:8080/callback.php')  {
      $allow = true;
  }
  return $allow;
}

WordPressはURLの妥当性チェック(wp_http_validate_url)で80, 443, 8080以外のポート番号に対してfalseを返す。
最初クライアントのポート番号を8888にしており認証時にInvalid URLのエラーが起きた。


  1. WP REST APIはVersion 1系とVersion 2がある。今回は1.2.3を使う。 

  2. wpコマンドはwp-config.phpのあるディレクトリで実行する。 

  3. 6.xが最新だが今回は5をインストール 

コメント

No comments yet.

コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。