Changeset 1233

Show
Ignore:
Timestamp:
11/08/07 15:05:16 (6 years ago)
Author:
tomyhero
Message:

lang/perl/Net-Twitter-FriendFinder?: support filter and sleep

Location:
lang/perl/Net-Twitter-FriendFinder/trunk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/Net-Twitter-FriendFinder/trunk/Changes

    r1219 r1233  
    11Revision history for Net-Twitter-FriendFinder 
    22 
     30.01_03    2007-11-08/15:04 
     4           - filter_already_followers support. it can be reduced API request. 
     5             for this fix you must set username and passowrd at new() parameters 
     6           - support sleep setting.  
    370.01_02    2007-11-08/00:21 
    48           - Bug Fix: can not load custom resource module. 
  • lang/perl/Net-Twitter-FriendFinder/trunk/lib/Net/Twitter/FriendFinder.pm

    r1219 r1233  
    55use UNIVERSAL::require; 
    66use base qw/Class::Accessor::Fast/; 
    7 __PACKAGE__->mk_accessors(qw/default from setting ids scores resources/); 
     7__PACKAGE__->mk_accessors(qw/default from setting ids scores resources filters)/); 
    88use Text::SimpleTable; 
    99use Net::Twitter; 
    1010 
    11 our $VERSION = '0.01_02'; 
     11our $VERSION = '0.01_03'; 
     12 
     13# Net::Twitter HACK. I know this is not good way to do this. 
     14# REASON: Net::Twitter->following only allow to retrive 100 limit. 
     15sub Net::Twitter::following_screen_names { 
     16    my ( $self ) = @_; 
     17 
     18    my @screen_names = (); 
     19    # limit 20 pages for now.( 2000 twitters ) 
     20    my @pages = (1..20); 
     21    for my $page ( @pages ) { 
     22        my $url = $self->{apiurl} . "/statuses/friends.json?page=$page" ; 
     23        my $req = $self->{ua}->get($url); 
     24        my $res = JSON::Any->jsonToObj($req->content) ; 
     25 
     26        last unless scalar @{ $res } ; 
     27 
     28        for my $item ( @{ $res } ) { 
     29            push @screen_names , $item->{screen_name}; 
     30        } 
     31    } 
     32 
     33    return \@screen_names; 
     34     
     35} 
    1236 
    1337sub search { 
     
    3963    } 
    4064 
     65    if( $self->{setting}{filter_already_followers} ) { 
     66        my $twitter = Net::Twitter->new( username=> $self->{setting}{username} , password => $self->{setting}{password} ); 
     67        my $screen_names = $twitter->following_screen_names(); 
     68        my @filters = (); 
     69 
     70        for my $screen_name ( @{ $screen_names } ) { 
     71            if( defined $data->{ $screen_name } ) { 
     72                push @filters , { id => $screen_name , score =>  $data->{ $screen_name } }; 
     73                delete $data->{ $screen_name }; 
     74            } 
     75        } 
     76        $self->{filters} = \@filters; 
     77 
     78    } 
     79 
    4180    my @ids = sort { $data->{ $a } <=> $data->{ $b } } keys %{ $data }; 
    4281 
     
    82121    print $t3->draw; 
    83122 
     123    if( scalar @{ $self->{filters} } ) { 
     124        my $t4 = Text::SimpleTable->new( 44 ); 
     125        $t4->row( 'Filter Users' ); 
     126        print $t4->draw; 
     127 
     128        my $t5= Text::SimpleTable->new( 3, 20, 15 ); 
     129        my $cnt = 1; 
     130        for my $filter ( @{ $self->{filters} } ) { 
     131            $t5->row( $cnt , $filter->{id} , $filter->{score} ); 
     132            $cnt++; 
     133        } 
     134        print $t5->draw; 
     135    } 
    84136 
    85137} 
    86138 
    87139sub follow { 
     140use Data::Dumper; 
    88141    my $self = shift; 
    89     my $username = shift; 
    90     my $password= shift; 
    91     my $twit = Net::Twitter->new( username=>$username ,password=> $password); 
     142    my $twit = Net::Twitter->new( username=>$self->{setting}{username} ,password=> $self->{setting}{password}); 
    92143    foreach my $id (  @{ $self->{ids} } ) { 
    93144        my $result = $twit->follow( $id ); 
    94         print "follow $id \n" if $self->{setting}{on_echo}; 
     145        sleep( $self->{setting}{sleep} ) if  defined $self->{setting}{sleep}; 
     146 
     147        my $res = defined $result ? 'ok' : 'fail'; 
     148        print "follow $id [$res]\n" if $self->{setting}{on_echo}; 
    95149    } 
    96150} 
     
    120174            limit => 20, 
    121175            on_echo=> 1, 
     176            username => '****', 
     177            password => '****', 
     178            filter_already_followers => 1, 
     179            sleep => 60, 
    122180        }, 
    123181        default => {  
     
    133191    $tf->search( $keyword ); 
    134192    $tf->show(); 
    135     $tf->follow({ username => '****' , password=> '******' }); 
     193    $tf->follow(); 
    136194 
    137195=head1 MODULE 
     
    147205 
    148206on_echo - when on_echo = 1 then , $tf->follow() method print out who you are going to follow. 
     207 
     208username - twitter username 
     209 
     210password - twitter password 
     211 
     212sleep - since Twitter API has request count limitation, you may want to set sleep time when you try to follow a lot of people. 
     213 
     214filter_already_followers - when true, it will check your current followers and not try to follow again. required username and password for this. NOTICE: you may miss some friends to filter who add recently because Twitter API does not return them. 
    149215 
    150216** default 
     
    182248follow people you find. I recommend that before calling this module , you 
    183249should check who you are going t follow with show() method. 
    184  
    185 you must set your twitter username and passsword . 
    186  
    187  $tf->follow( { username => '*****' , password => '*****' }); 
    188250 
    189251 =head1 HOW TO MAKE YOUR OWN RESOURCE