YouTubeのAPIを使えるようになるまでがめちゃくちゃわかりづらかったので、メモに残しておかないとやばいと思いました。
今回はPublicなデータにアクセスするための手順について書きます。OAuthについては触れません。
キーを取得しよう
まず、Google Developers Consoleへ行ってアプリケーションを作ってキーを取得する必要があります。
コンソールのCREATE PROJECT
ボタンを押して、名前を決めてプロジェクトを作ります。1回目は規約に同意するかどうかのチェックボックスがありますが、2回目いこうは省略されます。
そして、YouTube Data API v3
をONにします。
次にAPIアクセスようのキーを発行します。
クライアント毎にアプリケーションキーを分けることができるようです。次の種類から選ぶことができます。ここではiOSを選んでみます。
- Server key
- Browser key
- Android key
- iOS key
こんな風にキーが発行されました。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など、詳細な情報を得られるようになりました。
もっといろいろな使い方ができるのですがここまでわかればあとはリファレンスを見てなんとかできるのでは。