YouTube TAGというブログパーツをつくってみた のコメント欄に ゆうすけさん から、
YouTube TAG Search のスクリプトの配布をして欲しい
という依頼があった。
っと、YouTube APIを利用してみたい人は、他にもいるかも(いない?)と思い、僭越ながらりょーちのしょぼいscriptを公開してみることにしてみた。
で、単にscriptを公開してもなんだかよくわからないと思い、実行例とそのソースにコメントを入れてみた。
基本的には、YouTube APIは YouTube Developer APIs で公開されている下記の7つの関数を利用することになる。
・youtube.users.get_profile
・youtube.users.list_favorite_videos
・youtube.users.list_friends
・youtube.videos.get_details
・youtube.videos.list_by_tag
・youtube.videos.list_by_user
・youtube.videos.list_featured
で、この中の youtube.videos.list_by_tag を利用するものを解説してみた。
youtube.videos.list_by_tag では、YouTube内でユーザが付けたタグを検索キーとして検索し、検索結果をXMLファイルで返してくれるっぽい。
REST Interface と XML-RPC Interface の2種類を利用できるが、今回はREST Interfaceを利用している。
以下、利用にあたっての注意事項っす。
YouTube のサイトの アカウントを持っている場合、http://www.youtube.com/my_profile_devにアクセスすると Developer ID が表示されていると思います。
APIの利用にはこの Developer ID が必要です。
ソースの一番初めの方で
define("DEVID","xxxxxxxxx");
などとしておくのがよいでしょう。
youtube.videos.list_by_tag のパラメータを見てみると、GETメソッドで渡すパラメータは
・method
・dev_id
・tag
・(page)
・(per_page)
の5つになっています。
method : youtube.videos.list_by_tag
dev_id : 上の行のdefineで定義したDEVID になります。
tag : 探したいタグ(UTF-8でURLエンコードされたもの)
page : 受け取ったデータの件数が数ページになる場合、その何ページ目を表示するか
per_page : ページングを何ページ毎で区切るか(デフォルトは20で最大100)
で、これらを念頭に入れ、REST APIの呼び出し用のURLを作ります。
$tagは探したいタグ(UTF-8でURLエンコードされたもの)が入ります。
なので、これらをGETメソッドで
http://www.youtube.com/api2_rest
にわたしてあげればよいでしょう。
$urlというURLを格納する変数にこんな感じに入力してみます。
$url = "http://www.youtube.com/api2_rest?
method=youtube.videos.list_by_tag&dev_id=".DEVID.
"&tag=".$tag."&page=1&per_page=5";
※改行してますが実際は1行です。
$tagはUTF-8でURLエンコードされた値が入ります。
で、あとはこれを SimpleXML関数 で処理すればよいっす。
$data = simplexml_load_file($url);
で、$dataには連想配列としてXMLファイルの全てのデータが入りますので、あとは簡単。
foreach($data->video_list->video as $item){
}
って感じで$itemの中身を好きに取り出してみればよいっす。
こんなのでわかります?
YouTube APIの最も簡単な説明 にはもうちょい詳しく書いてあるのでそちらを参考にしてもらえればよいかと思われます。
#って、現在YouTubeメンテナンスで落ちてるじゃん・・・orz








あまりにも丁寧な解説とソースに感動しています!!
ありがとうございました!
また後ほど顔を出します!
りょーちもあまりよくわかっていないのですが、わかる範囲で掲載してみました。(あまり参考にならないかもしれませんが・・・)
phpの場合、基本的にはこの例で殆ど全て解決できると思います(^^;
あとはAPIで取得できる情報を「どう見せるか」の部分にオリジナリティが加われば面白いプログラムが書けるのではないかと思います。
REST APIなので、別にphpにこだわらなくてもperlでも何でも大丈夫なので、得意なプログラミング言語でチャレンジしてみてください。
カッチョイイのができたら、是非教えてくださいね(^^;
ではでは。
少しは参考になりましたでしょうか?
javascriptのXMLHttpRequestなどを利用してみせることもできそーですね'^^;
ではでは。
すごく参考になるページありがとうございます。
ご質問なのですが現在利用しているサーバーがPHP4なのですが4だとsimplexml_load_fileが使えないので
なにかいい方法はないでしょうか?
コメントいただきましてありがとうございます。
検索してみると、php4 + XMLでの実行環境としてこんなライブラリがあるようです。
Keith Devens .com (PHP XML Library)
http://keithdevens.com/software/phpxml
ネタ元は下記ページ
http://plaza.rakuten.co.jp/templatemaster/diary/200511270000/
$data = XML_unserialize($xml);
とかやればよさそうですね。
取り急ぎご参考まで。
ではでは。
早速ためしてみたのですが
debugprintでの中身の表示はされるのですが
foreach文のところがうまく動いてくれません。
りょーちさんのプログラムをそのまま利用させていただいたのですが、教えていただいたライブラリの利用をすると使えなくなってしまうんでしょうか。。。
なんども質問してしまい申し訳ないです。
うーむ。そうなるとちょっと私にはわからないですね。
私もあまりプログラムを分かっているわけではないので、ちょっとこれ以上は私の方で調べても分からないと思います・・・orz
お力になれず申し訳ありません。
もう少しがんばってみます。
りょーちさんホントにいいサイトを作ってくれてありがとう!PHPはじめたばっかりなのでこれから頑張ります(^^)
コメントいただきましてありがとうございます。
なんだかお役にたてたみたいでよかったです(^^;
是非是非かっこいいサイトを作ってください。
ではでは。
レスポンス早いですね(ё_ё)
またいろいろ参考にさせていただきたいと思います。
これからもいいサイトを作り続けてください。
僕もいつか人の役に立てるようなサイトを造りたいと思います(^^)
ありがとうございました。
教えてください
リンクが ttp://www.youtube.com/?v=・・・
となっていますが
何故「watch?v=」じゃないんですか?
また、wwwをjpにできないでしょうか?
質問の意味が良く分かりません。
「リンクが・・・」の部分はどこのことですか?
基本的にここで説明していることは
「APIにパラメータを投げると、何か結果が戻ってくるので、それを加工して表示しましょう。」
ということだけです。
>何故「watch?v=」じゃないんですか?
>また、wwwをjpにできないでしょうか?
というのはよくわかりませんが、結果取得後、自分でstr_replaceを使って変更すればよいのではないでしょうか?
(そうすることに何の意味があるのか良く分かりませんが・・・)
ただ正式なURLで日本語版に飛ぶようにしたかっただけです。
私には意味がある事なので・・
失礼しました。
これは$data = XML_unserialize($xml); と $xmldata = simplexml_load_file($url); を入れ替えて1行下のxmldataをdataに変換すれば済む話なのでしょうか?
初歩的な質問かもしれませんが、このスクリプトが面白かったので参考にさせてもらおうと思ってます。
よろしくお願いします。
すみません。php4については実行環境がないためよくわかりませんが、php5環境でSimpleXMLを利用せずに上記のxml.phpを利用する方法で問題なくできましたよ。
include('proxy.php');
include('xml.php');
$url = "http://www.youtube.com/api2_rest?method=youtube.videos.list_by_tag&dev_id=".DEVID."&tag=".$tag."&page=1&per_page=5";
$xml = getHTML($url);
$data = XML_unserialize($xml);
print_r($data);
って感じっすね。
Keith Devens .com (PHP XML Library)
http://keithdevens.com/software/phpxml
早速試してみたいと思います。