1

我从 twitter 流 api 获取推文时遇到问题:https ://stream.twitter.com/1.1/statuses/filter.json

我总是收到错误 401,未经授权。服务器时间正确。

我已经签署了请求。这是我的代码(python):

    token = oauth.Token(key = TWITTER_ACCESS_TOKEN, secret = TWITTER_ACCESS_TOKEN_SECRET)
    consumer = oauth.Consumer(TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET)

    params = {'oauth_version': '1.0', 'oauth_nonce': oauth.generate_nonce(), 'oauth_timestamp': int(time.time())}
    req = oauth.Request(method='POST', parameters=params, url='https://stream.twitter.com/1.1/statuses/filter.json?track=twitter')
    req.sign_request(oauth.SignatureMethod_HMAC_SHA1(), consumer, token)

    urllib2.urlopen(req.to_url())

我究竟做错了什么?

请帮我。

在此先感谢,萨布丽娜

4

1 回答 1

0

您要么提供了不正确的凭据,要么存在导致计算不正确签名的错误。在这里将日志级别设置为 DEBUG 可能会有所帮助。

使用来自twitter 应用程序页面的凭据,我可以毫无问题地使用

from requests_oauthlib import OAuth1Session

key = "<your client key>"
secret = "<your client secret>"
token = "<your token here>"
token_secret = "<token secret>"

twitter = OAuth1Session(key, client_secret=secret,
                        resource_owner_key=token,
                        resource_owner_secret=token_secret)

r = twitter.get(
    'https://stream.twitter.com/1.1/statuses/filter.json?track=twitter',
    stream=True
)

for line in r.iter_lines():
    if line:
        print line

它使用requests-oauthlib。如果上述方法对您有用,那么您的凭据是正确的,问题可能出在您的 oauth 库上。

于 2013-09-13T14:05:27.503 回答