« I Love Last.FM! | Last.FM Desktop Player»

2005年01月30日

Last.FMで今聞いている曲をBlogに表示

antipopさんが、Last.fm Streaming APIを利用した、WebService::LastfmというPerlモジュールを公開されています。これを使って、Last.FMで再生中の曲を表示する枠を、右メニューに追加してみました。

以下のようなCGIを作って、iframe内で実行します。trackdurationとtrackprogressから、次の曲の開始までの時間(秒)を取得し、リロードまでの時間としてセットしてます。

#!/usr/bin/perl

use strict;
use WebService::LastFM;

print "Content-type: text/html\n\n";

my $lastfm = WebService::LastFM->new(
	username => 'your username',
	password => 'your password',
);
my $stream_info;

eval {
	$stream_info = $lastfm->get_session;
};

die "$@\n" if $@;

my $body = 'No track is playing.';
my $reload = 60 * 10;

my $nowplaying = $lastfm->get_nowplaying;
if ($nowplaying->streaming eq 'true') {
	my $albumcover    = $nowplaying->albumcover_small;
	my $artist        = $nowplaying->artist;
	my $track         = $nowplaying->track;
	my $trackprogress = $nowplaying->trackprogress;
	my $trackduration = $nowplaying->trackduration;
	
	$reload = $trackduration - $trackprogress + 10;

	$body = <<__BODY__;
<div style="font-weight:bold; font-family: Verdana, Arial; padding-bottom:3px;">Now listning to</div>
<img class="albumcover" src="$albumcover" width="50" height="50">
<div class="track">
<span style="font-weight:bold;">$artist</span><br>
$track
</div>
__BODY__
}

print <<__HTML__;
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<META HTTP-EQUIV="refresh" CONTENT="$reload; URL=$::ENV{SCRIPT_NAME}">
<title>Now Playing on Last.FM</title>
<style type="text/css">
<!--
body {
	padding: 0;
	margin: 1px 0 0 0;
	font-size: 11px;
	font-family: Arial, sans-serif;
	background-color: #fff;
	color: #666;
	}
.albumcover {
	margin: 0;
	padding: 0 5px 0 0;
	float: left;
	background-color: #fff;
	}
.track {
	float: left;
	width: 80px;
	background-color: #fff;
	}
-->
</style>
</head>

<body>
$body
</body>
</html>
__HTML__

[ Lastfm ] Posted at 23:51 | permalink | comments (3) | trackback (0)

トラックバック

このエントリーのトラックバックURL:
http://iandeth.dyndns.org/~jimbo/cgi-bin/mt-tb.cgi/8

コメント

はじめまして。こちらの記事を参考にさせてもらっています。
ほかに頼るところが見つからないのでここで質問させていただければと思いまして書き込みます。

上の lastfm.cgi (+ WebService::Lastfm) を使い、うちでも「Last.FMで今聞いている曲をBlogに表示」させました。Last.fm(および Last.fm Streaming API)が調子いいときにはまったく問題なく動作しています(いました)。で、それらが調子わるいときなのですが...

まず、上の lastfm.cgi ではまずデフォルトで「No track is playing.」というメッセージを body に入れておき、streaming の状態が true だったらその情報と入れ替えて出力、という手順を踏んでいると思いますが、(Last.fm Streaming API が止まっている?ときなど)「No track is playing.」を body に入れる前の段階でエラー(?)がおき、何も表示されずに出力されます。これは、その症状になった同時刻にこちらのサイトを訪問してみて、こちらのトップページでも何も表示がされない状態になっていたので「まあ、そういうものか」と思い、よしとしてたものです。

問題は、いま現在の症状なのですが(いま現在、こちらでは www.last.fm、www.audioscrobbler.com ともブラウザで接続しようとしてつながらないのですが)、lastfm.cgi がセッション情報を取りに行ったまま(?)ずーっと稼働してしまうようで、レンタルサーバのほうで「プロセス強制終了処置」を受けてしまいます(その状況が連続して発生してしまいました)。

で、そのような状況のなか、こちらに来てみるとトップページでふつうに「No track.」と出ています。現在そちらでお使いの lastfm.cgi が、この記事に掲載した時点のものからちょっと改良を経ていたりとか、そういうことはありますでしょうか?

いきなりな長文の上、「いや、うちに言われても」というような質問になっているかもしれませんが、何か思いつくアドバイス等あればお願いしたいと思います。失礼しました。

投稿者 SOMA Hitoshi [TypeKey Profile Page] : 2005年03月22日 13:44

SOMA さん、コメントありがとうございます。
自宅からしかソースの確認できないので、お返事ちょっと遅くなります。もしかしたらちょっと変えてたかも・・・です。明日には回答できるかと思います。

投稿者 jimbo : 2005年03月22日 20:28

あ、ありがとうございます。お手数をかけます。

投稿者 SOMA Hitoshi [TypeKey Profile Page] : 2005年03月22日 22:50

コメントしてください




保存しますか?