From 3da8a2f300757f48bb4ffa35a409eafbcf9dfa49 Mon Sep 17 00:00:00 2001 From: franck cuny Date: Sat, 30 Jan 2010 15:09:58 +0100 Subject: don't make a call for each repo, don't ask for lang, add fork to repo schema --- lib/githubexplorer/Profile.pm | 36 ++++++++++++++----- lib/githubexplorer/Repositorie.pm | 46 ++++++++++++------------ lib/githubexplorer/Schema/Result/Repositories.pm | 1 + 3 files changed, 52 insertions(+), 31 deletions(-) (limited to 'lib') diff --git a/lib/githubexplorer/Profile.pm b/lib/githubexplorer/Profile.pm index 47a0582..7966d79 100644 --- a/lib/githubexplorer/Profile.pm +++ b/lib/githubexplorer/Profile.pm @@ -3,32 +3,38 @@ use 5.010; use Moose::Role; use Net::GitHub::V2::Users; +has banned_profiles => + ( isa => 'ArrayRef', is => 'ro', default => sub { [qw/gitpan/] } ); + sub fetch_profile { my ( $self, $login, $depth ) = @_; - return if $depth > 3; + return if grep {$_ =~ /$login/i} @{$self->banned_profiles}; + + return if $depth > 2; my $profile = $self->_profile_exists($login); say "fetch profile for $login ($depth)..."; - sleep(1); my $github = Net::GitHub::V2::Users->new( owner => $login, login => $self->api_login, token => $self->api_token, ); - sleep(2); + sleep(1); if ( !$profile ) { $profile = $self->_create_profile( $login, $github->show, $depth ); - if ( $self->with_repo ) { - foreach my $repo ( @{ $github->list } ) { - $self->fetch_repo( $profile, $repo->{name} ); - } - } sleep(1); } + if ( $self->with_repo ) { + $self->fetch_repositories( $profile, $github->list ); + } + my $followers = $github->followers(); + sleep(1); + my $following = $github->following(); my $local_depth = $depth + 1; + foreach my $f (@$followers) { my $p = $self->fetch_profile( $f, $local_depth ); next unless $p; @@ -40,9 +46,23 @@ sub fetch_profile { } ); } + + 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; } + sub _profile_exists { my ( $self, $login ) = @_; my $profile diff --git a/lib/githubexplorer/Repositorie.pm b/lib/githubexplorer/Repositorie.pm index 6d777b8..bfb8076 100644 --- a/lib/githubexplorer/Repositorie.pm +++ b/lib/githubexplorer/Repositorie.pm @@ -3,31 +3,31 @@ use 5.010; use Moose::Role; use Net::GitHub::V2::Repositories; -sub fetch_repo { - my ( $self, $profile, $repo_name ) = @_; +sub fetch_repositories { + my ( $self, $profile, $repo_list ) = @_; + + foreach my $repo (@$repo_list) { + next if $self->_repo_exists( $profile, $repo->{name} ); + say "-> check " . $profile->login . "'s ".$repo->{name}; + # my $github = Net::GitHub::V2::Repositories->new( + # owner => $profile->login, + # repo => $repo->{name}, + # login => $self->api_login, + # token => $self->api_token, + # ); - return if $self->_repo_exists( $profile, $repo_name ); - - say "-> check " . $profile->login . "'s $repo_name"; - sleep(1); - my $github = Net::GitHub::V2::Repositories->new( - owner => $profile->login, - repo => $repo_name, - login => $self->api_login, - token => $self->api_token, - ); - sleep(1); - my $langs = $github->languages(); - sleep(1); - return unless grep {/perl/i} keys %$langs; - my $repo_desc = $github->show(); - sleep(1); - $profile->perl_total_bytes( $profile->perl_total_bytes + $langs->{Perl} ); - $self->schema->txn_do( sub { $profile->update } ); - $self->_create_repo( $profile, $repo_desc ); - sleep(1); + # my $langs = $github->languages(); + # sleep(1); + # return unless grep {/perl/i} keys %$langs; + # my $repo_desc = $github->show(); + # sleep(1); + # $profile->perl_total_bytes( $profile->perl_total_bytes + $langs->{Perl} ); + # $self->schema->txn_do( sub { $profile->update } ); + $self->_create_repo( $profile, $repo ); + } } + sub _repo_exists { my ( $self, $profile, $repo_name ) = @_; return @@ -44,7 +44,7 @@ sub _create_repo { my $repo_insert = { id_profile => $profile->id, map { $_ => $repo_desc->{$_} } - (qw/description name homepage url watchers forks/) + (qw/description name homepage url watchers forks fork/) }; $self->schema->txn_do( sub { diff --git a/lib/githubexplorer/Schema/Result/Repositories.pm b/lib/githubexplorer/Schema/Result/Repositories.pm index 641305f..2bd7136 100644 --- a/lib/githubexplorer/Schema/Result/Repositories.pm +++ b/lib/githubexplorer/Schema/Result/Repositories.pm @@ -12,6 +12,7 @@ __PACKAGE__->add_columns( url => { data_type => 'varchar', is_nullable => 1 }, watchers => { data_type => 'int' }, forks => { data_type => 'int' }, + fork => { data_type => 'bool' }, id_profile => { data_type => 'int', is_foreign_key => 1 }, ); -- cgit 1.4.1