2

Web サイト内のツイートを自分の Twitter アカウントに投稿するためにTwitterizerライブラリを使用しています。私のローカルサーバーで実行されているサイトで問題なく動作します(Twitterアプリを介してOAuthで認証し、ツイートを投稿します)。しかし、運用サーバーにツイートを投稿しようとすると、Twitterizer は次のように言います。「Result = Unauthorized . ErrorMessage = Could not authenticate with OAuth .」

コンシューマーキーを再確認し、キーをリセットして再試行しましたが、結果は同じでした。

Twitter アプリケーションには、私の Twitter アカウントへの読み取り/書き込みアクセス権があり、ブロックされていません。この問題は、1 時間ごとにツイートが投稿されていた約 1 か月間、正常に動作した後に突然発生しました。

ここで何が問題なのですか?

更新 他の人もこの問題に直面しているようです: https://dev.twitter.com/discussions/305

更新 2 最後に、私の場合に問題が発生した原因を突き止めました。運用サーバー上の Web アプリが、140 文字 (String.Length プロパティで測定) のステータスを更新しようとしました。そして最初の文字は Unicode Character 'LEFT-TO-RIGHT MARK' (U+200E) でした。したがって、このテキストはそのまま TwitterStatus.Update(..) に渡されました。Twitterizer のソースを少しデバッグしたところ、oauth_signature(=hash) が正しく計算されていないことに気付きました。oauth_signature は、実際に要求された別の URL から生成されました。このエラーが発生する理由と時期を明確にしておらず、おそらく今後数日でさらに情報を書きます.

UPDATE 3 新しいバージョンの Twitterizer (2.3.3) で同じメッセージを投稿しようとしましたが、エラーは発生しませんでした。問題が消えました。

これは、ツイートを投稿するために使用しているコードです。

OAuthTokens tokens = new OAuthTokens();
tokens.AccessToken = ConfigurationManager.AppSettings["twitterAccessToken"];
tokens.AccessTokenSecret = ConfigurationManager.AppSettings["twitterAccessTokenSecret"];
tokens.ConsumerKey = ConfigurationManager.AppSettings["twitterAutoPosterConsumerKey"];
tokens.ConsumerSecret = ConfigurationManager.AppSettings["twitterAutoPosterConsumerSecret"];

string text = "Some text";

TwitterResponse<TwitterStatus> tweetResponse = TwitterStatus.Update(tokens, text);
if (tweetResponse.Result == RequestResult.Success)
{
    // Tweet posted successfully!
    _log.InfoFormat("Posted a tweet #{0}.", tweetResponse.ResponseObject.Id);
}
else
{
    _log.ErrorFormat("Error occured while posting a tweet. Result = {0}. ErrorMessage = {1}",
        tweetResponse.Result, tweetResponse.ErrorMessage);
}
4

2 に答える 2

1

メッセージを確認してください。メッセージにアポストロフィ (') が含まれている場合は、に置き換えてください&amp;#39;

&amp;#39;5文字としてカウントされることに注意してください。

アポストロフィは、twitter に送信するリクエスト パッケージに影響を与え、twitter が正しくトークンを取得できないため、「OAuth で認証できませんでした」というエラーが発生すると思います。

于 2012-02-01T02:23:57.230 に答える
0

私も同じ問題を抱えていました。PHP 5.3.1はローカルサーバーで実行され、PHP4.3.2は本番サーバーで実行されました。以下から取得したGoogleCodeのOAuthライブラリを使用しています。

http://code.google.com/p/oauth/source/browse/#svn%2Fcode%2Fjavascript

PHPプロキシプログラムがブラウザのjavascriptコードから受け取ったOAuthヘッダーを調べました。私のローカルサーバーでは、

OAuth realm = ""、oauth_consumer_key = "XXX"、oauth_token = "XXX"、oauth_version = "1.0"、oauth_timestamp = "1314956434"、oauth_nonce = "mF7Tof"、oauth_signature_method = "HMAC-SHA1"、oauth_signature = "DbuaiDeMhMYNZ5BaQmO %3D "

本番サーバーでは、上記のすべての二重引用符、つまり'\ "'がエスケープされました。そこで、str_replace関数を使用して、エスケープされた二重引用符をエスケープされていない引用符に置き換えました。その後、本番サーバーでも同じように機能しました。原因は、PHP5.3.1とPHP4.3.2の二重引用符の処理方法の違いです。エスケープされた二重引用符により、「OAuthで認証できませんでした」というエラーが発生しました。

于 2011-09-02T10:29:10.553 に答える