webコンテンツを徹底強化!WordPressサイト制作とプラグイン&テーマ情報・メンテ/エラー対応から、PHP/CSS/javascript、動画・音・イラスト等制作まで扱うコラム
マルチメディアコンテンツ制作読んどけ☆コラム

YouTube Data APIを使って、PHPで『タイトル・動画id・サムネイル画像』などを取得してみる(Search: listリソース)

      2021/02/23

今回は、youtubeとwebサイト連携で、YouTube Data APIを使って、PHPで『タイトル・動画id・サムネイル画像』などを取得してみます。前回はvideoリソースとか使って1件取った感じでしたが、今回はリストにしてまとめて取る・サイト上に表示みたいなところまでいってみます。パラメータやPHPプログラムなども見ていってみましょう。

YouTube Data API・Search: listリソースのパラメータ指定は?

前回のおさらい(APIキー入手)

YouTube Data APIから、動画のデータを取得するには『APIキー』が必要です。当サイト過去記事にて、APIキーを取ってみたときのことを書いていますので、参考になさってください。

Search: listリソースのパラメーターについて

urlはこんな感じになります。 https://www.googleapis.com/youtube/v3/search?key={}&channelId={}&part=snippet&order=date&maxResults=12

Search: listリソースを使うには『v3/search』のように指定。パラメータはこのように指定しました。『key={}』の部分にはAPIキーを、『channelId={}』の部分には、チャンネルid(https://www.youtube.com/channel/〇〇の、〇〇の部分の文字列)を入れます。『part』と『order・maxResults』がパラメータです。

part=snippetについて。『part』では、『part=id』とか『part=snippet,id』のような指定ができます。idだと動画idしかでないので、タイトル・id・サムネを取るには『part=snippet』が良いかも。そのほかの『order=date&maxResults=12』は、『日付順で最大12件取る』という意味です。

orderのパラメーターについて

上記のurlでは『order=date(作成日の新しい順)』というパラメータを指定していますが、他にも指定できるパラメータがあることがわかりました。『viewCount / rating』などは、人気指標として使いやすそうです。

  • rating:評価の高い順(評価公開時)
  • relevance:デフォルト・検索クエリの関連性
  • title:タイトルのアルファベット順
  • videoCount:番号順(降順)
  • viewCount:再生回数の多い順

表示例(APIのレスポンス)

上記のurlにアクセスすると、データを取得することができます。ブラウザで見るとこんな感じ。 テキストエディタの折り返しなどで、ちょっとスペースが入ってしまったことがありましたが、エラーになるようなので注意します(スペースも判定される?)。

参考リンク

var_dumpしてみた例(配列キー・構造などを確認)

で、jsonのままでわかる場合もありますけど、一応取得したデータをvar_dumpしてみました。理由は、『キーや構造を確認するため』です。パスがずれたりするとエラーでデータが取れなくなるので、こういう『配列の中にも配列がいっぱい入っている』みたいなときは、確認しておいた方が安全です。

PHP的には、パラメーター指定したurlに対し『file_get_contents』で取得して、『json_decode』で配列にし、var_dumpするという流れになります。

YouTube Data API タイトル・動画id・サムネイル画像取得コード・ポイント・表示例

コードとポイント

構造がちょっとわかんなかったので、itemsの項目をprint_rで出してみました。["items"][0]["snippet"]のように指定することで、『0(配列の最初・ここでは最も最近アップされた動画)』の『スニペット(タイトルやid・サムネなど)』を取ってみました。descriptionなども出ますね。

動画url出したいときは『www.youtube.com/watch?v=』の後ろにidを出すと、urlになります(これをアンカータグ内に出力します)。『[0]["id"]["videoId"]』みたいな入れ子が、少しややこしいかも。サムネのアドレスは、urlの形で入っているようです。

そのほか、『 $ctn=0』がありますが、ループで回すとき1ずつ増やして、apiパラメータで指定した12件を取るみたいに使う予定です。 (apiソートにランダムが無いけど、この変数の数値をランダムに動かしても使えそうです。)

表示例

味けない表示ですが、これらの情報が取れれば、リンクタグにしたりCSSで成形したりして整えればokです。上が『["items"][0]["snippet"]』と指定した部分、下は個別にキー指定して取っています。サムネサイズは『[default][medium][high] 』の三種類ありますね。

あとがき・まとめ

  • YouTube Data API・Search: listリソースでは、複数の動画をリストにして取れる。件数・並び順のパラメーターもあり。
  • 『part=snippet』で、ある程度必要な情報は取れる。
  • 配列が入り組んでいるので、パスだけ間違えないように注意。

まとめるとこんなところでしょうか。必要情報はある程度とれたので、『ループ』『ランダム』などをプログラム側でやってもよさそうです。apiデータも扱えると、サイトとyoutubeの連携もしやすくなるので、ぜひご検討ください。


【カテゴリ】 - PHP・データベースetc
【タグ】 - , ,

  関連記事

【WordPressで覚えよう】PHP「->」(オブジェクト演算子/アロー演算子)・「=>」(ダブルアロー演算子)の違い

今回は、管理人もPHP学習し始めのときは混同していた、PHPの演 ...

【超危険】WordPressデータベースリビジョンお掃除

今回は、WordPressのリビジョンが、データベースに大量にた ...

【PHP】カウントダウン機能に使える?array_reverseで配列要素を逆に,パラメーター挙動&array_flipとの違い

今回は、管理人がYouTubeData APIの、order=d ...

テスト環境(ローカル含む)でPHPサイト開発に使えるツール&xamppでやってみた例(設定や表示ファイルetc)

今回は、管理人がサイトに、ちょっとした機能を実装しようとしていた ...

WordPress一覧表示で、特定のカテゴリ/投稿を表示しないようにするには?→category_not_in・post_not_inで

今回は、WordPressの公式フォーラムを見ていたら、『一覧か ...

WordPress・REST APIのjsonファイルにカスタムフィールドを入れ、タイトル・アイキャッチと共に外部サイトで取得・表示

今回は、管理人がWPで作ったサイトのコンテンツを、別の自社運営サ ...

【WordPress条件分岐】is_singleとis_singularって違うの?→idやスラッグ指定、投稿タイプ指定の面で違いが

今回は、WPの条件分岐などに使うファンクションで、名前が超似てい ...