我使用C#编写的.NET应用程序,使用OAuth将照片上传到TwitPic。使用TwitPic + OAuth上传一张照片+鸣叫Twitter(.NET C#) - 为什么没有鸣叫?
oAuth的东西有点棘手。我发现了两个.NET代码来处理它,但是也不满意。 DotNetOpenAuth似乎很沉重,超过我的需要。 (只想做oAuth签名和令牌请求)。代码似乎让我感到困惑和不雅。我必须将6个字符串参数传递给方法,如果我发现任何错误,那么对我来说是祸患。
所以我写了一些代码来自己做,它相当小,它似乎工作。它有效地获取“请求令牌”。它用于弹出授权网页并获取“访问令牌”。它也可以将照片上传到TwitPic。
所有HTTP响应回来为200或201
的upload HTTP message看起来是这样的:
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上。
什么给?
我在a random blog post中读到,使用TwitPic + oAuth需要我在单独的HTTP事务中发布tweet消息,直接发送到Twitter。是吧?我认为oAuth的邮件目的是让消费者代表我做一件事 - 比如允许TwitPic为我发布推文。
任何提示?
编辑
我在这里学习多一点。来自2010年5月的This blog post向我暗示,使用X-Auth-Service-Provider
的值https://api.twitter.com/1/account/verify_credentials.json
告诉TwitPic在twitter.com上调用“verify_credentials.json”,当它获得我的请求时。如果它确实只是验证我的凭据,这可以解释为什么不发布任何推文。
该帖子还建议,交换出来并用https://api.twitter.com/1/status/update.json
替换它应该允许我通过TwitPic更新Twitter与委派。但这是一个前瞻性的帖子 - 它说获得这种能力需要Twitter的工作。
我还没有找到一个HTTP消息的例子。任何人?
UPDATE
验证URL转换为https://api.twitter.com/1/status/update.json
,并使用POST的签名后,我得到一个401响应代码:
{"errors":
[{"code":401,
"message":"Could not authenticate you (header rejected by twitter)."}]
}
这基本上是同样的问题描述here, in the twitter dev forum。该线程末尾的建议是签名计算算法错误,但我认为这是不正确的,因为我的sig算法适用于所有其他请求。
仅供参考 - 我喜欢您的简单OAuth库。我已经做了一个快速修复来处理扩展字符,并将其发布到此处:http://cropperplugins.codeplex.com/discussions/249415 – russau 2011-03-14 03:56:12
只需跟进 - 谢谢,您的更改现在位于OAuth库中;此外,现在有一个DLL,任何人都可以下载。 – Cheeso 2011-04-25 12:23:38