Twitter API:简单的状态更新(Python)

2 投票
4 回答
8232 浏览
提问于 2025-04-16 08:41

我一直在找方法用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 个回答

2

现在,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()。

9

你可能会对这个链接感兴趣: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(不确定每个人都能看到)

不过我得说,我不太喜欢这段代码,所以如果我要用的话,我会重写它。

编辑:我把例子做得更清楚了。

8

我用另一个库解决了这个问题,所以我在这里分享我的解决方案,供大家参考:

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

撰写回答