iTunesでの再生リストをhtmlに出力するスクリプト

バックアップをかねて掲載。かなり無駄が多いコード。

use strict;
use Win32::OLE;
use Date::Format;

#amazonへのリンクを設定する場合は、コメントにASINを入れておく必要がある。

my $yyyymmdd = time2str('%Y%m%d', time);
my $output_file = "C:/Data/iTunes-RecentlyPlayed$yyyymmdd.html";
my $link_to_amazon = 1;
my $amazon_id = "/*******-22";   #idの前にスラッシュが必要。

my $itunes = Win32::OLE->new("iTunes.Application") or die "bye\n";
my $library = $itunes->LibraryPlaylist;
my $tracks = $library->Tracks;

my @top_list = ();
my $playlist = $itunes->Sources->Item(1)->PlayLists->ItemByName('1日以内に再生した曲');
my $c = $playlist->Tracks->Count;

#コレクションはひとつのスカラー変数であり、配列ではないみたいだ。
for(my $n = 1; $n <= $c; $n++){
	my $t = $playlist->Tracks->Item($n);
	push(@top_list, {PlayedCount => $t->PlayedCount, 
			Name => $t->Name, 
			Album => $t->Album, 
			Artist => $t->Artist, 
			PlayedDate => $t->PlayedDate->Date("yyyyMMdd") . ' ' .$t->PlayedDate->Time("HH:mm:ss") , 
			Comment => $t->Comment});
}

@top_list = sort{$b->{PlayedDate} cmp $a->{PlayedDate}} @top_list;

die if scalar(@top_list) == 0;

open(OUT, ">$output_file");

$yyyymmdd = time2str('%Y/%m/%d %H:%M:%S', time);

print OUT "<html><body>$yyyymmdd時点
		<table border=1 cellspacing=0 cellpadding=2 class=\"best30table\">
		<tr><td>アーティスト</td><td>曲名</td><td>アルバム</td><td>再生日</td></tr>\n";


my $i = 0;
my $count_before;
my $count_same = 0;

foreach my $t(@top_list){

	my ($album, $amazon_url, $amazon_img_url);

	if($link_to_amazon == 1){
		if($t->{Comment} =~ m/(B.*)/){
			$amazon_url = "http://d.hatena.ne.jp/asin/$1$amazon_id";
			$amazon_url = $1;
		}

	}
	
	if(defined $amazon_url){
		$album = qq|<td><a href="$amazon_url">$t->{Album}</a></td>|;
		$album = qq|<td>asin:$amazon_url:title</td>|;
	}else{
		$album = "<td>$t->{Album}</td>";
	}


	print OUT qq|<tr><td>$t->{Artist}</td><td>$t->{Name}</td>$album
<td>$t->{PlayedDate}</td></tr>\n|;


}

print OUT "</table>\n</body></html>\n";
close OUT;