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

      2021/02/23   2782文字

今回は、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の連携もしやすくなるので、ぜひご検討ください。

WordPressサイト制作&リニューアル・機能開発サービス | アトリエSS


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

  関連記事

WordPress一覧表示で、特定のカテゴリ/投稿を表示しないようにするには?→category_not_in・post_not_inで
【PHP学習】var_dumpで出力するのと、echoで出力するのは、挙動がどのように違うの?
【WordPress】記事文字数のカウント方法(コア機能・プラグイン)チェックと、フロントへの出力について
WordPressユーザーが覚えると便利な条件分岐~投稿記事・固定ページ指定して表示/非表示
【WP記事取得クエリ・プラグイン無し】お知らせなどに使える、ショートコードで特定カテゴリ記事を表示プログラム
【PHP】GD・ImageFilterで、画像の色合いを変えてみる
【WPユーザー名バレ対策】ユーザー名表示からPHP・preg_matchでリダイレクト(wp-json/wp/v2/usersなど)
【WordPressカスタムフィールド検索】meta_queryで、シリアライズ値が入ったフィールドを持つ記事をヒットさせるには?
【別に止めなくてOK】WordPressサイトなどに、アメブロ・fc2など無料ブログの更新情報を表示して連携する方法
【WordPressで覚えよう】PHP「->」(オブジェクト演算子/アロー演算子)・「=>」(ダブルアロー演算子)の違い
【WordPress組み込み関数】is_home()とis_front_page()って同じ?→似てますが、厳密には挙動が異なります
【ユーザーデータ取得】WordPress定義済み関数の『get_userdata()』『wp_get_current_user()』ってどのように違うの?