C#で記述された.NETアプリから、OAuthを使用してTwitPicに写真をアップロードしています。
oAuthのものは少し注意が必要です。それを処理するための2ビットの.NETコードを見つけましたが、どちらにも満足できませんでした。 DotNetOpenAuthは、私が必要とする以上にかなり重いようでした。(oAuth署名とトークンリクエストを実行したいだけです)。OAuthBase.csコードは、私には混乱していてエレガントではないように見えました。私は6つの文字列パラメーターをメソッドに渡さなければなりませんでした。
だから私はそれを自分で行うためにいくつかのコードを書きました、それはかなり小さく、それはうまくいくようです。「リクエストトークン」を取得するために動作します。これは、認証Webページをポップし、「アクセストークン」を取得するために機能します。また、TwitPicに写真をアップロードすることもできます。
すべてのHTTP応答は200または201として返されます。
アップロードHTTPメッセージは次のようになります。
POST http://api.twitpic.com/2/upload.json HTTP/1.1
Content-Type: multipart/form-data; boundary=48cb9a6d-1f1d-432d-b6e3-307e32e8228a
X-Auth-Service-Provider: https://api.twitter.com/1/account/verify_credentials.json
X-Verify-Credentials-Authorization: OAuth realm="http://api.twitter.com/",
oauth_consumer_key="Dv1er93yKzEMn74hZfPmJA",
oauth_nonce="51fi305k",
oauth_signature="4oWcmZcd%2F%2F81JslJ70xFXFm8%2BQs%3D",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="1292277715",
oauth_token="59152613-z8EP4GoYS1Mgo3E29JfIqBnyTRlruAJs8Bkvs3q0T",
oauth_version="1.0"
Host: api.twitpic.com
Content-Length: 14605
Expect: 100-continue
Connection: Keep-Alive
--48cb9a6d-1f1d-432d-b6e3-307e32e8228a
Content-Disposition: file; name="media"; filename="CropperCapture[10].jpg"
Content-Type: image/jpeg
....
--48cb9a6d-1f1d-432d-b6e3-307e32e8228a
Content-Disposition: form-data; name="key"
twitpic-api-key-here
--48cb9a6d-1f1d-432d-b6e3-307e32e8228a
Content-Disposition: form-data; name="message"
uploaded from Yappy. (at 12/13/2010 5:01:55 PM)
--48cb9a6d-1f1d-432d-b6e3-307e32e8228a--
アップロードから返されるjsonは次のようになります。
{"id":"3f0jeiw5",
"text":"uploaded from Yappy. (at 12\/13\/2010 5:01:55 PM)",
"url":"http:\\/twitpic.com\/3f0jeiw5",
"width":257,
"height":184,
"size":14156,
"type":"jpg",
"timestamp":"Mon, 13 Dec 2010 22:02:06 +0000",
"user":{
"id":54591561,"screen_name":"bfavre"}
}
しかし、問題は、画像をTwitpicにアップロードした後、画像はTwitPicで利用できるのに、関連するメッセージがTwitterに表示されないことです。
何が得られますか?
ランダムなブログ投稿を読んだところ、 TwitPic + oAuthを使用するには、ツイートメッセージを別のHTTPトランザクションでTwitterに直接投稿する必要があります。は?oAuthのメールの目的は、TwitPicが私にツイートを投稿できるようにするなど、消費者が私に代わって何かを行えるようにすることだと思いました。
ヒントはありますか?
編集
私はここでもう少し学んでいます。 2010年5月のこのブログ投稿は、の値を使用すると、 TwitPicがリクエストを受け取ったときにtwitter.comで「verify_credentials.json」を呼び出すようX-Auth-Service-Provider
に指示することを示唆しています。https://api.twitter.com/1/account/verify_credentials.json
本当に私の資格情報を確認しているだけの場合、これはツイートが投稿されない理由を説明します。
投稿はまた、それを交換して置き換えることで、TwitPicを介して委任を使用してTwitterを更新できるようになるhttps://api.twitter.com/1/status/update.json
はずだと示唆しています。しかし、これは前向きな投稿です。この機能を利用するには、Twitter側での作業が必要であると書かれています。
これを行うHTTPメッセージの例はまだ見つかりません。誰?
更新
確認URLをhttps://api.twitter.com/1/status/update.json
署名に変換してPOSTを使用した後、401応答コードを取得します。
{"errors":
[{"code":401,
"message":"Could not authenticate you (header rejected by twitter)."}]
}
これは基本的に、Twitter開発フォーラムで説明されているのと同じ問題です。そのスレッドの最後の提案は、署名計算アルゴリズムが間違っているというものでしたが、私のsigアルゴリズムは他のすべての要求で機能するため、これは正しくないと思います。