2005年11月19日改訂
Now Playingのエントリーにて紹介した、Audioscrobbler(現Last.fm)のフィードを表示する方法ですが、今回は、「NuSOAPを使ってAudioscrobbler(現Last.fm)のフィードでAmazonWebSearch」というなんとも長ったるいタイトル(正式)の作業を行ってみました。
で、サンプルはこのblogのsideに表示中です。
要点1.AudioscrobblerのフィードをAmazonで検索し、リターンがあれば結果を表示。
要点2.画像が有れば画像も表示。
要点3.リターンが無い場合は、Audioscrobblerへのリンクを出力。
更新 2005年11月17日
Last.fmのRSSがURL変更となりました。
変更前:http://ws.audioscrobbler.com/rdf/history/username
変更後:http://ws.audioscrobbler.com/1.0/user/username/recenttracks.rss
更新 2005年11月19日
Last.fmのRSS出力に際し、XMLの名前空間が変更となっておりましたので、それに併せて変更致しました。
更新 2006年02月03日
パラメータ設定をとりまとめ、わかりやすくし、ソースの整理を致しました。
まずは「NuSOAP」ですが、「生」NuSOAPを使用した場合、見事に検索結果が文字化けします。
そこでNuSOAP Revision 1.59をベースに日本語を利用できるようにいしなおさんが修正された、nusoap.phpをお借りします。
ダウンロードするファイルは、「phpgoogle.zip」です。この中の「nusoap.php」をありがたく使用させていただきます。
いしなお! – PHP NuSOAPでGoogle Web API (13:50)
次に、以下のソースを各自個人のアソシエイトID等の変更を行ったうえで、nusoap.phpと同じディレクトリに適当なファイル名でアップします。
“<$MTBlogURL$>images/”ディレクトリに、“noimg.gif”というイメージを用意してください。(好みの画像で結構です)
そしてインクルード。以上で終了。
※ソースの最初にCSSが埋め込んであります。適宜変更してください。
※このスクリプトによる、如何なる損害も、一切補償致しません。自己責任で設置してください。
※このスクリプトは、コメントあるいはトラックバックウェアとします。ご使用の際には必ずコメントあるいはトラックバックをお願いします。
※このスクリプトの改変は自由ですが、このままの形での再配布は禁止とします。改変の際は是非お知らせください。
<style type=”text/css”>
table.audioaws {border-collapse: separate;}
td.audioawsimg {background: #ffffff;}
td.audioawstxt {background: #f0f8ff;font-family:”ヒラギノ角ゴ Pro W3″ ,”Osaka” ,”MS P ゴシック” ,verdana ,arial ,sans-serif;}
</style>
<table class=”audioaws”>
<?php
// バージョン0.5.5
// 2006.02.03 パラメータ設定をとりまとめ と ソースの整理
//
// Diary::Weblog
// http://jun.daa.jp/
// NuSOAPとAudioscrobblerでAWS(略)
// http://jun.daa.jp/archives/20050904142833.php
// 各パラメータを設定します 変更はここから
// —————————–
// “Last.fm Username”
//
$LastfmUser = “junichi_y”;
// Amazonへリクエスト用 sortに利用可能なパラメータ
// Featured Items +psrank
// Bestselling +salesrank
// Artist Name +artistrank
// Original Release Date +orig-rel-date
// Alphabetical +titlerank
//
// “パラメータ”
//
$sort = “+psrank”;
// “あなたのアソシエイトID”
//
$tag = “diaryweblog-22″;
// “あなたのデベロッパートークン”
//
$devtag = “D2RI43QR9UUHXB”;
// —————————–
// 設定はここまで 以下は変更しない
// Last.fmのfeed取得設定
define(‘AUDIOSCROBBLER_RDF’
, ‘http://ws.audioscrobbler.com/1.0/user/’ . $LastfmUser . ‘/recenttracks.rss’);
// Last.fm feedをオープン
if (!($fp = fopen(AUDIOSCROBBLER_RDF, “r”))) { die(“could not open Audioscrobbler feed”); }
while ($data = fread($fp, 4096)) { $rdf_content .= $data; }
fclose($fp);
// Begin parsing through
preg_match_all(“‘<title>(.*?)</title>’si”, $rdf_content, $songs); $songs = $songs[1];
preg_match_all(“‘<link>(.*?)</link>’si”, $rdf_content, $links); $links = $links[1];
// Soapを読み込み
include(“nusoap.php”);
// 10曲分の処理開始
for ($i = 1; $i < count($songs); $i++) {
list($artist, $title) = explode(‘ – ‘, $songs[$i]);
$keyword = htmlspecialchars($keyword);
$soapclient = new soapclient(“http://soap.amazon.com/schemas3/AmazonWebServices.wsdl”, true);
$proxy = $soapclient->getProxy();
$space = ” “;
$keyword = $artist . $space .$title;
// Amazonへリクエストのパラメータを用意
$params = array(
‘keyword’ => $keyword,
‘page’ => $page,
‘mode’ => ‘music-jp’,
‘tag’ => $tag,
‘type’ => ‘lite’,
‘sort’ => $sort,
‘devtag’ => $devtag,
‘locale’ => ‘jp’
);
//リクエスト
$result = $proxy->KeywordSearchRequest($params);
if(!$result['faultstring']){
//$itemにtype’lite’で定義されている出力データを格納(10曲分)
$items = $result['Details'][0];
echo “<tr><td class=\”audioawsimg\”><a xhref=\”" . $items['Url'] . “\” target=\”_blank\”><img align=\”right\” border=\”0\” xsrc=\”" . $items['ImageUrlSmall'] . “\” alt=\”" . $items['ProductName'] . “\” /></a></td><td class=\”audioawstxt\”><a xhref=\”" . $items['Url'] . “\” target=\”_blank\”><b>” . $artist . “</b><br />” . $title . “</a></td></tr>\n”;
} else {
echo “<tr><td class=\”audioawsimg\”><img align=\”right\”
xsrc=\”<$MTBlogURL$>images/noimg.gif\” alt=\”No Image.\” /></td>
<td class=\”audioawstxt\”><a alt=\”$links[$i]\” xhref=\”$links[$i]\” target=\”_blank\”>
<b>$artist</b><br />$title</a></td></tr>\n”;
}
}
?>
</table>
タグ:
Audioscrobbler,
Last.fm,
php