バックアップをかねて掲載。かなり無駄が多いコード。
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;