Networkをマインドマップ風に表示してみる

http://del.icio.us/help/json/networkからJSONを引っ張ってきて,JSON::SyckGraphVizマインドマップ風にして画像化。

#!/usr/bin/perl

use strict;
use warnings;

use LWP::Simple;
use JSON::Syck;
use GraphViz;

my $root_user = 'higeorange';
my $limit = 2;

my $s = 1;
my $data = &get_json($root_user);
my $graph = GraphViz->new(layout => 'fdp');
&add_node($root_user, $data, $s);

print $graph->as_png("network.png");

sub add_node{
    my ($ru, $data, $n) = @_; 
    $graph->add_node($ru);
    for my $u (@$data) {
        $graph->add_node($u);
        $graph->add_edge($ru => $u);
        if ($n < $limit) {
            my $u_data = &get_json($u);
            &add_node($u, $u_data, $n+1);
        }
    }   
}

sub get_json {
    my $user = shift;
    my $json = get('http://del.icio.us/feeds/json/network/'.$user);
    return JSON::Syck::Load($json);
}

"$root_user"でだれから始めるか,
"$limit" でどこまで遡るかを指定。上のコードの "2" だと,ネットワークのネットワークまで。


人数が多すぎて大きな画像ファイルになったり,線が多すぎてかさなったりで,見れたもんじゃ無い…。
GraphVizでこんなのが描けるよ的なもの。


できた画像