LoginSignup
5
6

More than 5 years have passed since last update.

Wordpress.comのREST APIで投稿済みエントリーを更新してみる

Posted at

手順

  1. Client idとClient Secretを発行してもらう
  2. access tokenを取得する
  3. REST APIを使う

Client idとClient Secretを発行してもらう

  1. https://developer.wordpress.com/apps/ から Create New Application する
  2. フォームを埋める

Redirect URIについて:
access token取得作業中、wordpress.comからリダイレクトされる先を指定します。
リダイレクトを受ける事ができなくとも、access tokenを取得する事は可能です。(文末のsinatraコードを使えば、この辺の作業は楽になります)
リダイレクトが受けられない場合は、存在しないURIを記載しておきましょう。(自己責任)

access tokenを取得する

  1. https://public-api.wordpress.com/oauth2/authorize?client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&response_type=code にブラウザでアクセス
  2. アプリケーション認証画面でAuthorizeする
  3. REDIRECT_URI+code=XXXXというURIにリダイレクトされる
  4. 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
5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6