1

考虑以下代码:

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

有什么提示吗?我没有线索 ... :-(

4

2 回答 2

2

前 3 个一般要点:

  1. 正如 Paul 所说,Twitter 弃用了他们 API 的许多部分。您应该检查您是否正在使用当前支持的机制。

  2. 官方的 twitter python 文档非常糟糕。最后我检查了一下,它们没有反映任何当前的库或连接协议。将它们用作最后​​的手段。

  3. twitter 推荐的 python 库都已经过时了。许多根本不起作用,大多数都不适用于当前的 API。

我建议您将库切换到 Twython。它得到积极维护并支持当前的 API。还有一些其他积极维护的 Twitter 库。如果某些东西在 2 个月内得到了修补 - 找到另一个库。

查看您的确切代码:

  1. 您的 API 对象未传递任何凭据。IIRC,这在 1.0 API 中是允许的,但 1.1 API 不允许这样做 - 您现在必须使用 API 凭据进行身份验证:

  2. 您应该尝试检查该对象并找出创建 404 的 URL。我猜它是一个 1.0 端点。您可能在本地使用更新版本的“twitter”包(无论如何,该名称空间中有多个),但在服务器上使用不同的包。您应该检查每台机器上的版本。

  3. 您的代码应该捕获 HTTP 错误。Twitter 的 API 非常好,可以使用 HTTP 状态代码作为错误消息 ( https://dev.twitter.com/docs/error-codes-responses ) 的一部分,并且还会在标头上发送信息。这通常可以准确地告诉您发生了什么。像 Twython 这样的库会为您完成大部分工作。

不过,您提供的代码不可能导致该错误 - 所以我不知道发生了什么。

不传递凭据应该生成 400;错误的凭据是 401。速率限制是 420、429。阻塞可能是 404 或 420。

如果我不得不猜测 - 在本地你有一个在 1.1 API 端点之后的包,但是你的服务器有一个在 1.0 之后的包的版本 - 它不再存在。

于 2012-10-16T19:05:21.867 回答
1

Twitter 最近弃用了他们的旧 API。有没有可能你还在使用它?

请注意,更改应该要求您更新到新的基于 OAuth 的身份验证模型。如果您的网站正在访问单个帐户的推文,您可以使用https://dev.twitter.com/docs/auth/oauth/single-user-with-examples中的流程来避免提示用户访问。

于 2012-10-16T18:35:44.797 回答