【问题标题】:Python Twitter API trying to retrieve tweet but error: AttributeError: 'int' object has no attribute 'encode'Python Twitter API 试图检索推文但出现错误:AttributeError: 'int' object has no attribute 'encode'
【发布时间】:2017-02-22 23:34:33
【问题描述】:

为什么我得到一个 AttributeError: 'int' object has no attribute 'encode'? 我正在尝试使用 Python 上的 Twitter API 检索推文。完整回溯:

Traceback (most recent call last):
  File "C:/Python27/lol.py", line 34, in <module>
    headers = req.to_header()
  File "build\bdist.win-amd64\egg\oauth2\__init__.py", line 398, in to_header
    params_header = ', '.join(header_params)
  File "build\bdist.win-amd64\egg\oauth2\__init__.py", line 397, in <genexpr>
    header_params = ('%s="%s"' % (k, v) for k, v in stringy_params)
  File "build\bdist.win-amd64\egg\oauth2\__init__.py", line 396, in <genexpr>
    stringy_params = ((k, escape(v)) for k, v in oauth_params)
  File "build\bdist.win-amd64\egg\oauth2\__init__.py", line 163, in escape
    s = s.encode('utf-8')
AttributeError: 'int' object has no attribute 'encode'

下面是我正在使用的代码。

import oauth2
import time
import urllib2
import json
url1="https://api.twitter.com/1.1/search/tweets.json"
params = {
    "oauth_version": "1.9.0",
    "oauth_nonce": oauth2.generate_nonce(),
    "oauth_timestamp": int(time.time())
    }

consumer = oauth2.Consumer(key="*********", secret="*********")
token = oauth2.Token(key="*********", secret="*********")

params["oauth_consumer_key"] = consumer.key
params["oauth_token"] = token.key

for i in range(1):
    url = url1
    req = oauth2.Request(method="GET", url=url, parameters=params)
    signature_method = oauth2.SignatureMethod_HMAC_SHA1()
    req.sign_request(signature_method, consumer, token)
    headers = req.to_url()
    print headers
    print url

for i in range(1):
    url = url1
    params["q"] = "pictorial"
    params["count"] = 2
    req = oauth2.Request(method="GET", url=url, parameters=params)
    signature_method = oauth2.SignatureMethod_HMAC_SHA1()
    req.sign_request(signature_method, consumer, token)
    headers = req.to_header()
    url = req.to_url()
    response = urllib2.Request(url)
    data = json.load(urllib2.urlopen(response))
    if data["statuses"] == []:
        print "end of data"
        break
    else:
        print data

如果我将 int(time.time()) 更改为 str(time.time()) 我收到以下错误:

Traceback (most recent call last):
  File "C:/Python27/lol.py", line 37, in <module>
    data = json.load(urllib2.urlopen(response))
  File "C:\Python27\lib\urllib2.py", line 154, in urlopen
    return opener.open(url, data, timeout)
  File "C:\Python27\lib\urllib2.py", line 437, in open
    response = meth(req, response)
  File "C:\Python27\lib\urllib2.py", line 550, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Python27\lib\urllib2.py", line 475, in error
    return self._call_chain(*args)
  File "C:\Python27\lib\urllib2.py", line 409, in _call_chain
    result = func(*args)
  File "C:\Python27\lib\urllib2.py", line 558, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 400: Bad Request

【问题讨论】:

  • 哪一行抛出异常?请编辑您的问题以包含完整的回溯。
  • 添加了完整的回溯:)

标签: python api twitter


【解决方案1】:
"oauth_timestamp": int(time.time())

这里你使用int,但该字段必须是一个字符串。

【讨论】:

  • 我试过了,但还是不行。在帖子中添加了完整的回溯:) :)
  • 您现在遇到了不同的错误。 查看您发送的值...
  • str(time.time()) 不会生成您需要发送的正确字符串。试试print int(time.time())print str(time.time())。了解您需要做什么,而不是反复试验。
猜你喜欢
  • 2021-11-08
  • 2022-01-19
  • 2018-02-05
  • 2023-02-18
  • 2013-09-11
  • 1970-01-01
  • 2022-12-01
  • 2022-12-03
  • 2020-07-25
相关资源
最近更新 更多