获取我最新推文的Python脚本停止在我的服务器上运行

时间:2012-10-15 14:25:02

标签: python twitter python-twitter

请考虑以下代码:

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

任何提示?我不知道......: - (

2 个答案:

答案 0 :(得分:2)

前3个要点:

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

  2. 官方的Twitter python文档已经不是很糟糕了。最后我检查过,它们没有反映任何当前的库或连接协议。使用它们作为最后的手段。

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

  4. 我建议您将库切换到Twython。它主动维护并支持当前的API。还有一些其他积极维护的推特库。如果在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这样的图书馆为您做了大部分工作。

    4. 你提供的代码虽然不会导致错误 - 所以我不知道发生了什么。

      不传入凭据应生成400;错误的凭证a 401.速率限制是420,429。阻止可能是404或420.

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

答案 1 :(得分:1)

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

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