2006年11月15日

YouTube APIの最も簡単な説明書(日本語版) このエントリーをはてなブックマークに追加

こんにちは、神山繁です(嘘です)。

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 InterfaceXML-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


posted by りょーち | Comment(21) | TrackBack(3) | Web周辺技術
この記事へのコメント
ありがとうございます!!!!m(__)m
あまりにも丁寧な解説とソースに感動しています!!
ありがとうございました!

また後ほど顔を出します!
Posted by ゆうすけ at 2006年11月15日 19:54
こんにちは。りょーちと申します。
りょーちもあまりよくわかっていないのですが、わかる範囲で掲載してみました。(あまり参考にならないかもしれませんが・・・)

phpの場合、基本的にはこの例で殆ど全て解決できると思います(^^;
あとはAPIで取得できる情報を「どう見せるか」の部分にオリジナリティが加われば面白いプログラムが書けるのではないかと思います。

REST APIなので、別にphpにこだわらなくてもperlでも何でも大丈夫なので、得意なプログラミング言語でチャレンジしてみてください。

カッチョイイのができたら、是非教えてくださいね(^^;

ではでは。
Posted by りょーち at 2006年11月15日 20:17
どうもです。今、色々といじってます!すごく助かりました!見せ方については、ゆっくり煮詰めていきます。別のサイトでまとめようと思ってるので、形になったらすぐに報告に来ます!これからもよろしくお願いします。
Posted by ゆうすけ at 2006年11月15日 22:56
ゆうすけさん、こんにちは。りょーち@管理人です。
少しは参考になりましたでしょうか?
javascriptのXMLHttpRequestなどを利用してみせることもできそーですね'^^;

ではでは。
Posted by りょーち at 2006年11月16日 09:44
はじめまして。
すごく参考になるページありがとうございます。

ご質問なのですが現在利用しているサーバーがPHP4なのですが4だとsimplexml_load_fileが使えないので
なにかいい方法はないでしょうか?
Posted by たかし at 2007年03月08日 20:17
たかしさんこんにちは。りょーち@管理人です。
コメントいただきましてありがとうございます。
検索してみると、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);
とかやればよさそうですね。

取り急ぎご参考まで。
ではでは。
Posted by りょーち at 2007年03月09日 08:53
ありがとうございます。
早速ためしてみたのですが
debugprintでの中身の表示はされるのですが
foreach文のところがうまく動いてくれません。

りょーちさんのプログラムをそのまま利用させていただいたのですが、教えていただいたライブラリの利用をすると使えなくなってしまうんでしょうか。。。

なんども質問してしまい申し訳ないです。
Posted by たかし at 2007年03月09日 15:48
こんにちは。りょーち@管理人です。

うーむ。そうなるとちょっと私にはわからないですね。
私もあまりプログラムを分かっているわけではないので、ちょっとこれ以上は私の方で調べても分からないと思います・・・orz

お力になれず申し訳ありません。
Posted by りょーち at 2007年03月09日 16:53
すみません。ありがとうございます。
もう少しがんばってみます。
Posted by たかし at 2007年03月09日 17:37
ありがとう!めっちゃ役に立ちました。たかしさんと同じところで引っかかっていたのですが、僕の場合はYouTubeのDeveloper IDが取得できていませんでした。(アカウントと同じものだと勘違いしていました)上にも書いていただいてる通りhttp://www.youtube.com/my_profile_devにアクセスしてDeveloper IDを取得したら一発で解決しました。たかしさんもDeveloper IDをもう一度確認してみて下さい。
りょーちさんホントにいいサイトを作ってくれてありがとう!PHPはじめたばっかりなのでこれから頑張ります(^^)
Posted by greenman at 2007年03月30日 17:05
greenman さん、こんにちは。りょーち@管理人です。
コメントいただきましてありがとうございます。

なんだかお役にたてたみたいでよかったです(^^;
是非是非かっこいいサイトを作ってください。
ではでは。
Posted by りょーち at 2007年03月30日 17:16
りょーちさま
レスポンス早いですね(ё_ё)
またいろいろ参考にさせていただきたいと思います。
これからもいいサイトを作り続けてください。
僕もいつか人の役に立てるようなサイトを造りたいと思います(^^)
ありがとうございました。
Posted by greenman at 2007年03月30日 17:27
りょーちさま
教えてください
リンクが ttp://www.youtube.com/?v=・・・
となっていますが
何故「watch?v=」じゃないんですか?
また、wwwをjpにできないでしょうか?
Posted by ぴあ at 2007年12月22日 19:48
ぴあさん、こんにちは。りょーち@管理人です。
質問の意味が良く分かりません。
「リンクが・・・」の部分はどこのことですか?
基本的にここで説明していることは
「APIにパラメータを投げると、何か結果が戻ってくるので、それを加工して表示しましょう。」
ということだけです。

>何故「watch?v=」じゃないんですか?
>また、wwwをjpにできないでしょうか?
というのはよくわかりませんが、結果取得後、自分でstr_replaceを使って変更すればよいのではないでしょうか?
(そうすることに何の意味があるのか良く分かりませんが・・・)
Posted by りょーち at 2007年12月23日 11:12
ヘンな質問してすみません
ただ正式なURLで日本語版に飛ぶようにしたかっただけです。
私には意味がある事なので・・
失礼しました。
Posted by ぴあ at 2007年12月28日 21:50
去年の3月のコメントでphp4+xmlのことを書いてあったと思うのですが、調べてもよくわからなかったです。

これは$data = XML_unserialize($xml); と $xmldata = simplexml_load_file($url); を入れ替えて1行下のxmldataをdataに変換すれば済む話なのでしょうか?

初歩的な質問かもしれませんが、このスクリプトが面白かったので参考にさせてもらおうと思ってます。
よろしくお願いします。
Posted by うにうに at 2008年06月10日 05:36
うにうにさん、こんにちは。りょーち@管理人です。
すみません。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
Posted by りょーち at 2008年06月10日 10:01
ありがとうございます。
早速試してみたいと思います。
Posted by うにうに at 2008年06月11日 23:42
はじめまして、こんにちは
自分用にYouTube TAG Searchを使わせていただいていたのですが、先日からYouTubeの仕様が変わったためか、simplexml_load_file()関数のエラー(?)で読み込みがされなくなっているようです。

アドレスも
http://gdata.youtube.com/feeds/api/videos?q=%E7%8C%AB&page=1&per_page=50
のような感じに変更される事までは分かったのですが、今の所行き詰まっています。

また宜しければ新しい仕様に対応する方法をお教えいただけたらと思います。
宜しくお願いします。
Posted by Tomo at 2009年11月15日 11:10
Tomoさんこんにちは。りょーち@管理人です。
古いAPIの形式がついにつかえなくなったってことなんですね。
gdata形式に移行しようとは思っていたのですが時間がないのでちょっと今は対応は難しそうです。
http://gdata.youtube.com/feeds/api/videos?q=%E7%8C%AB&page=1&per_page=50
の内容を取得後XMLとしてsimplexmlによませればよさそうなのですがちょっとそこまで追う時間がありません。
お知らせいただきましてありがとうございます。
サービス停止の方向かもしれません・・・・
ではでは。
Posted by りょーち at 2009年11月15日 16:57
YouTube APIを使って、こんなサービスを作ってみました。
http://www.miruze.jp/
特定のキワードや、Uploaderを登録しておくと最新の、動画だけ定期的に送ってくれるというものです。

本当にYouTube APIって面白いです。

もし良かったら、ご利用ください。
Posted by だいごろう at 2010年03月15日 10:27
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


Youtube APIを使ってみたい
Excerpt: Youtube APIのlist_by_tagを使ってみよう! と思い挑戦してみ...
Weblog: kattsuk2 BLOG
Tracked: 2007-03-21 23:26

YouTubeAPIを使ってみる
Excerpt: YouTubeAPIを使うことになったので 調べがてらメモ まずはGoogle...
Weblog: i yahoo i.com:blog
Tracked: 2008-02-26 22:03

「はてなクラウドソーシング」のYouTube APIの質問に回答
Excerpt: スパイスラボ神部です。 今日ブラっと「はてなクラウドソーシング 」を見ていたら面白そうな質問があったので思わず回答。 質問 質問を要約すると: ・Youtube...
Weblog: ラボブログ
Tracked: 2009-11-13 18:02

×

この広告は180日以上新しい記事の投稿がないブログに表示されております。