サンプルコードの概要
YouTube Data APIを使って、キーワードに合致する動画を検索します。
- 全件取得します。
- 言語はPHPです。
- Google APIキーが必要です。クライアントIDとクライアントシークレットは不要です。
まずは、下準備として
をごらんください。
その他のサンプルコードはこちらGoogle APIの記事一覧
サンプルコード
<?php
if (!file_exists(__DIR__ . '/vendor/autoload.php')) {
throw new \Exception('please run "composer require google/apiclient:~2.0" in "' . __DIR__ .'"');
}
require_once __DIR__ . '/vendor/autoload.php';
$DEVELOPER_KEY = 'APIキーをここに入れる';
$client = new Google_Client();
$client->setDeveloperKey($DEVELOPER_KEY);
$youtube = new Google_Service_YouTube($client);
$htmlBody = '';
try {
$condition = array(
'q' => '#ほげ',
'type' => 'video',
'maxResults'=> 50,
'order' =>'viewCount',
'type' => 'video'
);
do{
$searchResponse = $youtube->search->listSearch('id,snippet', $condition);
foreach ($searchResponse['items'] as $searchResult) {
$htmlBody .= "<li>{$searchResult['id']['videoId']} : {$searchResult['snippet']['title']}</li>";
}
$condition["pageToken"] = $searchResponse["nextPageToken"];
} while($searchResponse["nextPageToken"]); //次のページがなくなるまで繰り返す
} catch (Google_Service_Exception $e) {
$htmlBody .= sprintf('<p>A service error occurred: <code>%s</code></p>',
htmlspecialchars($e->getMessage()));
} catch (Google_Exception $e) {
$htmlBody .= sprintf('<p>An client error occurred: <code>%s</code></p>',
htmlspecialchars($e->getMessage()));
}
?>
<!doctype html>
<html>
<head>
<title>YouTube Search</title>
</head>
<body>
<ul><?=$htmlBody?></ul>
</body>
</html>
YouTube Data API公式ページ ⇒ 検索(Search) ⇒ リスト(list)メソッドにあるSearch: listのPHPサンプルコードをベースにしています。
- 8行目の「APIキーをここに入れる」の部分を、取得したAPIキーで置き換えてください。
- 18行目で検索条件を指定しています。例では「ほげ」というタグを持つ「動画」を指定しています。
ほかにどんな条件を指定できるのか、公式リファレンスのSearch: list #パラメータをチェックしてください。 - maxResultsはデフォルトで「5」なので、「50」を指定します。
- viewCount(再生回数)でソートしていますが、常に正しい順番で取得できるわけではないようなので、別途自前のDBに入れてソートしたほうが良いと思います。
- 29行目で情報を取得しています。例では「動画ID:動画タイトル」のようにしています。
ほかにどんな情報を取得できるのか、公式リファレンスのSearch #リソース表現をチェックしてください。 - 32行目でnextPageTokenを次の検索条件に指定しています。
nextPageTokenとは?
このメソッドでは50件ずつしか取得できません。
じゃあ、50件以上の動画があるときは・・・?
そこで、「まだまだ動画があるよ」という場合には、レスポンスにその目印が含まれて返ってきます。
その目印(=nextPageToken)を次の検索条件に含めて、再度検索します。
「もう動画はないよ」となったら、レスポンスのnextPageTokenが空になります。
「1度は検索して、nextPageTokenが空になるまで、繰り返し処理する」というわけで、do…while文を使ってみました。