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