読者です 読者をやめる 読者になる 読者になる

YoutubeAPIで再生回数順の動画リストを取得する方法

はじめに

YoutubeAPIを使って何かできないかなと思って、サンプルを作ってみたのでそのときのメモ。

ちなみに本当にやりたかったことは日別、月別などの再生回数順のリストを取得して簡単なランキングサイトでも作りたかったのですが、今のところやり方がわからずです。
また、サーバー側のPHPでデータを取得する形です

とりあえずは以下を実装
・キーワードで検索して全期間での再生回数順のリストを取得すること
・動画が属するカテゴリーで絞り込みを行いたい
・日本の動画を取得したい

APIキーを取得する

Google Developer ConsoleよりAPIキーを取得する

グーグルアカウントは必要なので予め取得しておきます

1. 上記のURLより以下のページへアクセスして、「プロジェクトを作成」ボタン

2. 適当なプロジェクト名を入力して、「作成」ボタン
※今回は「myApp」としました

3. プロジェクト名をクリック

4. 「Google APIを利用する」をクリック

5. 「Youtube Data API」をクリック

6. 「APIを有効にする」をクリック

7. 「認証情報に進む」をクリックして以下を入力して「必要な認証情報」をクリック
・使用するAPI = Youtube Data API v3
APIを呼び出す場所 = ウェブサーバー
・アクセスするデータの種類 = 一般公開データ

8. APIキーを作成する
名前= あとでわかりやすい名前を適当に入力
APIキーを作成」ボタンをクリック
APIキーが画面に表示されるのでメモしておく

実装

今回は提供されているPHPSDKを使いませんでした。
SDKのリファレンスに全てのAPIの使い方が載ってるわけではなさそうなので、API仕様書を随時確認しながらやるのが早そうと思ったためです
また、今回使うのは、「検索(Search)API」になります

$DEVELOPER_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // 上で取得したAPIキー

$params = array(
    "q" => urlencode("キーワード"), // 検索キーワード
    "type" => "video",  // channel, playlist, videoが指定可
    "part" => "id,snippet",
    "order" => "viewCount", // viewCount(再生回数順),date(作成日順),rating(評価順), relevance(検索キーワードの関連度順)などが指定可
    "maxResults" => 30, // 取得最大件数(50がマックス)
    "safeSearch" => "none",
    'regionCode' => 'JP',
    "videoCategoryId" => "17", // カテゴリID(下の方に取得方法書きました)
    "key" => $DEVELOPER_KEY,
);

$query = "";
foreach ($params as $k => $v) {
    $query .= $k . "=" . $v . "&";
}
$query = substr($query, 0, -1);

$url = "https://www.googleapis.com/youtube/v3/search?".$query;

$result = file_get_contents($url);
$result = json_decode($result);

// 使うデータだけ配列に入れ直す
$searchList = array();
foreach ($result->items as $k => $v) {
    $searchList[] = array(
        "videoId" => $v->id->videoId,
        "title" => $v->snippet->title,
        "description" => $v->snippet->description,
	"thumbnails_default" => $v->snippet->thumbnails->default->url,
    );
}

カテゴリ一覧取得

https://www.googleapis.com/youtube/v3/videoCategories?part=id,snippet&regionCode=JP&key=xxxxx

こちらは上記のAPIをブラウザ等で直接叩いても確認できました

おわりに

指定期間内の再生回数順のリストの取得方法。ご存知の方、いらっしゃいましたら教えてください

以上です