Hatena::Grouptwitter

smokeymonkey@ついったー部 RSSフィード

 | 

2008-01-23

ついったー部Last.fm部から集計した週間アーティストランキングを投稿するアカウント:LastFmRank

16:45 | ついったー部Last.fm部から集計した週間アーティストランキングを投稿するアカウント:LastFmRank - smokeymonkey@ついったー部 を含むブックマーク はてなブックマーク - ついったー部Last.fm部から集計した週間アーティストランキングを投稿するアカウント:LastFmRank - smokeymonkey@ついったー部

ついったー部のLast.fm部から各ユーザIDを抽出し、Last.fmのデータフィードの週間アーティストフィードからアーティスト毎の再生回数を集計し、@LastFmRankに投稿。

毎週月曜日、12:00に投稿するよう、Cronで回してます。

ツッコミ、修正を募集しています。

修正:@Ettさんよりご指摘を頂き、カウントダウン形式に変更。

修正:@TERRAZIさんよりご指摘を頂き、アーティスト名を目立つよう【】で括るように。

#!/usr/bin/perl

use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;
use HTML::LinkExtor;
use XML::DOM;
use Encode;
use Net::Twitter;
use Jcode;

sub main {
  # Last.fm Club
  my $URL = 'http://twitter.g.hatena.ne.jp/keyword/Last.fm%E9%83%A8';

  my $proxy = new LWP::UserAgent;
  my $req = HTTP::Request->new('GET' => $URL);
  my $res = $proxy->request($req);

  my $p = HTML::LinkExtor->new(unlink(),$URL);
  $p->parse($res->{_content});
  for $link ($p->links){
    my $href = join(" ", @{$link});
    if ($href =~ /.*http:\/\/www\.last.*\/user\//) {
      $href =~ s/.*\/user\///;
      $href =~ s/\///g;
      my $xml = "http://ws.audioscrobbler.com/1.0/user/$href/weeklytrackchart.xml";
      my $proxy = new LWP::UserAgent;
      my $req = HTTP::Request->new('GET' => $xml);
      my $res = $proxy->request($req);
      if ($res->is_success) {
        eval {
          my $parser = new XML::DOM::Parser;
          my $doc = $parser->parsefile($xml); 
          my $nodelist = $doc->getElementsByTagName("track");
          for ($i=0; $i<$nodelist->getLength; $i++) {
            my $node = $nodelist->item($i); 
            my $arttmp = $node->getElementsByTagName("artist")->item(0)->getFirstChild->getNodeValue;
            my $playcount = $node->getElementsByTagName("playcount")->item(0)->getFirstChild->getNodeValue;
            $artist = encode('utf8',$arttmp);
            $count{$artist} += $playcount;
          }
        };
      }
    sleep(1);
    }
  }
  foreach $artist(sort{$count{$b} <=> $count{$a}} keys %count) {
    push(@rank,"【$artist】[再生回数$count{$artist}回]");
  }
  my $twit = Net::Twitter->new(
    username=>"LastFmRank" 
    , password=>"PASSWORD"
  );
  for ($i=9; $i>=0; $i--){
    my $j = $i+1;    my $text = "今週のついったー部週間アーティスト第$j位$rank[$i]";
    Jcode::convert(\$text, 'utf8');
    my $result = $twit->update($text);
    sleep(15);
  }
}

eval {&main(@ARGV)};
print "ERROR\n" if $@;

exit;

ゲスト



トラックバック - http://twitter.g.hatena.ne.jp/smokeymonkey/20080123
 |