ぴよログ

↓に移転したのでこっちは更新されません、多分。

YouTubeAPI超入門 使い始めから検索まで

移転しました →

YouTubeAPIを使えるようになるまでがめちゃくちゃわかりづらかったので、メモに残しておかないとやばいと思いました。

今回はPublicなデータにアクセスするための手順について書きます。OAuthについては触れません。

キーを取得しよう

まず、Google Developers Consoleへ行ってアプリケーションを作ってキーを取得する必要があります。

コンソールのCREATE PROJECTボタンを押して、名前を決めてプロジェクトを作ります。1回目は規約に同意するかどうかのチェックボックスがありますが、2回目いこうは省略されます。

そして、YouTube Data API v3をONにします。

次にAPIアクセスようのキーを発行します。

クライアント毎にアプリケーションキーを分けることができるようです。次の種類から選ぶことができます。ここではiOSを選んでみます。

こんな風にキーが発行されました。API keyという欄に書かれている文字列がキーです。APIで問い合わせる際にこのキーを使用します。

ビデオを取得する

ビデオ取得のやりかたをいくつかのパターンで試してみます。

リファレンスはこれ。Videos: list - YouTube — Google Developers

APIキーと検索キーワードを使って動画の検索ができます。

https://www.googleapis.com/youtube/v3/search?key={YOUR_API_KEY}&q={SEARCH_TERM}&part=id

例えばサッカーと検索したい場合はq=サッカーとしてリクエストを投げます。

// https://www.googleapis.com/youtube/v3/search?key={YOUR_API_KEY}&q=サッカー&part=id


// jsonレスポンス
{
 "kind": "youtube#searchListResponse",
 "etag": "\"qQvmwbutd8GSt4eS4lhnzoWBZs0/lGGCM9oSIhJS2gnOaQu1RjEiDx8\"",
 "nextPageToken": "CAUQAA",
 "pageInfo": {
  "totalResults": 1000000,
  "resultsPerPage": 5
 },
 "items": [
  {
   "kind": "youtube#searchResult",
   "etag": "\"qQvmwbutd8GSt4eS4lhnzoWBZs0/RGl-lf1mZjCqGo-FbFwvgjAY6B0\"",
   "id": {
    "kind": "youtube#video",
    "videoId": "lwYgdBQ0k3U"
   }
  },
  {
    // ...
  }

 ]
} 

nextPageToken

デフォルトでは1ページあたり5件の結果が返ってきます。続きの結果を得たい場合には最初のレスポンスにあったnextPageTokenを使って次のようなリクエストをします。

https://www.googleapis.com/youtube/v3/search?key={YOUR_API_KEY}&q=サッカー&part=id&pageToken=CAUQAA

こうすると2ページ目の結果が得られた上、新たなnextPageTokenや前のページのためのprevPageTokenが得られるようになります。結果を次々に取ってきたい場合はこのtokenを使って繰り返しリクエストしていけばOK。

maxResults

1回のリクエストあたり5件だとまどろっこしい、100件ぐらい持ってこいと思った場合はmaxResultsパラメータを使います。

URLの最後に&maxResults=100に問い合わせてみると、、

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "invalidParameter",
    "message": "Invalid value '100'. Values must be within the range: [0, 50]",
    "locationType": "parameter",
    "location": "maxResults"
   }
  ],
  "code": 400,
  "message": "Invalid value '100'. Values must be within the range: [0, 50]"
 }
} 

怒られた…。最大50件まででした。

part

part=idとなっているところを変えるとレスポンスで返ってくるパラメータを変えることができます。カンマ区切りで複数指定できます。

例えばpart=id,snippetとしてみると、、、

// https://www.googleapis.com/youtube/v3/search?key={YOUR_API_KEY}&q=サッカー&part=id,snippet


// レスポンス
{
 "kind": "youtube#searchListResponse",
 "etag": "\"qQvmwbutd8GSt4eS4lhnzoWBZs0/TvUA3aT9bg7gzx72UgdpWtsjAD0\"",
 "nextPageToken": "CAUQAA",
 "pageInfo": {
  "totalResults": 1000000,
  "resultsPerPage": 5
 },
 "items": [
  {
   "kind": "youtube#searchResult",
   "etag": "\"qQvmwbutd8GSt4eS4lhnzoWBZs0/YNAKTLX6SbYCco99EQWCyVDIxCo\"",
   "id": {
    "kind": "youtube#video",
    "videoId": "lwYgdBQ0k3U"
   },
   "snippet": {
    "publishedAt": "2013-10-04T05:16:29.000Z",
    "channelId": "UCZfWmiGEbwWNPMe2nr3WdDg",
    "title": "【WOWOW】U-12ジュニアサッカーワールドチャレンジ2013 FCバルセロナ ダイジェスト",
    "description": "U-12ジュニアサッカーワールドチャレンジ2013 FCバルセロナ ダイジェスト ☆U-12 Junior soccer world challenge 2013 FC Barcerona Infantil B digest 2013年8月27 ...",
    "thumbnails": {
     "default": {
      "url": "https://i.ytimg.com/vi/lwYgdBQ0k3U/default.jpg"
     },
     "medium": {
      "url": "https://i.ytimg.com/vi/lwYgdBQ0k3U/mqdefault.jpg"
     },
     "high": {
      "url": "https://i.ytimg.com/vi/lwYgdBQ0k3U/hqdefault.jpg"
     }
    },
    "channelTitle": "WOWOWofficial",
    "liveBroadcastContent": "none"
   }
  },
  {
    // ...
  }
 ]
} 

動画のタイトルやサムネイルのURLなど、詳細な情報を得られるようになりました。

もっといろいろな使い方ができるのですがここまでわかればあとはリファレンスを見てなんとかできるのでは。