Twitter LED时间线

时间:2014-12-12 16:43:49

标签: perl twitter

您好我已经为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;

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::TwitterNet::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;

使用我的帐户对此进行测试,并打印出我最近发布的推文列表,我认为这是您想要的?