summaryrefslogtreecommitdiff
path: root/lib/githubexplorer/Profile.pm
diff options
context:
space:
mode:
authorfranck cuny <franck@lumberjaph.net>2010-01-30 15:09:58 +0100
committerfranck cuny <franck@lumberjaph.net>2010-01-30 15:09:58 +0100
commit3da8a2f300757f48bb4ffa35a409eafbcf9dfa49 (patch)
tree3944a48b0d2fbcf2f27dc392dbeffcabc9edc418 /lib/githubexplorer/Profile.pm
parentcount perl bytes, some tweaking (diff)
downloadgithub-explorer-3da8a2f300757f48bb4ffa35a409eafbcf9dfa49.tar.gz
don't make a call for each repo, don't ask for lang, add fork to repo schema
Diffstat (limited to '')
-rw-r--r--lib/githubexplorer/Profile.pm36
1 files changed, 28 insertions, 8 deletions
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