2014-12-12 3 views
3

Здравствуйте, я поставил вместе скрипт для щебет сроки он работает отдельно от я не знаю, как разрешить мой твиттер ключ апи мой привел знак только о том, «Плохие данные аутентификации»Twitter LED Timeline

вот мой код

#!/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

'use strict; использовать предупреждения; ' – Sobrique

ответ

4

Первое: use strict; и use warnings;. Даже если вы самый надежный программист, это должен быть ваш первый порт захода, если у вас возникли проблемы. (И все делают опечатки).

Во-вторых: - это хэш-рефлекс, а не массив ref. Возможно, вы захотите использовать values или аналогичный.

В-третьих: Bad Authentication Data является ошибкой twitter api, а не ошибкой кода. Вам нужно авторизовать его с помощью oAuth, и вы вообще ничего не делаете. От: 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.

Э.Г. вы не можете делать то, что делаете, не проверяя подлинность. Я думаю, что вам нужно: https://dev.twitter.com/oauth/overview/application-owner-access-tokens

В частности - «простой ответ» генерирует токен аутентификации учетной записи и отправляет его в ваш запрос.

После того, как вы сделали эту веб-страницу это на Twitter: https://dev.twitter.com/oauth/tools/signature-generator/

позволяет генерировать (время ограничено) пример команды, которые вы могли бы использовать для извлечения временной шкалы. Но вам, скорее всего, потребуется создать аутентификацию в вашем скрипте, чтобы делать то, что вы пытаетесь сделать. (user_timeline.json - это API с ограниченным доступом). (На веб-странице приложения есть кнопка «test oAuth»).

Чтение документов, связанных с созданием токенов аутентификации, заставляет меня говорить, что установка Net::Twitter или Net::Twitter::Lite может быть путем.

Во-первых следуйте инструкциям здесь: https://dev.twitter.com/oauth/overview/application-owner-access-tokens

В частности, на https://apps.twitter.com/ вам нужно:

  • создать приложение
  • генерирует маркер (со страницы приложения).

(Под «ключами и токена доступа» на странице приложения).

Это даст вам 4 вещи, которые нужно говорить сайту:

  • потребитель ключ
  • потребитель секрет
  • маркер доступа
  • маркер доступа секрет

По умолчанию ваш токен доступа будет считан только для чтения. Это нормально для того, что вы хотите сделать.

Процесс превращения их в Твиттер-аутентификатор немного сложнее и включает шифрование 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

oh so awesome! благодарю вас за всю информацию, которую вы мне дали! –

+0

Это то, что я имел в виду, чтобы разобраться в моей собственной выгоде, и это было просто подталкивание, которое мне нужно было для этого. – Sobrique

Смежные вопросы