PHPでXMLいろいろ

Youtubeに動画のメタデータをリクエストすると、XMLで返してくるので解析中。
解析は"$data=simplexml_load_file(“http://gdata.youtube.com/feeds/api/videos/”.$videoid);"でXMLを取得&パースして各種要素にアクセス。
で、Youtubeの一部動画は外部プレーヤーで再生できないようになってるから、それの判定プログラムを書いた。


<?xml version='1.0' encoding='UTF-8'?>
<entry xmlns='http://www.w3.org/2005/Atom' xmlns:app='http://purl.org/atom/app#' xmlns:media='http://search.yahoo.com/mrss/' xmlns:gd='http://schemas.google.com/g/2005' xmlns:yt='http://gdata.youtube.com/schemas/2007'>
	<id>http://gdata.youtube.com/feeds/api/videos/GF69Om75cT4</id>
	<published>2008-10-24T16:30:40.000Z</published>
	<updated>2010-04-26T10:40:56.000Z</updated>
	<app:control>
		<yt:state name='restricted' reasonCode='limitedSyndication'>
			Syndication of this video was restricted by its owner.
		</yt:state>
	</app:control>
	<category scheme='http://schemas.google.com/g/2005#kind' term='http://gdata.youtube.com/schemas/2007#video'/>
	<category scheme='http://gdata.youtube.com/schemas/2007/categories.cat' term='Film' label='映画とアニメ'/>

対象の動画のXMLの一部。
でこれが、単純に読み込んだ場合の一部

SimpleXMLElement Object (
	[id] => http://gdata.youtube.com/feeds/api/videos/GF69Om75cT4
	[published] => 2008-10-24T16:30:40.000Z
	[updated] => 2010-04-26T10:40:56.000Z
	[category] => Array (
		[0] => SimpleXMLElement Object (
			[@attributes] => Array (
				[scheme] => http://schemas.google.com/g/2005#kind
				[term] => http://gdata.youtube.com/schemas/2007#video
			)
		)

途中、<app:control>がごっそりなくなってる…
ググってみると、XMLのタグ名に:が付いてるのは名前空間らしく、$app=$data->children(“app”,true);でアクセスするみたい。
ただ、外部プレーヤーで再生出来る動画にこのタグはないから、if(!empty($app))で判定してやる必要がある。
あと、@attributes以下にアクセスするには

$yt=$app->children("yt",true);$yt->state->attributes()->reasonCode=="limitedSyndication"

みたいな感じでattributes関数を挟んでやる必要があるみたい。
面倒くさいなぁ…
追記:XMLの最後に<yt:noembed/>があるのを確認。どっちかっていうと、こいつを認識すればいいのか?

さらに面倒くさいこと。
firefoxはwindows版とUbuntu版で<input type="file">のsizeパラメータ扱いが違うみたい。具体的には、Windows版はエディタと参照ボタンまでで一つとして見てるから、インポートボタンのスペースが無い場合、下にずれ込む。Ubuntu版は別々に見てる、もしくは見方を間違えてるのか、エディタの隣にインポートボタンが食い込む…(スペース自体はあるから下にずれ込まない)

たまには呪文をとなえてみるか:仕事版
を参考に、sizeを計算する関数を書いて大体のところは合うようにした。
なんでこんな仕様してるんだ?
あとついでに、GoogleChromeとOperaをインストールして動作試験してみた。
結果

ブラウザ 結果
firefox3.6.3 input fileのレンダリング以外不具合なし。
Internet Exploere 8 特に問題無し
Google Chrome 4 右ペインがしたにずれる
Opera 10.51 プレイリスト出力時に、拡張子がXMLにされる。
シャッフル中、項目が移動してるのが見える&遅い。(いちいち表示してるせい?)

こんな感じになった。とりあえず、基本機能には問題無し。SafariとかSleipnirとかはエンジン被ってるし、たぶん大丈夫だろう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です