2014年7月15日火曜日

BloggerAPIv3をrubyから使ってみた

■環境
Mac OS X 10.8.5
Ruby 2.1.2p95
Gem 2.2.2

■事前準備
  • Googleアカウントの作成
  • Google Developer Consoleでプロジェクトの作成
  • RubyおよびGemのインストール
※ここは説明を省略します

■作成したプロジェクトが持つアクセスキーに紐づくリダイレクトURLを設定する
何かややこしい書き方をしていますが、BloggerAPIv3は認証時にOAuth2を用いるためリダイレクトURLを設定する必要があります

  1. https://code.google.com/apis/console/b/0/?noredirect#project:[project_number]:access にアクセス
  2. [project_number]にはDevelopers Consoleで確認できるプロジェクトの番号を入力してください
  3. 左メニュー上部に現在のプロジェクトを切り替えるプルダウンがあるので作成したプロジェクトに切り替え
  4. 左メニューの「API Access」を選択
  5. 「Client ID for web applications」用のアクセスキーが存在するか確認します、ない場合は「Create another client ID」から新規にアクセスキーを作成
  6. 新規アクセスキー作成時に「Redirect URIs」を「http://localhost:9292」に設定
  7. 作成が完了したら一覧に戻り作成したアクセスキーに「Redirect URIs」が設定されているか確認

ここでリダイレクトURLに localhost:9292 を設定しているのは、使用しているgoogle-api-clientのgemが勝手にコールバックしてくれるURLになります
アプリ側(google-api-client を使用した ruby アプリ)から指定するリダイレクトURLとDevelopers Console側に登録したアクセスキーが持つリダイレクトURLは同一である必要があるためです
またこの作業はURLを見てもわかりますが旧Developer Consoleで実施する必要があります

以下のような感じになっていればOKです

■Google Developers Consoleから認証用のjsonファイルを取得する
  1. https://console.developers.google.com/ にアクセス
  2. Googleアカウントでログイン後、プロジェクトの一覧から作成したプロジェクトを選択
  3. 左メニューからCredentialsを選択
  4. OAuthの「Download JSON」をクリックし適当な位置にダウンロード
  5. ダウンロード後ファイル名をclient_secrets.jsonに変更、サンプルソースコードと同じディレクトリに保存

ここでダウンロードしたjsonファイルを元にgoogle-api-clientが勝手にOAuth2認証を実施してくれます

以下の箇所からダウンロードするイメージです

■google-api-clientのGemインストール
gem install google-api-client

■サンプルソースコード
先ほどダウンロードした認証用のJsonファイルがと同じ階層に以下のサンプルコードを配置してください

# -*- coding: utf-8 -*-
require 'google/api_client'
require 'google/api_client/client_secrets'
require 'google/api_client/auth/installed_app'
require 'json'

blog_id = "Please input your blogger_id"

client = Google::APIClient.new(
  :application_name => 'Sample Blogger API App',
  :application_version => '1.0.0'
)
blogger = client.discovered_api('blogger', 'v3')

# この処理でダウンロードしたアクセスキーが記載されたJsonファイルを読み込む
client_secrets = Google::APIClient::ClientSecrets.load

flow = Google::APIClient::InstalledAppFlow.new(
  :client_id => client_secrets.client_id,
  :client_secret => client_secrets.client_secret,
  :scope => ['https://www.googleapis.com/auth/blogger']
)
# アプリを認証許可するまでここでwaitする
client.authorization = flow.authorize

# APIを実行する
result = client.execute(
  :api_method => blogger.posts.list,
  :parameters => { 'blogId' => blog_id }
)

# return Google::APIClient::Schema::Blogger::V3::PostList
# puts result.data.class
# puts result.data.methods
# puts result.data.to_json

json = JSON.parse(result.data.to_json)
json['items'].each do |item|
  puts "id : " + item['id']
  puts "title : " + item['title']
  puts "content : " + item['content']
end

blog_id = "Please input your blogger_id"
の部分に自分のbloggerのIDを入力してください
blog_idはbloggerの管理UIにログインしてURLに表示される番号を入力してください

ruby test_blogger_api.rb

と実行するとリダイレクトURLに設定したlocalhost:9292のページが表示されアプリからのアクセス承認を求められます
その後、ターミナルに戻るとポストの一覧が結果がされていると思います
1回の取得で最大10件しか取得できないので次のページを取得する場合はレスポンスのobjectをページネートして次の10件を取得してください
(たしか、resultオブジェクトにページネートできるメソッドが実装されていたと思います)

以上です
ポイントはOAuth2.0を使っているのでプロジェクトに作成するアクセスキーにちゃんとRedirect URLを設定するところでしょうか
あとはRubyのリファレンスが少ないのでmethodsで使えるメソッド名を確認したり参考サイトにも紹介しているAPIExplorerで実際のJsonレスポンスを見てレスポンスオブジェクトへのアクセス方法を自分調べる必要がありました

■参考サイト
google-api-client本家サイト
https://developers.google.com/api-client-library/ruby/start/get_started?hl=ja

Google API Explorer
ここを参考にしてexecuteするリクエストのパラメータ等は調べられると思います
https://developers.google.com/apis-explorer/#p/blogger/v3/

0 件のコメント:

コメントを投稿