您好我已经为Twitter时间线编写了一个脚本,除了我不知道如何授权我的twitter api密钥我的led标志只是说“Bad Authentication data”
这是我的代码
#!/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;
答案 0 :(得分:4)
首先:use strict;
和use warnings;
。即使你是最棒的程序员,如果你遇到问题,这应该是你的第一个停靠点。 (而且每个人都会拼写错误)。
其次:$json_text
是散列引用,而不是数组引用。您可能想要使用values
或类似的。
第三:Bad Authentication Data
是一个twitter api错误,而不是代码错误。您需要使用oAuth对其进行授权,并且您根本不进行任何Twitter身份验证。来自:https://dev.twitter.com/overview/api/response-codes
215 - Typically sent with 1.1 responses with HTTP code 400. The method requires authentication but it was not presented or was wholly invalid.
E.g。如果不进行身份验证,您就无法做您正在做的事情。我想你需要的是: https://dev.twitter.com/oauth/overview/application-owner-access-tokens
具体来说 - 简单回答&#39;生成帐户特定的身份验证令牌,并在您的请求中发送。
在Twitter上完成此网页后: https://dev.twitter.com/oauth/tools/signature-generator/
允许您生成(时间有限的)示例命令,您可以使用该命令来获取时间轴。但是,您很可能需要在脚本中构建身份验证才能执行您尝试执行的操作。 (user_timeline.json是受限访问API)。 (应用程序网页上有一个“测试oAuth&#39;”按钮)。
阅读有关创建身份验证令牌的文档,让我觉得安装Net::Twitter
或Net::Twitter::Lite
可能是最佳选择。
首先按照此处的说明操作:https://dev.twitter.com/oauth/overview/application-owner-access-tokens
具体而言,在https://apps.twitter.com/上您需要:
(在特定应用页面上的&#39;键和访问权限下)。
这将为您提供与Twitter交谈的4件事:
默认情况下,您的访问令牌将是只读的。这对你想做的事情很好。
将它们变成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;
使用我的帐户对此进行测试,并打印出我最近发布的推文列表,我认为这是您想要的?