手順
- Client idとClient Secretを発行してもらう
- access tokenを取得する
- REST APIを使う
Client idとClient Secretを発行してもらう
-
https://developer.wordpress.com/apps/ から
Create New Application
する - フォームを埋める
Redirect URIについて:
access token取得作業中、wordpress.comからリダイレクトされる先を指定します。
リダイレクトを受ける事ができなくとも、access tokenを取得する事は可能です。(文末のsinatraコードを使えば、この辺の作業は楽になります)
リダイレクトが受けられない場合は、存在しないURIを記載しておきましょう。(自己責任)
access tokenを取得する
-
https://public-api.wordpress.com/oauth2/authorize?client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&response_type=code
にブラウザでアクセス - アプリケーション認証画面でAuthorizeする
-
REDIRECT_URI+code=XXXX
というURIにリダイレクトされる -
https://public-api.wordpress.com/oauth2/token
へ上記のcode
等をPOSTし、access tokenを取得する
Redirect URIについて:
3の時、存在しないURIが指定されていた場合は、当然ブラウザアクセスができません。
しかし、ブラウザのロケーションバーのcode
が取得できれば、4でPOSTする事は可能です。
REST APIを使う
POST_IDの内容を、標準入力からの入力内容で上書きします
require 'net/http'
require 'uri'
require 'date'
access_token = ACCESS_TOKEN
site = SITE_NAME
post_id = POST_ID
token_type = 'bearer'
bd = {content: STDIN.read, date: DateTime.now.iso8601}
uri = URI.parse("https://public-api.wordpress.com/rest/v1/sites/#{site}/posts/#{post_id}?pretty=1")
req = Net::HTTP::Post.new(uri.request_uri)
req['authorization'] = "#{token_type} #{access_token}"
req.set_form_data(bd)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
# http.set_debug_output STDERR
res = http.start{|h| h.request(req)}
STDERR.puts res.body
access token取得用 sinatra
文中 access tokenを取得する を行うSinatraコードです
require 'sinatra'
require 'net/http'
require 'uri'
# lookup on https://developer.wordpress.com/apps/
bd = { client_id: CLIENT_ID,
client_secret: CLIENT_SECRET,
redirect_uri: 'http://localhost:4567/oauth2'}
get '/' do
"https://public-api.wordpress.com/oauth2/authorize?client_id=#{bd[:client_id]}&redirect_uri=#{bd[:redirect_uri]}&response_type=code"
end
get '/oauth2' do
bd.merge!(code:params[:code], grant_type:'authorization_code').to_s
uri = URI.parse('https://public-api.wordpress.com/oauth2/token?pretty=1')
req = Net::HTTP::Post.new(uri.request_uri)
req.set_form_data(bd)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.set_debug_output $stderr
res = http.start{|h| h.request(req)}
res.body
end