やりたいこと
手順
OAuth用のプラグインを入れる
このプラグインを入れるだけでOK
アプリケーションを登録する
WP管理画面のメニューの[ユーザー] > [Applications] を開く
こういった画面が表示されるので、中身を入力していく。
- Consumer Name
- アプリの名前。なんでも良い。
- Description
- わかりやすい説明。自分で後からなにに使っているか分かるように書いておく。
- Callback
入力が終わって Add Consumer
ボタンを押すと
と Client Key
と Client Secret
が表示される。これは後で使うのでメモっておく。他人には知られないようにする。
RubyでAccessTokenを取得する
Gemfileはこう
source "https://rubygems.org" gem "oauth"
メインのコードはこんな感じ
require 'oauth' require 'readline' CONSUMER_KEY = 'XXXXX' CONSUMER_SECRET = 'XXXXXXXXXXXX' WP_OAUTH_ENDPOINT = 'https://[あなたのWPドメイン]/' REQUEST_TOKEN_PATH = '/oauth1/request' AUTHORIZE_PATH = '/oauth1/authorize' ACCESS_TOKEN_PATH = '/oauth1/access' CALLBACK_URL = 'https://[あなたのWPドメイン]/success' consumer = OAuth::Consumer.new(CONSUMER_KEY, CONSUMER_SECRET, :site => WP_OAUTH_ENDPOINT, :request_token_path => REQUEST_TOKEN_PATH, :authorize_path => AUTHORIZE_PATH, :access_token_path => ACCESS_TOKEN_PATH) request_token = consumer.get_request_token(oauth_callback: CALLBACK_URL) puts '下記のURLにアクセスして認証を行う。`oauth_verifier` というクエリパラメータがあるのでコピペして入力する。' puts request_token.authorize_url oauth_verifier = Readline.readline("oauth_verifier >") access_token = request_token.get_access_token(:oauth_verifier => oauth_verifier) puts "token: #{access_token.token}" puts "secret: #{access_token.secret}"
メモっておいた CONSUMER_KEY
, CONSUMER_SECRET
, CALLBACK_URL
を入力してから実行する。
REQUEST_TOKEN_PATH
などでPathを変えているが、これは https://[あなたのWPドメイン]/wp-json
にアクセスすると取得できるJSONの "authentication" > "oauth1" に記載されているので、うまく動かない場合は確認すると良い。
このコードを実行するとTokenとSecretが取得されて表示されるので、あとはそれを利用してREST APIを叩けば良い。
WPのREST APIを叩いて新規投稿する
上で生成した consumer
や access_token
をそのまま利用する。
require 'typhoeus' require 'oauth/request_proxy/typhoeus_request' hydra = Typhoeus::Hydra.new uri = 'https://[あなたのWPドメイン]/wp-json/wp/v2/posts/' oauth_params = { consumer: consumer, token: access_token, request_uri: uri } data = { title: "タイトルです", content: "記事の本文です" } req = Typhoeus::Request.new( uri, method: :post, params: data ) oauth_helper = OAuth::Client::Helper.new(req, oauth_params.merge(request_uri: uri)) req.options[:headers]["Authorization"] = oauth_helper.header hydra.queue(req) hydra.run response = req.response
これで新しい記事が下書き状態で追加される。最初から公開状態にしたり、CategoryやTagを追加することもできる。詳しいAPIの使い方やパラメータは、公式のハンドブックを見ると良い。