Youtube動画のメタ情報をoEmbedで取得【PHP・JavaScript】

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動画のメタ情報取得でした。ではまた