diff options
author | franck cuny <franck@lumberjaph.net> | 2010-01-31 21:41:05 +0100 |
---|---|---|
committer | franck cuny <franck@lumberjaph.net> | 2010-01-31 21:41:05 +0100 |
commit | 35132ef3567b569aeb9bc0355983600bbb4e08a6 (patch) | |
tree | e2eabe041c8dfc25e1c8fbb2b4091216f882b288 /lib/githubexplorer/Profile.pm | |
parent | start to gen. gexf (diff) | |
download | github-explorer-35132ef3567b569aeb9bc0355983600bbb4e08a6.tar.gz |
don't check follow(ers|ing) more than once
Diffstat (limited to '')
-rw-r--r-- | lib/githubexplorer/Profile.pm | 71 |
1 files changed, 42 insertions, 29 deletions
diff --git a/lib/githubexplorer/Profile.pm b/lib/githubexplorer/Profile.pm index 1f38452..94fe040 100644 --- a/lib/githubexplorer/Profile.pm +++ b/lib/githubexplorer/Profile.pm @@ -9,13 +9,11 @@ has banned_profiles => sub fetch_profile { my ( $self, $login, $depth ) = @_; - return if grep {$_ =~ /$login/i} @{$self->banned_profiles}; - return if $depth > 2; + return if grep { $_ =~ /$login/i } @{ $self->banned_profiles }; + return if $depth > 3; my $profile = $self->_profile_exists($login); - return $profile if $profile; - say "fetch profile for $login ($depth)..."; my $github = Net::GitHub::V2::Users->new( owner => $login, @@ -25,46 +23,61 @@ sub fetch_profile { sleep(1); if ( !$profile ) { + my $desc = $github->show; + if (!$desc || ($desc && exists $desc->{error})) { + sleep(60); + $self->fetch_profile($login, $depth); + } $profile = $self->_create_profile( $login, $github->show, $depth ); - sleep(1); + sleep(2); if ( $self->with_repo ) { $self->fetch_repositories( $profile, $github->list ); } } - my $followers = $github->followers(); + my $followers = $github->followers(); sleep(1); my $following = $github->following(); + sleep(1); my $local_depth = $depth + 1; - foreach my $f (@$followers) { - my $p = $self->fetch_profile( $f, $local_depth ); - next unless $p; - $self->schema->txn_do( - sub { - $self->schema->resultset('Follow') - ->find_or_create( - { id_following => $profile->id, id_follower => $p->id } ); - } - ); - } + unless ( $profile->done ) { + foreach my $f (@$followers) { + my $p = $self->fetch_profile( $f, $local_depth ); + next unless $p; + $self->schema->txn_do( + sub { + $self->schema->resultset('Follow')->find_or_create( + { + id_following => $profile->id, + id_follower => $p->id + } + ); + } + ); + } - foreach my $f (@$following) { - my $p = $self->fetch_profile( $f, $local_depth ); - next unless $p; - $self->schema->txn_do( - sub { - $self->schema->resultset('Follow') - ->find_or_create( - { id_following => $p->id, id_follower => $profile->id } ); - }, - - ); + foreach my $f (@$following) { + my $p = $self->fetch_profile( $f, $local_depth ); + next unless $p; + $self->schema->txn_do( + sub { + $self->schema->resultset('Follow')->find_or_create( + { + id_following => $p->id, + id_follower => $profile->id + } + ); + }, + + ); + } + $profile->update( { done => 1 } ); } + sleep(1); $profile; } - sub _profile_exists { my ( $self, $login ) = @_; my $profile |