请考虑以下代码:
import twitter
api = twitter.Api()
most_recent_status = api.GetUserTimeline('nemesisdesign')[0].text
我的服务器(nemesisdesign.net)几天前停止了工作。
如果我在自己的机器上尝试相同的代码,它可以正常工作。
这是堆栈跟踪:
>>> most_recent_status = api.GetUserTimeline('nemesisdesign')[0].text
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "build/bdist.linux-i686/egg/twitter.py", line 1414, in GetUserTimeline
json = self._FetchUrl(url, parameters=parameters)
File "build/bdist.linux-i686/egg/twitter.py", line 2032, in _FetchUrl
url_data = opener.open(url, encoded_post_data).read()
File "/usr/local/lib/python2.6/urllib2.py", line 397, in open
response = meth(req, response)
File "/usr/local/lib/python2.6/urllib2.py", line 510, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/local/lib/python2.6/urllib2.py", line 435, in error
return self._call_chain(*args)
File "/usr/local/lib/python2.6/urllib2.py", line 369, in _call_chain
result = func(*args)
File "/usr/local/lib/python2.6/urllib2.py", line 518, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 404: Not Found
任何提示?我不知道......: - (
答案 0 :(得分:2)
前3个要点:
如Paul所说,Twitter弃用了其API的许多部分。您应该检查是否使用了当前支持的机制。
官方的Twitter python文档已经不是很糟糕了。最后我检查过,它们没有反映任何当前的库或连接协议。使用它们作为最后的手段。
Twitter推荐的python库都已经过时了。许多根本不起作用,大多数都不适用于当前的API。
我建议您将库切换到Twython。它主动维护并支持当前的API。还有一些其他积极维护的推特库。如果在2个月内修补了一些东西 - 找另一个图书馆。
查看您的确切代码:
您的API对象未传入任何凭据。 IIRC,这在1.0 API中是允许的,但1.1 API不允许这样做 - 您必须立即使用API凭证进行身份验证:
您应该尝试检查该对象并找出创建404的URL。我猜它是一个1.0端点。您可能在本地使用更新版本的“twitter”软件包(无论是什么,在该命名空间中有多个),但在服务器上使用的是另一个版本。你应该检查每台机器上的版本。
您的代码应该捕获HTTP错误。 Twitter的API非常好,可以使用HTTP状态代码作为错误消息(https://dev.twitter.com/docs/error-codes-responses)的一部分,并且还会在标头上发送信息。这可以告诉你究竟发生了什么。像Twython这样的图书馆为您做了大部分工作。
你提供的代码虽然不会导致错误 - 所以我不知道发生了什么。
不传入凭据应生成400;错误的凭证a 401.速率限制是420,429。阻止可能是404或420.
如果我不得不猜测 - 在本地你有一个在1.1 API端点之后的软件包,但是你的服务器有一个1.0之后的软件包版本 - 不再存在。
答案 1 :(得分:1)
注意,更改应要求您更新到新的基于OAuth的身份验证模型。如果您的网站正在访问单个帐户的推文,则可以使用https://dev.twitter.com/docs/auth/oauth/single-user-with-examples中的流程来避免提示用户进行访问。