Youtube動画のメタ情報とはこういうもの
- タイトル・説明だったり、
- サムネイル画像だったり、
- 作成者名だったり、
これはスクレイピングでも取得できます。
でも法的な問題もあるし、もっと便利な方法がありました。
それは oEmbed API から取得すること
oEmbed でのYouTube動画メタ情報の取得を、
PHP・JavaScriptでのコード例と一緒にまとめました。
このページの目次 [隠す]
oEmbed とは?埋め込みによく使われるアレ
oEmbedは Twitter とか YouTube とか、
そういうコンテンツサービスで良く見かけます。
ちなみに英Wikipediaだとこんな説明がされてました。
▼ oEmbedについてのWiki引用
oEmbed is an open format designed to allow embedding content from a website into another page. The specification was created by Cal Henderson, Leah Culver, Mike Malone, and Richard Crowley in 2008.[1] It has become an industry standard for embedding content, used by companies like Twitter to make tweets embeddable in blog posts[2] and by blogging platforms like Medium to allow content authors to include those snippets.[3]
引用元 : https://en.wikipedia.org/wiki/OEmbed
▼ このWiki説明の超意訳
pEmbedはウェブサイト上のコンテンツを別ページに埋め込むための標準フォーマット。その仕様は2008年に作られた模様。今では埋め込みコンテンツの標準になってて、Twitterとかに企業にツイート埋め込みするのに利用されてたり、Medim(?)みたいなブログサービスとかで記事引用するのとかに使われてる。
縁の下の力持ちみたいな存在
身近に目にするのだと Twitter のタイムライン埋め込みとか、FaceBookの埋め込みとか、インスタグラム埋め込みかもしれません。
oEmbed からコードなしで動画メタ情報を取得
それでこの oEmebed 、実は Youtube にも対応してます。
利用すると動画についての色々な情報が取得できるんです。
- 動画タイトル
- 作者名
- チャンネルURL
- 動画のサムネURL
- 動画の幅と高さ
- その他いろいろ...
そこでまず、一切コードなしで oEmbed を使ってみます。
例えば、次のYouTube動画のメタ情報が知りたいとしましょう。
その場合は次のURLにアクセス
やり方としては url パラメーターに【動画URL】、
その次の format パラメーターに json とかの【データ形式】を渡すだけ。
ちなみに【データ形式】には xml または json のどちらかが指定可能
実際にはこういう感じでデータが返ってきます。
いわゆる REST API です。
今回はこの oEmbed をPHP・JavaScriptからコード的に呼出し、Youtube動画のメタ情報を取得してみることにしました。
PHP からYoutube動画のメタ情報を取得
まずは oEmbed をPHPから呼び出す方法。
これには curl を使うのが手っ取り早いですね。
具体的なコード例を出すなら、次の通り
▼ 動画ID ishrrz5VjHc のメタ情報取得&表示
動画IDを置き換えれば、いくらでも好きな動画のメタ情報を調べ放題
しかも Youtube Data API と違って変な制限(クォータとかいう謎概念)もない。なので、気軽に使うことができて便利です。PHPに限らずどの言語でも使えます。
JavaScript + Ajaxから動画のメタ情報を取得
次は Ajax から oEmbed を呼び出し。
というか JavaScript (jQuery)を使ったやり方ですね。
これも問題なく呼び出せるかと思いきや・・・
※ あとから分かったけど、普通の方法では無理
まず初めに、こんなコードを書いてみました。(失敗)
▼ 実際に書いてみたコード例
これでできるはず・・・と思いきや、なぜかできなかったです。
クロスドメイン対策で dataType: 'jsonp' も指定したのに (-_-)
この原因については良く分かりません。
もし詳しい人がいれば、コメント欄とかでやり方教えてください。
Ajax からなら noembed.com でメタ情報が取得できた
というかそもそも、 jsonpCallback が指定できないようです。
▼ jsonpとjsonpCallbackについて
上記事みたいな指定、そもそもできないんですよね。
あとYoutube Oembed のマニュアルとかもない模様
でも noembed.com というサービスで代替できるみたいです。
たとえばコード例を示すと、こんなコード
▼ ビデオID ishrrz5VjHc のメタ情報取得
▼ このコードの出力結果(一部)
今度はCORSエラーも出ませんでした。
あと jsonp とかも指定不要なので便利かもです。
ここまでの oEmbed の使い方まとめ
ということで、YouTubeメタ情報の取得方法のまとめ
- コードなしで oEmbed 呼び出し
公式の https://www.youtube.com/oembed? に必要なパラメーターを渡せば、JSONまたはXML形式でメタ情報が返ってくる。
- PHPを使って oEmbed 呼び出し
おなじみの curl を使うのが手っ取り早い。ただし返ってくるのは文字列なので json_decode( $resp, true ) のようにデコードする必要あり。
- JavaScript + Ajax から oEmebed 呼び出し
これは普通に Ajax を使ってもエラーが出てしまって取得できない。代わりに noembed.com というサービスを使うと取得できた。
以上、oEmebed によるYouTube動画のメタ情報取得でした。ではまた