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

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

posted @ January 30, 2005 11:51 PM

category: Lastfm

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

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

[追記 2005/03/23] ソースが古かったので更新しました。(赤字の部分)

#!/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 * 60;

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;
	$reload = 10 if ($reload < 0);

	$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__

 

Trackbacks

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

Comments

1 | SOMA Hitoshi [TypeKey Profile Page] - March 22, 2005 01:44 PM

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

上の 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 が、この記事に掲載した時点のものからちょっと改良を経ていたりとか、そういうことはありますでしょうか?

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

2 | jimbo - March 23, 2005 01:19 AM

To:SOMAさん

lastfm.cgi ですが、一部改良していました。エントリ本文の赤字の部分が修正および追加した部分です。

Last.fm から trackprogress と trackduration がうまく取得できなかった場合に、リロードまでの時間が 0 未満になってしまうことがあります。そうなると、即リロードを延々と繰り返し、サーバに負荷をかけることになります。(DoS 攻撃しているのと同じです。)

これを回避するために、0 未満だったら 10 にする、という処理を追加しました。

そちらで起こった問題も恐らくこれが原因かと思います。一度試してみてください。

中途半端な情報を公開してしまったばかりに、ご迷惑をおかけしてしまったようで、ゴメンなさい。m(_ _)m

3 | SOMA Hitoshi [TypeKey Profile Page] - March 23, 2005 01:59 AM

追記された内容をこちらの lastfm.cgi にも反映させました。ひとまず様子を見ないことには何とも言えませんが、ともかくご対応いただきありがとうございました。

この lastfm.cgi の記事がここを知ったきっかけですが、「jmblog」のサイト自体も最近はちょくちょくチェックさせてもらっています。今後もよろしくお願いします。

コメントしてください




保存しますか?