PHPに惚れました

今でも多分惚れてます。

nicoAPI群解説(nicoAPI編その2)

お待たせしました。 出かける事が多く更新遅くなりまして。

文字コードの件はよろしいですか?
XML形式文書はUTF-8で書かれてるので変換の際はeucJP-winSJIS-winにしましょうという話でした。

今回は実際にXMLから取得してみようという話です。

取得先URL→http://www.nicovideo.jp/api/getthumbinfo/動画ID (sm9,sm500873など)

f:id:Xephy:20081212205222p:image
こんなXML文書が見れましたか?

コイツをPHPで取得して各要素を取り出します。

まずは各要素の概要を。パッと見で分かりそうな物は省きます。

  • nicovideo_thumb_response
    • 動画のステータス
  • description
    • 動画説明文
  • thumbnail_url
    • サムネイル画像のURL
  • first_retrieve
  • view_counter
    • 再生数
  • comment_num
    • コメント数
  • mylist_counter
    • マイリスト数
  • last_res_body
    • 最新コメント5つ
  • embeddable
    • 外部再生の可否?
  • tags domain
    • タグの国識別

XMLはsimplexml_load_file()関数で扱います。

XMLオブジェクトを変数$xmlに格納

<?php
$req = "http://www.nicovideo.jp/api/getthumbinfo/sm9";
$xml = simplexml_load_file($req);

//続く
?>

各要素へのアクセスは「->」で1階層下の要素に潜れます。そして取り出し。

XMLオブジェクトの各要素の取り出し。

<?php
//続き

print $xml->thumb->title;//タイトル
print $xml->thumb->description;//投稿者コメント
print $xml->thumb->thumbnail_url;//サムネURL

//続く
?>

タグ取り出しの場合。
同じ階層に同じ要素名でいくつか並んでますよね?
配列を扱うような感じで取り出せます。

XMLオブジェクトの各要素の取り出し。

<?php
//続き

print $xml->thumb->tags->tag[0];
print $xml->thumb->tags->tag[1];
print $xml->thumb->tags->tag[2];

//foreachで取り出す場合

foreach($xml->thumb->tags as $tag){
 print $tag;
}

//こっちの方が簡単ですね。

//<tags domain="jp">の「jp」を取り出す場合。
//やり方は連想配列のキーを取り出す時と同じです。

print $xml->thumb->tags[domain];

?>

他サービスと組み合わせたり、スタイルなど色々指定して表示するとこんな感じです。
f:id:Xephy:20081212205221p:image