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」”;

}

}

}

}

}