http://shokai.org/cgi-bin/okhb/
またXML::FeedPPとXML::TreePPを使わせてもらった。
FirefoxのsageというRSSリーダーから見たところ。ここ最近で、2人以上がブックマークした記事がオンテナ2に出るようにした。
本当はコメントを出したかったんだけど、HASH(0x~~)とかになってしまうのでタグにした。なんかみんな無表情に一言コメントしてるみたいでうける。
これで俺のperlは3作目(2かも?)。配列とハッシュとかがなんとなくわかった。
perlのクラスがなんかpackageとかなっててややこしくてめんどくさかったので、適当にやってしまった。
次からはオブジェクト指向で書く。
ソースをまるごと貼っておきますね。@okmembersをいじれば巡回するID変えれます。改造などご自由に。
#!/usr/bin/perl-w
useXML::TreePP;
useXML::FeedPP;
@okmembers=(“shokai”,”hoyo1111″,”shingoy”,”kamawada”,”hatayanorg”
,”ussy9″,”YOSIM”,”suzukioono”,”zukke”,”hey008″
,”takeshig”,”guy3guy3″,”yoshirock55″);
%uriHash;#数値のハッシュokmemberのうち何人がブックマークしてるか
%uriHashIssued;#URI毎に最新の{feed}->{entry}->{issued}を格納
%uriHashTitle;#記事タイトル
%uriHashSummary;#コメント
for(my$i=0;$i<@okmembers;$i++){#okmember全員分読み込み
&getUriHash(“$okmembers[$i]”);
}
my$feed=XML::FeedPP::RSS->new();
$feed->title(“奥出研はてブ人気エントリ”);
$feed->description(“奥出研関係者の間で最近よくはてなブックマークされている記事”);
$feed->link(“http://shokai.org/cgi-bin/okhb/”);
while(($key,$value)=each%uriHash){
if($value>1){
#print$value,”:”,$key,”¥nDate:”,$uriHashIssued{$key},”¥n”;
my$item=$feed->add_item(“http://b.hatena.ne.jp/entry/$key”);#URI
my$title=”okhb($value)$uriHashTitle{$key}”;
$item->title($title);
$item->pubDate($uriHashIssued{$key});
$item->description($uriHashSummary{$key});
}
}
$feed->sort_item();#日付順
$feed->to_file(“hotentry.xml”,”UTF-8″);#書き出し
subgetUriHash{
my$treepp=XML::TreePP->new();
for(my$of=0;$of<60;$of+=20){#100件読み込む20件毎表示
my$user=$_[0];
my$source=”http://b.hatena.ne.jp/$user/atomfeed?of=$of”;
my$hash=$treepp->parsehttp(GET=>$source);#Atom読み込み
my$itemsPerPage=$hash->{feed}->{“openSearch:itemsPerPage”};#bookmarks/page
my$totalResults=$hash->{feed}->{“openSearch:totalResults”};#totalBookmarks
if($of+20<$totalResults){
for(my$i=0;$i<$itemsPerPage;$i++){
my$title=$hash->{feed}->{entry}->[$i]->{title};#タイトル取り出し
my$href=$hash->{feed}->{entry}->[$i]->{link}->[0]->{“-href”};#URI取り出し
my$issued=$hash->{feed}->{entry}->[$i]->{issued};#時刻取り出し
my$summary=$hash->{feed}->{entry}->[$i]->{“dc:subject”}->[0];
print$summary;
$uriHash{$href}+=1;#ブックマークしてるokmemberの数を集計
if(!exists$uriHashIssued{$href}){#キーがまだ無いなら
$uriHashIssued{$href}=$issued;#時刻保存
$uriHashTitle{$href}=$title;
$uriHashSummary{$href}=”$user「$summary」”;
}
else{
if($uriHashIssued{$href}lt$issued){#時刻を比較して
#print$uriHashIssued{$href},”<",$issued,"¥n";
$uriHashIssued{$href}=$issued;#新しい時刻を保存
}
$uriHashSummary{“$href”}=”$uriHashSummary{$href}
$user「$summary」”;
}
}
}
}
}