【Ruby】Google APIをRubyから叩いてみる
こんにちは、しきゆらです。
今回は、タイトル通りですが、GoogleのAPIを利用したアプリケーションを作るときの流れを見ていきます。
大まかな流れとしては、以下のとおりです。
- Google Cloud Consoleから、APIを有効にする
- APIを叩くための認証を通す
- 認証情報をもとに、APIを叩く
では、それぞれ見ていきます。
Google Cloud ConsoleからAPIを有効にする
アカウント作成
URLはこちら。=> https://console.cloud.google.com/?hl=ja
「Google Cloud Console」でググっても出てきます。
こちら、アカウントを作成しなければいけないようです。
今回は、すでにアカウントがあったので特に何もしませんが、
Googleのアカウントがあれば特に何も必要ないはずです。
APIプロジェクトを作成
Googleさんは、様々なAPIを公開しています。
必要なものだけを有効化してあげなければいけません。
APIプロジェクトを作成し、プロジェクトごとにAPIを有効にする流れのようです。
では、まずはプロジェクトを作っていきます。
ログインすると、トップページに行くはずです。
所定の項目を入力して作成。
APIを有効化
「ナビゲーションメニュー」 => 「APIとサービス」=>「ダッシュボード」から「APIとサービスの有効化」をクリック。
すると、様々なAPIやサービスの一覧が表示されます。
検索窓で、Calendar APIを探します。
API認証情報の設定
準備の最後です。
認証情報を取得します。
左側のバーにマウスオーバーすると、「認証情報」という欄があるのでクリック。
認証情報を作成。
- APIキー:ユーザデータを必要としないWebアプリ向け
- OAuthクライアントID:ユーザデータにアクセスする場合向け
- サービスアカウントキー:アプリケーション用の特別なアカウント
今回は、OAuthクライアントIDを選択します。
すると、同意画面を作成しろ、と怒られるので作成します。
最低限、メールアドレスとサービス名を書いて保存すればOKです。
サービス名は、自由に決めることができます。
次に、アプリケーションの種類を聞かれます。
今回はRubyさんから叩きたいので「その他」にしておきます。
すると、クライアントIDとクライアントシークレットの2つの値が表示されます。
これは、JSONファイルでダウンロードできるので、メモしなくても大丈夫です。
作成できたら、右端にあるダウンロードアイコンをクリックするとJSONファイルが取得できます。
取得できたJSONファイルは「client_secret.json」としておきます。
これにて、準備は完了です。
APIを叩くための認証を通す
APIを叩くためには、認証を通してから出ないと叩けません。
Rubyさんから認証を通す方法としては、Googleさんが提供してくれているライブラリを利用するのが簡単かと思います。
Google Auth Library for Ruby
Bundlerで管理していきます。
Gemfileには
gem 'googleauth'
を書き込みインストール。
なお、まだアルファ版のようで仕様が変更されることがあります。
ご注意を。
さて、認証のためのスクリプトは、サンプルをほとんどそのまま利用します。
Example (Command Line)のコードを少しいじって、以下のようなコードを作成。
ついでに、先程取得したJSONファイルを以下のスクリプトと同じところにおいておきます。
require 'googleauth' require 'googleauth/stores/file_token_store' OOB_URI = 'urn:ietf:wg:oauth:2.0:oob' user_id = 'your_id@gmail.com' client_id = Google::Auth::ClientId.from_file('./client_secret.json') token_store = Google::Auth::Stores::FileTokenStore.new(file: 'google_api.yml') scope = 'https://www.googleapis.com/auth/calendar' authorizer = Google::Auth::UserAuthorizer.new(client_id, scope, token_store) credentials = authorizer.get_credentials(user_id) if credentials.nil? url = authorizer.get_authorization_url(base_url: OOB_URI) puts "ブラウザで次のURLを開き、APIを許可してください" puts url puts '応答ページに表示されるコードを入力してください' print 'code:' code = gets credentials = authorizer.get_and_store_credentials_from_code( user_id: user_id, code: code, base_url: OOB_URI ) end
コードを実行し、URLをブラウザで開き、認証コードを取得後、コードを貼り付ければ認証できているはずです。
エラー等がなければ完了です。
認証情報をもとに、APIを叩く
では、実際にAPIを叩いていきます。
HTTPでアクセスできれば何でもいいですが、こちらもGoogleさんが提供してくれているライブラリを利用するのが簡単かと思います。
Google API Client
こちらもGemfileに追加し、インストール。
gem 'google-api-client'
APIを叩くコード
APIを叩くコードは、Calendar APIと同じメソッドが定義されているので、APIリファレンスとクライアントのメソッド両方を参考にしましょう。
APIリファレンス
https://developers.google.com/calendar/v3/reference/
ライブラリのCalendar該当部分
APIリファレンスでは、APIを叩いた結果をテストできる機能があります。
取得できるJSONの形式を確認しておくと、欲しい情報を取得するときに参考になると思います。
ライブラリの方は、リクエスト時に送るべきパラメータや、Rubyから取得するメソッド名など実際に利用するときの参考になるかと思います。
さて、今回は簡単に「自分のカレンダーの一覧を取得する」ということをやってみます。
利用するAPIは「CalendarList」です。
CalendarList: list
https://developers.google.com/calendar/v3/reference/calendarList/list
認証が通れば、APIを叩くだけで結果を取得できるので簡単で良いです。
とりあえず、先程の認証コードの下に以下を追記。
require 'google/apis/calendar_v3' # Calendar APIを利用するためのインスタンスを作成 service = Google::Apis::CalendarV3::CalendarService.new # 認証情報を付加 service.authorization = credentials # list_calendar_lists:カレンダーリストを取得するAPIを叩く # 返り値は、カレンダー要素の配列。eachですべてを表示している。 puts service.list_calendar_lists.items.each{|calendar| puts calendar.summary}
実行し、カレンダーの名前が列挙されれば成功です。
なお、上記サイトではAPIをブラウザ上で実行し、結果をJSON形式で確認することができます。
必要なデータがどの階層に入っているのかを確認すると便利です。
例えば、今回はカレンダーの名前を列挙していますが、
itemsという配列の中にある要素のsummaryが名前を表しているため、上記のようなコードになっています。
まとめ
さて、さっくりとではありますがGoogle APIを利用するための流れや使い方を確認してみました。
認証部分がバグっていたようでサンプルコードが動かない場面がありましたが、
バグは現在修正されているので問題なく動くはずです。
あとは、これを自分の作っているサービスと組み合わせたり、データを自分なりに可視化したりできそうですね。
今回はここまで。
おわり
ディスカッション
ピンバック & トラックバック一覧
[…] 参考 【Ruby】Google APIをRubyから叩いてみる | しきゆらの備忘録 […]