WordPressサイト制作とプラグイン&テーマ情報・メンテ/エラー対応から、PHP/CSS/javascript、動画・音・イラスト等制作まで扱うコラム

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

   

こんにちは、管理人@SS_mshpです。

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

*アトリエSS・web制作サービスページに移動します。webリニューアル・ロゴ・記事・wordpress化などでお力添えできます。
『サイトを既にお持ちで、リニューアル』の場合は、¥10万以下でご対応します(全プラン、月額管理費/24回支払い縛りなどの強制無し)


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

  関連記事

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

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

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

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

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

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

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

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

【WordPressカスタムフィールド検索】meta_queryで、シリアライズ値が入ったフィールドを持つ記事をヒットさせるには?

今回は、ちょっと需要があるかもしれない『WordPressカスタ ...

【WordPress組み込み関数】is_home()とis_front_page()って同じ?→似てますが、厳密には挙動が異なります

今回は、WordPressで条件分岐するときによく使われる組み込 ...

【WordPressユーザー名バレ対策】ユーザー名表示からPHP・preg_matchでリダイレクト(wp-json/wp/v2/usersなど)

今回は、WPログインなどにも使われる情報『ユーザー名』が表示され ...