今回は YouTube Data API v3 を使ってみます。
YouTube Data API v3 とは
Googleが提供しているAPIのひとつ。
YouTube関連でいうと、他にもYouTube Analytics APIなども提供されていますが、今回は動画検索をしたくYouTube Data APIを利用しました。
YouTube Data APIでは、主に以下のようなことができます。
操作 | 概要 |
---|---|
list | リソース(動画やプレイリスト、チャンネルなど)を取得 |
insert | 新しいリソースの作成 |
update | 既存のリソースの変更 |
delete | 特定のリソースを削除 |
なお、それぞれの操作で扱えるリソースは異なるようです。詳細はドキュメントをご覧ください。
YouTube Data API の概要#リソースとリソースの種類
前提
利用するためには、Googleアカウントを所持していること。
これさえクリアしていれば簡単に利用できます。
手順
1. YouTube Data APIの有効化
https://console.developers.google.com
上記にアクセスし、「新しいプロジェクト」を作成します。お好きなプロジェクト名を入力し、作成します。
プロジェクトが完成したら、右上のベルマークに通知がきますので、そこからプロジェクトページへ移動。
このような画面がでてきますので、画面中央のAPIから「APIの概要に移動」をクリック。
そして「APIとサービスを有効化」をクリックすると以下のような画面が出てきますので、ここからYouTube Data APIを検索し、「有効にする」をクリック。
これで、YouTube Data APIを利用できるようになりました。
2. Credentialの追加
続いて、APIのアクセスキーを取得します。
プロジェクトページの左側のナビゲーションから「認証情報」をクリック。
「認証情報を作成」→「APIキー」を選択すると、あっという間に作成してくれます。
この作成したAPIキーは、アプリケーション制限(IPアドレスなど)やAPI種類の制限(YouTube Data APIでしか利用できない、など)など、利用制限設定ができますので、適宜設定してください。
…なんと、これで準備は完了です。非常に簡単ですね。
リソース検索してみる
これで準備が整ったので、実際にAPIを使ってみたいと思います。
今回はScala+Play(Httpクライアントはokhttp
)で試してみます。
/**
* provide Youtube Apis.
*/
@Singleton
class YoutubeApi {
private lazy val client: OkHttpClient = new OkHttpClient()
/**
* Search Youtube Contents.
*
* @return
*/
def search(): String = {
val host: String = "https://www.googleapis.com/youtube/v3/search?"
val params: String = "part=snippet®ionCode=jp&q=hanaenatsuki&key=${key}"
val url: String = host + params
val request: Request = new Request.Builder().url(url).build()
client
.newCall(request)
.execute()
.body()
.string()
}
実行してみると、以下のような結果を取得できました(一部省略)。結果はjsonで返ってきます。
{
"kind": "youtube#searchListResponse",
"etag": "5tf0sV-PMXIhtJBWLXFYDiCSBbk",
"nextPageToken": "CAUQAA",
"regionCode": "JP",
"pageInfo": {
"totalResults": 9302,
"resultsPerPage": 5
},
"items": [
{
"kind": "youtube#searchResult",
"etag": "viayFPw-HKkvnbsnjJfGokVv4_k",
"id": {
"kind": "youtube#channel",
"channelId": "UC3C3YOGFjn7Pq3lOCeUFHfg"
},
"snippet": {
"publishedAt": "2016-12-22T15:41:09Z",
"channelId": "UC3C3YOGFjn7Pq3lOCeUFHfg",
"title": "花江夏樹",
"description": "花江夏樹の個人的な趣味チャンネルです。 普段は声優の仕事をしています。本物です。 基本毎週 月水金 19時更新 (休むこともある)",
"thumbnails": {
"default": {
"url": "https://yt3.ggpht.com/-ar5eKAL9l20/AAAAAAAAAAI/AAAAAAAAAAA/1VHDWCAjXuI/s88-c-k-no-mo-rj-c0xffffff/photo.jpg"
},
"medium": {
"url": "https://yt3.ggpht.com/-ar5eKAL9l20/AAAAAAAAAAI/AAAAAAAAAAA/1VHDWCAjXuI/s240-c-k-no-mo-rj-c0xffffff/photo.jpg"
},
"high": {
"url": "https://yt3.ggpht.com/-ar5eKAL9l20/AAAAAAAAAAI/AAAAAAAAAAA/1VHDWCAjXuI/s800-c-k-no-mo-rj-c0xffffff/photo.jpg"
}
},
"channelTitle": "花江夏樹",
"liveBroadcastContent": "none",
"publishTime": "2016-12-22T15:41:09Z"
}
},
{
"kind": "youtube#searchResult",
"etag": "gRSJ4tI5FIymRL-rHhEO_GqCXpI",
"id": {
"kind": "youtube#video",
"videoId": "ex9RgLSt5XU"
},
"snippet": {
"publishedAt": "2020-07-05T10:00:11Z",
"channelId": "UC3C3YOGFjn7Pq3lOCeUFHfg",
"title": "【Undertale】#1 声優 花江夏樹がアフレコしながらクリアを目指す【アンダーテール】",
"description": "あらすじ 今回はソロ実況! あの名作UNDER TALEをプレイしていきます! ▽出演者 花江夏樹 ▽編集 正一 花江夏樹 ▽DLや購入はこちらから...",
"thumbnails": {
"default": {
"url": "https://i.ytimg.com/vi/ex9RgLSt5XU/default.jpg",
"width": 120,
"height": 90
},
"medium": {
"url": "https://i.ytimg.com/vi/ex9RgLSt5XU/mqdefault.jpg",
"width": 320,
"height": 180
},
"high": {
"url": "https://i.ytimg.com/vi/ex9RgLSt5XU/hqdefault.jpg",
"width": 480,
"height": 360
}
},
"channelTitle": "花江夏樹",
"liveBroadcastContent": "none",
"publishTime": "2020-07-05T10:00:11Z"
}
},
...
]
}
僕が使ったパラメータだけ簡単に説明します。
パラメータ | required | 概要 |
---|---|---|
part | true |
snippet にすると動画のタイトルや説明なども取得できる。 |
regionCode | false | 指定した国の検索結果に絞り込める。 |
q | false | 検索ワードをセットできる。 |
key | アクセスキーをセットできる。 | |
その他パラメータや上記パラメータの詳細は以下をご覧ください。 | ||
Search: list |
注意点
非常にシンプルに利用できますが、無料範囲ではいろいろ制限があります。
こちらの割り当てから利用状況が確認できますが、10,000 Queries / day などの制限があります。
Search APIを一度実行すると102 Queries消費していたので、1日で実行できるのはSearch APIだけだとおおよそ98回程度って感じですね。
無料範囲で利用する場合は、お気をつけください。