我正在尝试使用Twitter的API和OAuth发送状态更新(新推文).我正在使用Shannon Whitley .NET代码示例http://www.voiceoftech.com/swhitley/?p=681(在Twitter API文档中推荐).我可以使用OAuth读取(GET),但是当我尝试通过http://twitter.com/statuses/update.xml(使用POST)发送状态更新时,它会返回一个包含以下XML的401:
/statuses/update.xml Read-only application cannot POST
我发誓,我已经建立了我的应用程序使用读取和写入的Twitter的授权页面(HTTP://twitter.com/oauth/authorize)甚至说:"通过应用TweeVerbs.com(发展),希望有能力访问并在Twitter上更新您的数据."
但它仍然说"只读应用程序无法发布".WTF!?
我用谷歌搜索了这个错误信息,直到我脸色发青.我找到了一个地方,说要添加查询字符串paremeter oauth_access_type =写入重定向URL,该URL进入我已经完成的Twitter授权页面,但它仍然给了我401.
如果有帮助,这里是根据OAuth工作流程发送回来的数据:
请求授权令牌:
http://twitter.com/oauth/request_token?oauth_consumer_key = tViV8vAt4cqSKbGdPGWT7Q&oauth_nonce = 2790042&oauth_signature_method = HMAC-SHA1&oauth_timestamp = 1244567068&oauth_version = 1.0&oauth_signature = KzxcXN%2bQ0AJoAJ%2flQfzs8SLjC%2fQ%3d
生成的授权重定向URL:
HTTP://twitter.com/oauth/authorize的oauth_token = EpyBg3nJGOmtmBjRUAsqqaGHARb2F2F2VcccqHkwio&oauth_access_type =写
授权屏幕消息: "应用程序TweeVerbs.com(开发)希望能够在Twitter上访问和更新您的数据.此应用程序计划在将来使用Twitter登录您.如果您想要连接到Sironfoot以外的帐户."
获取访问令牌:
HTTP://twitter.com/oauth/access_token oauth_consumer_key = tViV8vAt4cqSKbGdPGWT7Q&oauth_nonce = 2016804&oauth_signature_method = HMAC-SHA1&oauth_timestamp = 1244567166&组oauth_token = EpyBg3nJGOmtmBjRUAsqqaGHARb2F2F2VcccqHkwio&oauth_version = 1.0&oauth_signature =%2bEVQUxUPLT%2B%2bkfaG0Vq1YJZXcAw%3D
状态更新API调用: URL - HTTP://twitter.com/statuses/update.xml POST数据 - oauth_consumer_key = tViV8vAt4cqSKbGdPGWT7Q&oauth_nonce = 5707692&oauth_signature_method = HMAC-SHA1&oauth_timestamp = 1244567268&组oauth_token = 19130957-nb89DjZhjCAzcbHUa96yRWHqlQFQIJ0AKyXpqnHt1&oauth_version = 1.0&状态=的HelloWorld&oauth_signature = WQA%2bWY0IxveeSJ7G3Ewy3whh1sE%3D
Dunno问题是什么,但我在Twitter上删除了我的应用程序注册(你必须在Twitter上注册应用程序以获取OAuth密钥等),然后重新创建它.现在它工作正常.很奇怪,可能是Twitter搞砸的问题.
我也在使用Tweetsharp(http://tweetsharp.com/),强烈推荐它,它有一个不错的流畅API.注意:切换到Tweetsharp不是修复,我已经切换并遇到了同样的问题,直到我删除并在Twitter上重新创建应用程序注册.
如果您在应用程序设置为"只读访问"模式时授权您的应用程序访问您的Twitter帐户,并且在将应用程序设置更改为"读取和写入访问权限"后您收到"只读应用程序无法发布"错误,那么您必须撤销对https://twitter.com/settings/connections上的应用程序的访问权限,然后重新授权.在您撤销之前,"只读"access_token往往是粘性的.