Last.fmのXMLを加工する

PHP5からSimpleXML関数というのが追加されておりまして、簡単にXMLデータを扱うことができるようになりました(今日知ったのだがwwwww)。

Clearは前からLast.fmのはき出すデータを加工して右側のメニューに表示させていたわけですが、最近これが動かなくなったので改めて作り直しました。

手順を指導してくれた社長に感謝!

追記に奮闘記。

まず、そのXMLですが、以下のところで取得できます。

http://ws.audioscrobbler.com/1.0/user/ユーザー名/recenttracks.xml

これは最近再生した曲のXMLです。
いろいろあるんですが、あとは探してくださいw

Clearの場合は、

となります。

以下DLタグを用いた定義リストで最近聴いた曲をはき出すためのPHPです。
適当なところでインクルードしてください。
アーティスト名でAmazonにリンクします。
アフィリエイトのIDを変えてください。(変えなくてもいいけどwwwww)


<dl id="recenttracks">
<dt>最近聴いた曲</dt>
<?
ini_set('mbstring.http_output' , "UTF-8");
ini_set('mbstring.internal_encoding' , "UTF-8");
//表示させる項目数
$lows = 5;
$i = 0;
//XMLの呼び出し先(自分のユーザー名に置き換える)
$xml = simplexml_load_file("http://ws.audioscrobbler.com/1.0/user/justsize/recenttracks.xml");
//amazonへのリンク設定(cleartalksone-22を自分のIDに)
$amlink = "http://www.amazon.co.jp/exec/obidos/external-search?tag=cleartalksone-22&amp;mode=music-jp&amp;keyword=";
foreach ($xml->track as $item)
{
$artist = $item->artist;
$songname = $item->name;
$amlink2 = $amlink.$artist;
$rss_title = "$artist". "&nbsp;-&nbsp;" . "$songname";
echo "<dd><a href=\"". $amlink2 ."\">". $rss_title."</a></dd>\n";
$i++;
if($i == $lows){break;}
}
?>
</dl>

セキュリティーとか全く考慮してな(ry

※余談

こっちでもXML取得できるんですよ。

Clearはずっとこっちだと思ってたので、こっちのXMLを加工しようと奮闘してすごいがんばってたんですが、上のXMLが一番シンプルでした。
こんな感じに奮闘した。


foreach ($xml->channel->item as $item)
{
$convmap = array(0x0080, 0xffff, 0, 0xffff);
$spl=mb_decode_numericentity ( "&#8211;", $convmap);
$rss_title = $item->title;
$moji = mb_strpos("$rss_title","$spl");
$alink = mb_substr($rss_title,0,$moji);
$amlink2 = $amlink.$alink;
echo "<dd><a href=\"". $amlink2 ."\">". $rss_title."</a></dd>\n";
}

何がめんどくさいって、まず、アーティストと曲名を区切る文字が特殊だってことです。

特に重要なのはここ。


$convmap = array(0x0080, 0xffff, 0, 0xffff);
$spl=mb_decode_numericentity ( "&#8211;", $convmap);
$rss_title = $item->title;
$moji = mb_strpos("$rss_title","$spl");
$alink = mb_substr($rss_title,0,$moji);

アーティスト名と曲名の区切り文字がなんと” – “じゃなくって、” – “なんですよ。違いに気づきます?
そんなわけで、コレを表現するため&#8211である&#8211から&#8211を文字列として取り出してます(文字列をコピペしてもダメだったんだよ。だからわざわざこんなメンドイ方法をとってますorz)。んで、それが出現する文字数を出してからその文字数で区切ってアーティスト名を取り出したという自分で言っても意味不明なやり方です。
知らなくていいですw無駄な努力ですw

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク