または、私はプログラマーではなく、私の職業がコンピューターに関連しているわけではないので(または残念ながら)、必要なものの3/4しかありません。 さて、目が痛く、手が痛い。 美しい統計とプロフィールを持ちたいという欲求は、必要なスキルの不足によって圧倒されます:)。
1. Last.fm API
ここでは複雑なことは何もありません。 説明ページで詳細を読むことができますが、要するにこのように機能します。1.1
HTTP / 1.1 GETリクエストをアドレスに送信しますhttp://post.audioscrobbler.com:80/。クエリ文字列は次のようになります。
http://post.audioscrobbler.com/?hs=true&p=1.2.1&c=<client-id>&v=<client-ver>&u=<user>&t=<timestamp>&a= <auth> <pre> <client-id> =クライアントプログラムのID <client-ver> =クライアントプログラムのバージョン <user> =このユーザー名は論理的です <timestamp> = Unix時間 <auth> = md5(md5(パスワード)+タイムスタンプ)に等しい認証トークンUnix時間は、1970年1月1日から経過した秒数に等しくなります。
1.2
全員が送信すると、サーバーから次のような応答が返されます。わかった 17E61E13454CDD8B68E8D7DEEEDF6170 http://post.audioscrobbler.com:80/np_1.2 http://post2.audioscrobbler.com:80/protocol_1.2すべてが順調で、喜び、「サーバーと握手する」ことがわかります。
1.3
サーバーに音楽データを転送するプロセスを開始します(Last.fmのスクロブリングの方言で)最初のリクエストへの応答として受信したアドレスに、POSTリクエストを送信します。これには必ず以下を含める必要があります。
<sessionID> =セッションID、以前に受信した <artist> =お気に入りのVIAの名前 <track> =お気に入りのVIAの曲のタイトル <time> =繰り返しますが、再生開始時のUNIX時間。
これらはすべて必須フィールドです。 好奇心の強い人は完全なリストを読むことができます。 最も興味深いのは、タイムスタンプは何でもよく、「未来の音楽」は普通だということです。
しかし、サードパーティ製のモジュールを使用できなければ、PERL言語はそれほど優れていません。 Net :: LastFM :: Submissionを使用しましたが、他のオプションもあります。
2. CDDB(コンパクトディスクデータベース)
実際、Gracenote(Sony)が所有するCDDBは使用せず、 freedbの無料の類似物を使用します。 Gracenoteのポリシーは、最愛のAOLのポリシーに少し似ています。ある時点で、すべての「ライセンスされていない」アプリケーションを単に禁止したため、CDDB2形式に切り替えました。本質的にCDDBとは何ですか? 1つの島で、このすべてを始めた
しかし、私はHis下PERLのテーマから逸脱しました。 freedbでトラックのリストを取得するには、最も単純なモジュール/スクリプトCDDB_get.pmを使用し、CDをCD-ROMに挿入することを忘れないでください。
3.それはすべて何が起こったのですか?
その結果、起動時にfreedbでディスクを検索し、オプションですべての適切なオプションのリストを表示し、このディスクの曲のリストをLast.fmに送信し、次のディスクを挿入するまで30秒待ってから再度ジョブを実行する簡単なスクリプトがあります。#!/usr/bin/perl -w
use Net::LastFM::Submission;
use CDDB_get qw( get_cddb );
my %config;
#CONFIG_______________________________________________________________________________
$config{CDDB_HOST}="freedb.freedb.org"; # cddb host
$config{CDDB_PORT}=8880; # cddb port
$config{CDDB_MODE}="cddb"; # cddb mode: cddb or http
$config{CD_DEVICE}="/dev/cdrom"; # cd device
$config{input}=0; # 1: ask user if more than one possibility, 0: no user interaction
$lfmuser='user';
$lfmpass='password';
#____________________________________________________________________________________
open (DB,">>musiclist.txt"); #just for stats
my $submit = Net::LastFM::Submission->new(
'user' => $lfmuser,
'password' => $lfmpass)
$submit->handshake;
%cd=get_cddb(\%config);
while ($previd ne $cd{id}){
unless(defined $cd{title}) { die "no cddb entry found"; }
print "artist: $cd{artist}\n","title: $cd{title}\n","year: $cd{year}\n","id: $cd{id}\n";
print DB $cd{artist}," - ",$cd{title}," \[$cd{year}\]\n";
my $n=1;
foreach my $i ( @{$cd{track}} ) {
print "$n: $i\n";
$submit->submit(
'artist' => $cd{artist},
'title' => $i,
'album' =>$cd{title},
'id' =>$n,
'time' => time - (180-($n+5))*60 # 3 hours back
);
$n++;
}
$previd=$cd{id};
print "_" x 20,"\n30 seconds pause for the next CD ...\n";
sleep(30);
%cd=get_cddb(\%config);
}
その結果、3時間の遅延で完成したプロファイルが得られます。
これはすべて素人が書いているので、厳密に判断しないでください。 また、これもスクリプトの実装ではなく、スクリプトのアイデアである可能性が高いと思います。1週間以内に、ユーザーが追加し、曲の実際の長さを刻むコードがコードに追加されると思います。 さらに、「未来の音楽」を避けるために、何時に設定するかを考える必要があります。 理想的なオプションは、オーディオディスクをロードするときにデータベースにIDを書き込み、夜には、たとえば、実際のシーケンスと時間を保持しながらデータベースからすべてのトラックをスクラブし、必要に応じて多くのお気に入りの曲を何度もスクリブルするデーモンです。