Blog Hacks Hack #92 では、Winamp とそのプラグイン amip を使用して、今聞いている曲をエントリに追記する方法を紹介していますが、iTunes の場合は COM を利用してもっとスマートにできます。
某氏からのリクエストでこれにアートワークもひろってきて Amazon アフィリエイトリンクもつけてみる。
ActivePerl で Net::Amazon が必要。環境が用意できない場合は、JScript 版で開く URL を、G-Tools とか amazlet とかの検索フォームにしてしまうのが手っ取り早いかも。何ステップか増えてしまいますが。
JScript 版と基本的にやってることは同じですね。InternetExplorer.Application のいじり方で若干はまった。CPAN にある Win32::IE::Mechanize がその辺を隠蔽して WWW::Mechanize とおなじ API 提供してて素敵。
use strict; use Encode; use Net::Amazon; use Net::Amazon::Request::Keyword; use Win32::OLE; # Configurtaion: path to your MT script our $MT = "http://blog.bulknews.net/mt/mt.cgi"; our $BlogID = 6; our $DeveloperToken = "YOUR-TOKEN"; our $AssociateID = "yourassoc-22"; # Get Trackname from iTunes using COM my $itunes = Win32::OLE->new("iTunes.Application"); my $track = $itunes->CurrentTrack; # Create text for "Now Playing" my $now_playing = sprintf "Now Playing: %s - %s (%s)", $track->Artist, $track->Name, $track->Album; # Search AWS for Artist - Album my $item = search_aws($track->Artist, $track->Album, "", "music"); $item ||= search_aws($track->Artist, $track->Album, "jp", "music-jp"); if ($item) { $now_playing = sprintf qq(<a href="%s"><img src="%s" alt="%s - %s" border="0" clear="all" /><br />%s</a>), $item->url, $item->ImageUrlMedium, $track->Artist, $track->Album, $now_playing; } # Open "New Entry" page of MT in IE using COM my $url = $MT . "?blog_id=" . $BlogID . "&__mode=view&_type=entry"; my $ie = Win32::OLE->new("InternetExplorer.Application"); $ie->{Visible} = "TRUE"; $ie->Navigate($url); # Set "Now Playing:" text in a "exntended" textarea 1 while $ie->Busy; 1 while $ie->document->readyState ne "complete"; $ie->Document->forms(2)->text_more->{value} = $now_playing; sub search_aws { my($artist, $title, $locale, $mode) = @_; warn "Searching $artist - $title on Amazon...\n"; my $attr; $attr->{token} = $DeveloperToken; $attr->{locale} = $locale if $locale; $attr->{affiliate_id} = $AssociateID; my $ua = Net::Amazon->new(%$attr); my $keyword = "$artist $title"; Encode::from_to($keyword, "Shift_JIS" => "UTF-8"); my $req = Net::Amazon::Request::Keyword->new( keyword => $keyword, mode => $mode ); my $response = $ua->request($req); my $item = ($response->properties())[0]; return $item; }