読者です 読者をやめる 読者になる 読者になる

google-api-ruby-clientをRailsで使おうとしたときにはまったこととその解決策

概要

タイトル通り。備忘録も兼ねてまとめておきます。

Google::APIClient.newでエラーが出る

NameError: uninitialized constant Googleって出てえっ?ってなったパターン(笑)

これはGemfile

gem 'google-api-client'

としか書いておらず、gemの読み込みに失敗しているから。
公式ドキュメントを見ればわかるように、requireするのはgoogle/api_client(を含む3つのgem)なので

gem 'google-api-client', require: 'google/api_client'

と、明示的に指定してあげればOK。

OAuthなし(APIキーのみ)で利用したい

Google+にログインする必要のない操作、例えば、特定のユーザーの一般公開された投稿を取得したいといったものであれば、認証は必要ありません。
ただ、公式ドキュメントのコードはOAuthの使用が前提になっているので、APIキーだけで利用する方法を色々調べてみました。

結論としては、以下のようにすれば動くみたいです。

client = Google::APIClient.new(
  application_name: 'Example Ruby application',
  application_version: '1.0.0'
)

client.key = "your api key"
client.authorization = nil

result = client.execute(
  api_method: client.discovered_api(:plus).activities.list,
  parameters: { collection: "public", userId: 101748015513264110691 }
)

client.authorization = nilとしているのがポイントで、こうしないとArgumentError: Missing access token.というエラーが出ます。

結果をHashで受け取りたい

client.executeの戻り値に対して.data.to_hashを実行してあげればOKです。

おわりに

Google+AKB48がきっかけで始めました。

参考