2

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");

lwp useragent で作成されたhttp://api.twitter.com/1/statuses/update.jsonへの投稿:

'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."}

誰にもアイデアがありますか?私はそこで立ち往生していて、本当にイライラしています。

4

2 に答える 2

9

Net::TwitterまたはNet::Twitter::Liteを使用したくない場合は、少なくともコードを見て、それらが何をしているかを確認する必要があります。

表示されているエラーに基づいて、OAuth ハンドシェイクを適切に行っていないようです。多分それは欠落しているフィールドと同じくらい単純ですが、あなたの単純なアプローチにはもっと欠けているものがあると思います(OAuthの詳細については何も知りません-申し訳ありません)。また、Twitter::Lite がNet::OAuth::Simpleを使用している OAuth モジュールに直接アクセスして、それがどのように処理されるかを確認することもできます。

于 2010-09-29T17:15:11.930 に答える
0

OAuth を使用せず、古い方法で ?source=twitterandroid を末尾にタグ付けします。次のようにします。

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

数週間前にテストしたところ、この方法がまだ機能することが確認されました。これを回避策と考えないでください。これは単なるレガシー機能であり、すぐになくなりますが、今のところ何かを実行できる可能性があります。

于 2010-10-11T22:57:36.363 に答える