とりあえずデータ取ってみっか.

テストを寝過ごしてだらだらしてたら夕方になったので, perlで書いた. 現在, dotファイル生成中.
なんだか知らないが, Googleさんからデータが取れんのでお気に入られは考慮せず.

メモ

Graphvizは digraph sample{a-b -> c;}だと間違うので, digraph sample{"a-b" -> c;}みたいな感じでやらないとダメ.

適当なソース

#Book.pl
# 1. デフォルトのユーザ配列は俺.
# 2. ユーザ配列を1から順に以下実行.
#  2-1. id:aのお気に入りid:bを, Book.dotに書きだす.
#       "a" -> "b"
#  2-2. id:bが, ユーザ配列に入ってなかったら突っ込む.
# 10k人くらいだといいなぁ.
use strict;
use warnings;

use HTML::TagParser;
my $timeStart = localtime(time);
print "Start: $timeStart\n";

open (FO, ">Book.dot") or die "Failed to open a file\n";
print FO "digraph Book{\n";

my $f = 0;
my @ID = ('smoking186',);
my %Hash = ('smoking186' => 1,);

foreach my $user (@ID){
  # print "*Searching ",$user,"\'s Favorite...\n"; #for debug
  # print "*",$user,"*\n"; #for debug
  my $html = HTML::TagParser->new( "http://b.hatena.ne.jp/$user/favorite" );
  my $favoriteDIV = $html->getElementsByClassName( "favoritelist" );
  if ($favoriteDIV){
    my $text = $favoriteDIV->innerText;
    my @list = split(/\n/, $text);
    shift @list; #"sampleのお気に入り (0)"の削除.
    @list = grep (!/^$/,@list); #空白行の削除.
    foreach my $elem (@list){
      #innerHTMLで取ったのでid前後の空白を削除.
      $elem =~ s/^\s//;
      $elem =~ s/\s$//;
      # print ":",$elem,":\n"; #for debug
      print FO "\"$user\" ->\"$elem\";\n";
      if (!(exists($Hash{$elem}))){
        push(@ID, $elem);
        $Hash{$elem} = 1;
      }
    }
  }
}

print FO "}\n";
close FO;

my $timeEnd = localtime(time);
print "Start: $timeStart\n";
print "End  : $timeEnd\n";