Как я могу обновить свой статус в Твиттере с помощью Perl и только LWP :: UserAgent? - PullRequest
2 голосов
/ 29 сентября 2010

Я пытаюсь обновить свой статус через Twitter API и OAuth.

Я застрял на последнем шаге, обновлении статуса.Вот мой код.

Заголовок:

$ua->default_header('Content-Type' => "application/x-www-form-urlencoded");
$ua->default_header('oauth_signature' => "$signature");
$ua->default_header('Authorization' => '"OAuth realm="Twitter API"');
$ua->default_header('oauth_consumer_key' => "blablabla");
$ua->default_header('oauth_nonce' => "$nonce");
$ua->default_header('oauth_signature_method' => "HMAC-SHA1");
$ua->default_header('oauth_timestamp' => "$epoch");
$ua->default_header('oauth_token' => "$token_final");
$ua->default_header('oauth_version' => "1.0");

Пост http://api.twitter.com/1/statuses/update.json сделан с помощью lwp useragent:

'oauth_signature'=>"$signature",
'status'=>'Bientot',
'oauth_consumer_key'=>'blabla',
'oauth_signature_method'=>'HMAC-SHA1',
'oauth_nonce'=>"$nonce",
'oauth_timestamp'=>"$epoch",
'oauth_token'=>"$token_final",
'oauth_version'=>"1.0", 

и что я получу:

HTTP/1.1 401 Unauthorized
Cache-Control: no-cache, max-age=300
Connection: close
Date: Wed, 29 Sep 2010 14:36:48 GMT
Server: hi
Vary: Accept-Encoding
WWW-Authenticate: Basic realm="Twitter API"
Content-Length: 75
Content-Type: application/json; charset=utf-8
Expires: Wed, 29 Sep 2010 14:41:48 GMT
Client-Date: Wed, 29 Sep 2010 14:36:49 GMT
Client-Peer: 128.242.240.29:80
Client-Response-Num: 1
Set-Cookie: _twitter_sess=BAh7DjoTc2hvd19oZWxwX2xpbmswOg5yZXR1cm5fdG8iYWh0dHA6Ly9hcGku%250AdHdpdHRlci5jb20vb2F1dGgvYXV0aG9yaXplP29hdXRoX3Rva2VuPXpMc2d2%250AV2U5aHBvSWNOSW5rOFFkYUNrN1NQSlozZW1VcUNpckNxWkZvOhVpbl9uZXdf%250AdXNlcl9mbG93MDoTcGFzc3dvcmRfdG9rZW4iLWZiNzEyNTAzMGNiYTk1NTU1%250ANDE0OGExM2UxN2U2Yzc1ZmY2YjUzMDE6CXVzZXJpBLWRPgYiCmZsYXNoSUM6%250AJ0FjdGlvbkNvbnRyb2xsZXI6OkZsYXNoOjpGbGFzaEhhc2h7AAY6CkB1c2Vk%250AewA6B2lkIiU0MGUyNmQzNjRmYmI4YThlODgwN2MwZWYzYzNlOGJiYjoMY3Ny%250AZl9pZCIlZTUzZjY0OGIxMWZiOTA0OWQzM2FlOGI4NjYzZDA5NTI6D2NyZWF0%250AZWRfYXRsKwhe%252FkpTKwE%253D--3b624de9adb8de40ff8a3f0a5780f2b18b6abd44; domain=.twitter.com; path=/
Status: 401 Unauthorized
X-Runtime: 0.00264

{"request":"/1/statuses/update.json","error":"Could not authenticate you."}

У кого-нибудь есть идея?Я застрял там, и это действительно расстраивает.

Ответы [ 2 ]

9 голосов
/ 29 сентября 2010

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

Судя по полученной ошибке, похоже, что вы не выполняете рукопожатие OAuth должным образом.Возможно, это так же просто, как пропущенное поле, но я подозреваю, что в вашем простом подходе чего-то не хватает (я ничего не знаю об особенностях OAuth - извините).Вы также можете перейти непосредственно к модулю OAuth, который Twitter :: Lite использует Net :: OAuth :: Simple , чтобы увидеть, как они его обрабатывают.

0 голосов
/ 12 октября 2010

Не используйте OAuth, просто сделайте это по-старому и добавьте тег? Source = twitterandroid в конец, например:

http://api.twitter.com/1/account/rate_limit_status.json?source=twitterandroid

Я проверил это пару недель назад и подтвердил, что метод все еще работает. Пожалуйста, не рассматривайте это как обходной путь, это просто устаревшая функциональность, которая быстро исчезнет, ​​но может позволить вам что-то сделать сейчас.

...