Google APIを使って、コマンドラインからYouTube動画の検索結果を取得してみる

よく訓練されたアップル信者、都元です。前回はFacebook APIからJSON形式のデータを取得してみました。今日は、Google APIからデータを取り出してみましょう。

クライアントの登録

Google APIでも OAuth 2.0 を利用していますので。Facebookと同じようにクライアントの登録が必要です。

Googleに普通にログインした状態で、https://console.developers.google.com/projectを開いてください。

Projects

Facebookではクライアントのことを「App」と呼んでいましたが、Googleにおいては「Project」と呼んでいるようです。というわけでプロジェクトを作りましょう。

Projects

任意のプロジェクト名(アルファベットが良いでしょう)をいれてCreateをクリックします。

Overview_-_miyamoto-aurl

プロジェクトの作成には数十秒の時間がかかります。作成が終わると、このような画面になりました。左側のメニュー内から「APIs」を選んでクリックします。

API_Library_-_miyamoto-aurl

色々ありますが、今回はYouTubeでも使ってみますか。

YouTube_Data_API_v3_-_miyamoto-aurl

「Enable API」をクリックしましょう。

YouTube_Data_API_v3_-_miyamoto-aurl

このように有効化されたら、引き続き、左側のメニューから「Credentials」を選択します。

Credentials_-_miyamoto-aurl

「Create new Client ID」の方を選びます。

Credentials_-_miyamoto-aurl

「Installed application」を選んで「Configure content screen」ボタンをクリック。

Consent_screen_-_miyamoto-aurl

クライアント確認用のダイアログ設定ですね。Product nameに、任意の名前を入れ、Saveします。

Credentials_-_miyamoto-aurl

再びこの画面に戻ってくるので、あらためて「Installed application」、そして「Other」を選んで「Create Client ID」ボタンをクリック。

Credentials_-_miyamoto-aurl

無事作成できました。ここに表示されているClient IDとClient sercretは後ほど使いますので、控えておいてください。

aurlでYouTube検索をしてみる

前回と同じように、aurlを利用します。前回インストールしていない方は、自分のマシンのターミナル(コマンドライン)を開いて、下記のコマンドを実行してaurlをインストールしてください。

$ brew tap classmethod/repos
$ brew install aurl
$ aurl -V
1.0

次に、このaurlコマンドを使ってFacebookにアクセスするため、下記の内容の設定ファイルを~/.aurl/profiles配置または追記します。

[google]
client_id = 前節で控えておいたClient ID
client_secret = 前節で控えておいたClient sercret
auth_server_auth_endpoint = https://accounts.google.com/o/oauth2/auth
auth_server_token_endpoint = https://www.googleapis.com/oauth2/v3/token
redirect = urn:ietf:wg:oauth:2.0:oob
scopes = https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/youtube.force-ssl https://www.googleapis.com/auth/youtube.readonly

そしてコマンドを実行。

$ aurl --profile google https://www.googleapis.com/youtube/v3/search?part=snippet&type=video&q=%E6%9D%BE%E6%B5%A6%E7%9C%9F%E4%B9%9F
Open https://accounts.google.com/o/oauth2/auth?(省略) and get code
Enter code:

すると、上のように「このURLを開いて、コードを得てください」というメッセージと共に、コードの入力待ちとなります。言われた通りにコピペでブラウザにURLを貼り付けて開きましょう。

許可のリクエスト

すると、上記のような確認ダイアログが現れますのでOKをクリック。

Success

今回はFacebookのように悲しいことにはなりませんでした。よかった。この中の認証コード部分を再びクリップボードにコピーし、それを先ほどの「Enter code: 」に対する応答として与えてやります。すると…

{
 "kind": "youtube#searchListResponse",
 "etag": "\"xmg9xJZuZD438sF4hb-VcBBREXc/hPNmQ1rDZKpxnpSyR-bRMUwuOfU\"",
 "nextPageToken": "CAUQAA",
 "pageInfo": {
  "totalResults": 2393,
  "resultsPerPage": 5
 },
 "items": [
  {
   "kind": "youtube#searchResult",
   "etag": "\"xmg9xJZuZD438sF4hb-VcBBREXc/720EQPxXTy1I7wUu9FGNjKZbFD0\"",
   "id": {
    "kind": "youtube#video",
    "videoId": "iv_NAdKM3iU"
   },
(略)

出ました。GoogleはJSONを整形して返してくれるようで、jqによる整形は要りませんでした。しかし、結構大量のデータがもさっと出てくるので少し交通整理をしたいと思います。

この結果は、動画を検索したものですが、ひとまず欲しいのは動画のタイトルとIDでしょう。膨大の情報の中から必要な情報だけを抜き出すのもjqの仕事です。下記は、コマンドの意味は理解できないかもしれませんが、特に難しいことは考えずに実行してみてください。

$ aurl --profile google https://www.googleapis.com/youtube/v3/search?part=snippet&type=video&q=%E6%9D%BE%E6%B5%A6%E7%9C%9F%E4%B9%9F \
  | jq '.items[] | {"id": .id.videoId, "title": .snippet.title}'

結果

{
  "id": "iv_NAdKM3iU",
  "title": "ギター芸人 新喜劇松浦真也さんの演奏まとめ"
}
{
  "id": "yKKIcIrZoN0",
  "title": "松浦真也 ハプニング!"
}
{
  "id": "VzJ_mLfdQIc",
  "title": "【第二弾】NMB48 新喜劇 名トリオ「吉田朱里・松浦真也・すっちー」婦警編 Part2"
}
{
  "id": "gk21tZU4oDs",
  "title": "よしもと新喜劇 松浦ギター集"
}
{
  "id": "4tFZfclaT64",
  "title": "新喜劇 松浦真也ギター&吉田裕 そのリズムやめろ"
}

といううわけで、あとはhttps://www.youtube.com/watch?v=の後にIDを付けてブラウザで開いてみましょう。

$ open https://www.youtube.com/watch?v=gk21tZU4oDs

今、俺の中で松浦真也が話題沸騰中。都元ダイスケは松浦真也さんを応援しています。