在Perl中使用Net :: Twitter使用游标

时间:2013-12-07 16:45:12

标签: perl twitter

我使用Net :: Twitter界面挖掘Twitter的Twitter的REST API。我能够获得带有搜索词的时间表,指定语言和返回大小等参数。

use Net::Twitter;
use Data::Dumper;
use Encode;
$, = "\t", $\ = "\n";

$consumer_key = q(<yourKey>);
$consumer_secret = q(<yourSecret>);
$access_token = q(<yourToken>);
$access_token_secret = q(<yourTokenSecret>);

my $t = Net::Twitter->new(
    traits              => [qw/API::RESTv1_1/],
    consumer_key        => $consumer_key,
    consumer_secret     => $consumer_secret,
    access_token        => $access_token,
    access_token_secret => $access_token_secret,
);

my $search_term = q(@Monsanto);
my $result = $t->search($search_term, {lang => 'en', count => 100});

my $identity; # Last returned id 
foreach my $status (@{$result->{'statuses'}}) {
    $identity = $status->{id};              # Tweet ID
    print $status->{user}->{screen_name};   # Screen Name
    my $s = $status->{text};                # Tweeted Text
    $s =~ s/[^[:ascii:]]+//g;               # Strip Non-ASCII Encoded Characters
    print $identity . '|' . $s;             # Tweet ID | Tweeted Text
};
print 'STOPPED at ' . $identity;            # ID of the last tweet

Twitter限制在任何一个搜索查询中返回的搜索结果的数量。将时间线延伸到速率限制之外需要进行游标。通常,获取最后(最早)推文的id并将其设置为最大值。下一个查询的ID。这里是NET :: TWITTER出现在这里。

my $result2 = $t->search($search_term, {max_id => $identity});
foreach my $status (@{$result2->{'statuses'}}) {
    $identity = $status->{id};   
    print $status->{user}->{screen_name};
    my $s = $status->{text}; 
    $s =~ s/[^[:ascii:]]+//g; 
    print $identity . '|' . $s;
};
print 'STOPPED at ' . $identity;

我在32位Win XP操作系统上运行Perl。我尝试了很多方法。首先,我尝试将数字id替换为字符串来代替变量。

my $result2 = $t->search($search_term, {max_id => 406729969746722816});

或者

my $result2 = $t->search($search_term, {max_id => '406729969746722816'});

没有变化。我在Twitter的dev上测试了这个查询。控制台并验证REST API是否有效。

1 个答案:

答案 0 :(得分:0)

万一你从来没有找到答案,也许你需要使用64位系统,因为看起来你正在使用'id'而不是'id_str'。数字推文ID现在可能比32位系统可以处理的更大。

https://dev.twitter.com/rest/public/timelines