ミニふぁぼったー(みたいなもの)

30分プログラム、その571。特定のクラスタ向けふぁぼったー。
@banjunさんが、「ふぁぼったーみたいにTwitter全体での人気のある発言じゃなくて、もっと小さい集団での人気の発言が知りたい」と言っていたのでやってみた。

とりあえず同じ研究室の人の間で計算してみたけど、誰一人として同じ発言をふぁぼってなかった。これいらなくね?

使い方

$ perl fav.pl
cho45: svn の終わりとハードボイルド git ワールド
         by Yuichirou
mzp: @Yuichirou からSnowRabbitのバグレポートが来たので、ソースコードを渡しておいた。
         by banjun mzp
mzp: @banjun 好きなブランチ上でgit pull server:/Users/mzp/git/SnowRabbit masterでAPIでfriend listを
取得できるコードがマージできると思います
         by banjun

ソースコード

#! /usr/bin/perl
# -*- mode:perl; coding:utf-8 -*-
#
# fav.pl -
#
# Copyright(C) 2009 by mzp
# Author: MIZUNO Hiroki / mzpppp at gmail dot com
# http://howdyworld.org
#
# Timestamp: 2009/04/29 08:53:40
#
# This program is free software; you can redistribute it and/or
# modify it under MIT Lincence.
#

use strict;
use warnings;
use XML::Feed;
use Data::Dumper;

sub fetch($) {
    my ($name) = @_;
    my $feed = XML::Feed->parse(URI->new("http://twitter.com/favorites/${name}.rss"));
    map { $_->author($name); $_; } $feed->entries;
}
sub union(@) {
    my (@entries) = @_;
    my %entries = ();

    foreach my $entry (@entries) {
	if (defined $entries{$entry->link}) {
	    push @{$entries{$entry->link}->{'user'}},$entry->author;
	} else {
	    $entries{$entry->link} = {
		user  => [$entry->author],
		entry => $entry
	    }
	}
    }
    sort { DateTime->compare($b->{'entry'}->issued,$a->{'entry'}->issued) } values %entries;
}

my @users = ('banjun','mzp','athos0220','Yuichirou','mallowlabs');
foreach my $x(union map { fetch $_ } @users){
    print $x->{'entry'}->title(),"\n";
    print "\t by ",join ' ',@{$x->{'user'}},"\n";
}