Twitter LED 时间线

3

你好,我已经编写了一个用于 Twitter 时间线的脚本,除了我不知道如何授权我的 Twitter API 密钥之外,它运行得很好。我的 LED 灯板只显示“错误的认证数据”。

以下是我的代码:

#!/usr/bin/perl

require LWP::UserAgent;
use JSON;

my $lwpua = LWP::UserAgent->new;

my $uagent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6";
my @header = ( 'Referer' => 'http://api.twitter.com/', 'User-Agent' => $uagent );

my $twuser = '<twitter_name>';
my $twurl  = "http://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=$twuser";

my $response = $lwpua->get( $twurl, @header );
my $return = $response->content;

my $json      = JSON->new->allow_nonref;
my $json_text = $json->decode($return);

my @tweets = @{$json_text};

my $message;
foreach $tweet (@tweets) {
    $message .= $tweet->{text} . "\n";
}

use Device::MiniLED;
my $sign = Device::MiniLED->new( devicetype => "sign" );

$sign->addMsg(
    data   => "$message",
    effect => "scroll",
    speed  => 4
);

$sign->send( device => "/dev/ttyUSB0" );

1;

use strict; use warnings; - Sobrique
1个回答

4
首先:use strict;use warnings;。即使你是最棒的程序员,如果出现问题,这应该是你的首选方法。(每个人都会犯错)。
其次:$json_text 是哈希引用,而不是数组引用。你可能想要使用values或类似的东西。
第三:Bad Authentication Data 是 Twitter API 的错误,而不是代码错误。你需要使用 oAuth 进行授权,而你并没有进行任何 Twitter 授权。来自:https://dev.twitter.com/overview/api/response-codes 215 - 通常会在 HTTP 状态码为 400 的 1.1 响应中发送。该方法需要进行身份验证,但未提供或完全无效。 例如,你没有进行授权就不能做你想做的事情。我认为你需要的是:在https://dev.twitter.com/oauth/overview/application-owner-access-tokens上生成一个特定于账户的身份验证令牌,并将其发送到你的请求中。
一旦你完成了这个操作,你可以在 Twitter 上找到这个页面:https://dev.twitter.com/oauth/tools/signature-generator/,它允许你生成一个(有时限的)示例命令,用于获取你的时间轴。但是,你很可能需要在脚本中构建身份验证,以完成你想要做的事情。(user_timeline.json 是受限访问 API)。(应用网页上有一个“测试 oAuth”按钮)。
阅读有关创建身份验证令牌的文档,让我认为安装 Net::TwitterNet::Twitter::Lite 可能是正确的方法。
首先,按照https://dev.twitter.com/oauth/overview/application-owner-access-tokens上的说明操作。
具体来说,在 https://apps.twitter.com/ 上,您需要:
  • 创建一个应用程序
  • 生成一个令牌(从应用程序页面)。
(在 app 特定页面的“密钥和访问令牌”下)
这将为你提供与 Twitter 交流所需的四个东西:
  • 使用者 Key
  • 使用者 Secret
  • 访问令牌
  • 访问令牌 Secret
默认情况下,您的访问令牌将是只读的。对于你想做的事情来说,这是可以的。

将它们转化为Twitter授权的过程有些复杂,涉及到RSA-HMAC加密。所以最好让Net::Twitter来帮你处理:(我已经删除了我的密钥,因为我不会愚蠢到张贴相当于我的Twitter密码的内容)

#!/usr/bin/perl

use strict;
use warnings;

use Data::Dumper;

use Net::Twitter;

my $twitter = Net::Twitter->new(
    traits       => [qw/API::RESTv1_1/],
    consumer_key => 'long_string_of_stuff',
    consumer_secret =>
        'long_string_of_stuff',
    access_token => '12345-long_string_of_stuff',
    access_token_secret =>
        'long_string_of_stuff',
    ssl => 1,
);


my $tweets = $twitter->user_timeline();

print Dumper \$result;

my $message;
foreach my $tweet ( @{$tweets} ) {
    $message .= $tweet->{text} . "\n";
}

print $message;

我使用了我的账号进行了测试,它打印了我最近的推文列表,我认为这正是您想要的?


1
哦,太棒了!谢谢你提供给我的所有信息! - Binney C
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Sobrique

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接