Twitter API:简单的状态更新(Python)
我一直在找方法用Python客户端更新我的Twitter状态。因为这个客户端只需要访问一个Twitter账号,所以根据http://dev.twitter.com/pages/oauth_single_token的说法,应该可以用一个预先生成的oauth_token和密钥来实现。
不过,示例代码似乎不太好用,我总是收到“无法验证你”或者“签名不正确”的错误信息。
现在有很多不同的python-twitter库(而且并不是所有的都更新了),如果有人能推荐一个目前能正常处理POST请求的库,或者分享一些示例代码,我会非常感激!
更新: 我试过Pavel的解决方案,只要新消息只有一个字,它就能正常工作,但只要消息里有空格,我就会收到这个错误:
status = api.PostUpdate('hello world')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python26\lib\site-packages\python_twitter\twitter.py", line 2459, in PostUpdate
self._CheckForTwitterError(data)
File "C:\Python26\lib\site-packages\python_twitter\twitter.py", line 3394, in _CheckForTwitterErro
r
raise TwitterError(data['error'])
python_twitter.twitter.TwitterError: Incorrect signature
不过,如果更新的内容只有一个字,那就没问题:
status = api.PostUpdate('helloworld')
{'status': 'helloworld'}
你知道这可能是什么原因吗?
非常感谢,
Hoff
4 个回答
现在,Python-Twitter的最新文档位置在GitHub上(你可以通过谷歌代码页面找到这个链接)。
你不再需要使用python-twitter自带的命令行工具来获取完整的访问令牌和密钥,只需在https://dev.twitter.com上注册你的应用,就可以请求这些信息。
一旦你拿到了四个不同的凭证值,第一件要做的事情就是通过进行API测试来验证它们:
api = twitter.Api(consumer_key='consumer_key',
consumer_secret='consumer_secret',
access_token_key='access_token',
access_token_secret='access_token_secret')print api.VerifyCredentials()
这段代码会告诉你你的凭证是否有效。如果出现错误,接下来的步骤是将debugHTTP=True传递给Api()调用——这样可以打印出所有的HTTP对话内容,让你看到Twitter的错误信息。
一旦凭证有效,你就可以尝试调用PostUpdate()或者直接使用GetTimeline()。
你可能会对这个链接感兴趣:http://code.google.com/p/python-twitter/
不过,老实说,文档并不存在,而且最后一次更新是在2009年。
我用过一些来自hg的代码:
wget http://python-twitter.googlecode.com/hg/get_access_token.py
wget http://python-twitter.googlecode.com/hg/twitter.py
在经历了(很长的)应用注册过程后,http://dev.twitter.com/pages/auth#register,你应该能得到一个消费者密钥和秘密。这些都是针对每个应用唯一的。
接下来,你需要把这个应用和你的账户连接起来,按照源代码中的说明修改get_access_token.py,然后运行它。这样你就能得到Twitter的访问令牌和秘密了。
>>> import twitter
>>> api = twitter.Api(consumer_key='consumer_key',
consumer_secret='consumer_secret', access_token_key='access_token',
access_token_secret='access_token_secret')
>>> status = api.PostUpdate('I love python-twitter!')
>>> print status.text
I love python-twitter!
对我来说,这个方法是有效的,http://twitter.com/#!/pawelprazak/status/16504039403425792(不确定每个人都能看到)
不过我得说,我不太喜欢这段代码,所以如果我要用的话,我会重写它。
编辑:我把例子做得更清楚了。
我用另一个库解决了这个问题,所以我在这里分享我的解决方案,供大家参考:
import tweepy
# http://dev.twitter.com/apps/myappid
CONSUMER_KEY = 'my consumer key'
CONSUMER_SECRET = 'my consumer secret'
# http://dev.twitter.com/apps/myappid/my_token
ACCESS_TOKEN_KEY= 'my access token key'
ACCESS_TOKEN_SECRET= 'my access token secret'
def tweet(status):
'''
updates the status of my twitter account
requires tweepy (https://github.com/joshthecoder/tweepy)
'''
if len(status) > 140:
raise Exception('status message is too long!')
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN_KEY, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth)
result = api.update_status(status)
return result