2019年3月4日月曜日

Ruby で BloggerV3 API を試す

概要

Google APIs が提供する BloggerAPI の V3 を Ruby からコールしてみました
今回は認証方式に API キー認証を使っています

環境

  • macOS 10.14.3
  • Ruby 2.5.1p57
    • google-api-client 0.28.4

Blogger API V3 の有効化

ここから Blogger API V3 を検索して有効にします
API を選択し

「有効にする」を選択します

API キーの作成

今回は API キーという認証方式を使って BloggerV3 API をコールします
認証情報から API キーを作成しましょう
一応制限として BloggerV3 API のみをコールできるようにしました

Google APIs には複数の認証方式があります
基本は OAuth2 認証を使ってアクセストークンを取得しますが CLI 環境だといろいろ面倒です
API キー方式を使えば簡単な文字列のキーを使って API をコールすることができます

ただし、API キーの場合はコールできる API に制限があります
BloggerV3 だと例えば listByUser などは API キー認証ではコールできません
コールしようとすると Google::Apis::AuthorizationError エラーが発生します
ログの詳細を見るとわかりますが Login Required なので OAuth2 でブラウザログインをしてアクセストークンを取得して API コールする必要があるのがわかります

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "required",
    "message": "Login Required",
    "locationType": "header",
    "location": "Authorization"
   }
  ],
  "code": 401,
  "message": "Login Required"
 }
}

なので今回はコール可能な API をコールする方法を紹介しています

記事の一覧を取得する

特定のブログに対する記事の一覧の取得は API キー認証で行なえます
API キーの指定の他にブログ ID と呼ばれるブログの識別子が必要になります
Blogger の管理画面にログインすれば URL バーに ID が表示されるのでそれを使うと簡単です

  • bundle init
  • vim Gemfile
gem "google-api-client"
  • bundle install --path vendor
  • vim app.rb
require 'google/apis/blogger_v3'

KEY = 'api-key'
BLOG_ID = '1234567890' # get from https://www.blogger.com/

cli = Google::Apis::BloggerV3::BloggerService.new
cli.key = KEY

ret = []
token = nil
loop do
  posts = cli.list_posts(BLOG_ID, max_results: 500, page_token: token)
  ret.push(posts.items)
  token = posts.next_page_token
  break if token.nil?
end
ret.flatten!
puts ret.first.to_json

list_posts を使います
今回指定しているオプションは max_resultspage_token です
max_results は取得する件数です
デフォルトだと 10 になっているので最大の 500 を指定しています
page_token は次の件数がある場合に取得できます
今回の場合であれば 500 件以上の場合は next_page_token が返ってくるので次の 500 件を取得しています

あとは結果をまとめて、とりあえず最初の 1 件目だけ表示しています
配列の中には Google::Apis::BloggerV3::Post クラスのオブジェクトが入っているのであとは必要なパラメータを参照すれば OK です

コールできなかった API

  • Blogs
  • Users
  • BlogUserInfos
  • PageViews
  • PostUserInfos

基本的には user_id が必要な API はダメでした
PageViews はユーザ情報は不要なのですがダメでした
API キーでアクセスできるのは Public な記事やコメント情報だけっぽいです

最後に

BloggerV3 API を Ruby からコールしてみました
今回紹介した API キー認証の場合には API に制限がありコールできない API もあるので注意してください
おそらく API キー認証の制限は BloggerV3 API だけではなく他の API でも言えることだと思います

コールできるかどうかやコールの方法は API Explorer があるのでこれを使いながらやるとわかりやすいと思います

参考サイト

0 件のコメント:

コメントを投稿