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. 公式のツイッター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.1APIエンドポイント以降のパッケージがありますが、サーバーには1.0以降のパッケージのバージョンがあります-これはもう存在しません。

于 2012-10-16T19:05:21.867 に答える
1

Twitter は最近、古い API を非推奨にしました。もしかしてまだ使ってる?

この変更により、新しい OAuth ベースの認証モデルに更新する必要があることに注意してください。サイトが 1 つのアカウントのツイートにアクセスしている場合、https://dev.twitter.com/docs/auth/oauth/single-user-with-examplesのプロセスを使用して、ユーザーにアクセスを求めるプロンプトを回避できます。

于 2012-10-16T18:35:44.797 に答える