5

WP7 アプリで TweetSharp と Hammock ライブラリを使用して Twitpic に写真をアップロードしようとしています。写真をアップロードするコードは次のとおりです。

// Clients.srv is a TweetSharp TwitterClient
RestRequest req = Clients.srv.PrepareEchoRequest();
RestClient client = new RestClient { Authority = "http://api.twitpic.com/", VersionPath = "2" };

req.AddFile("media", e.OriginalFileName, e.ChosenPhoto);
req.AddField("key", "hidden");
req.AddField("message", Tweet.Text);
req.Path = "upload.xml";
req.Method = Hammock.Web.WebMethod.Post; 

client.BeginRequest(req, (RestCallback) uploadCompleted);

コードの説明: これは、photoPickerTask の呼び出しに由来しe、写真の名前とファイル (IO.Stream オブジェクト) を含むイベント引数です。これらすべてが動作することが確認されています。

問題は、Twitpic の応答が常に「認証できませんでした: ヘッダーが Twitter によって拒否されました」ということです。TwitterClient は動作し、OAuth トークンは問題ありません。API キーは正しいです。PrepareEchoRequest()エラーが自分のコードによるものか、TweetSharp関数によるものか、Twitpicによるものかはわかりません。誰でも私に手がかりを与えることができますか?

4

1 に答える 1

4

今日も何時間も同じ (および同様の) トラブルに見舞われています。バージョンパスを1に変更し、すべてのトークンをリクエストに入力することで、最終的に機能するようになりました(twitpic docoで説明されているように)。昨日この組み合わせを試してみたと思ったのですが、今はうまくいっているので、指がAPIを横切っている間は更新されません。

    TwitterService service = new TwitterService(consumerKey, consumerSecret);
    service.AuthenticateWith(accessToken, accessTokenSecret);

    if (thumbnail != null)  // an image post - go through twitpic
    {
        MemoryStream ms = new MemoryStream();
        thumbnail.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
        ms.Seek(0, SeekOrigin.Begin);

        // Prepare an OAuth Echo request to TwitPic
        RestRequest request = service.PrepareEchoRequest();
        request.Path = "uploadAndPost.xml";
        request.AddField("key", twitpicApiKey);
        request.AddField("consumer_token", consumerKey);
        request.AddField("consumer_secret", consumerSecret);
        request.AddField("oauth_token", accessToken);
        request.AddField("oauth_secret", accessTokenSecret);
        request.AddField("message", "Failwhale!");
        request.AddFile("media", "failwhale" + Environment.TickCount.ToString(), ms, "image/jpeg");

        // Post photo to TwitPic with Hammock
        RestClient client = new RestClient { Authority = "http://api.twitpic.com/", VersionPath = "1" };
        RestResponse response = client.Request(request);

        return response.Content;
    }
于 2011-12-28T08:35:01.170 に答える