GraphVizで遊んだ
Twitterのfriendsとfollowerをグラフ化しようとしてGraphVizを使ってみた。
いろいろやってみたら100ノードぐらいで限界がきたのでやめた。
なんか載せた図みたいになった(friends 100のみで)。解像度は本当は1536×1472です。
目標は全く達成できてないけどソース載っけてみる。
とりあえず、モジュールNet::TwitterとGraphVizの使い方がわかったのでよしとしよう。
#!/usr/bin/env perl package main; use strict; use warnings; use Carp; use utf8; use Net::Twitter; use GraphViz; my $username = $ARGV[0]; my $password = $ARGV[1]; my $output_file = $ARGV[2]; my $twit = create_twitter($username, $password); my @followings = @{ get_followings($twit, $username) }; my $g = GraphViz->new( directed => 1, layout => 'fdp', overlap => 'compress', ratio => 'auto', width => 16, height => 16, node => { fontsize => 10, }, ); $g->add_node( $username ); map { $g->add_node( $_ ); $g->add_edge( $username => $_ ); } @followings; $g->as_png($output_file); sub create_twitter { my ($user, $pass) = @_; my $twit = Net::Twitter->new( username => $user, password => $pass); return $twit; } sub get_followings { my $twit = shift; my $user = shift; my $user_info = $twit->show_user( $user ); my @followings = (); #for (my $i = 0; $i <= int ( $user_info->{'friends_count'} / 100 ) ; $i++) { for (my $i = 0; $i <= 0 ; $i++) { my $temp_followings = $twit->following( { page => $i + 1 }); map { push @followings, $_->{'screen_name'} } @{ $temp_followings }; #print "$i ", scalar @followings, "\n"; sleep(1); } return \@followings; } sub get_followers { my $twit = shift; my $temp_followers = $twit->followers(); my @followers = (); map { push @followers, $_->{'screen_name'} } @{ $temp_followers }; return \@followers; } 1; __END__