3

私の好みを学習し、友人や興味深いツイートを自動的に見つけて関連情報を提供するシンプルな Twitter クライアントを作成してみたいと思います。

開始するには、ランダムな Twitter メッセージの適切なストリームを取得する必要があります。これにより、いくつかの機械学習アルゴリズムをテストできます。

これにはどの API メソッドを使用すればよいですか? メッセージを取得するには定期的にポーリングする必要がありますか? または、メッセージが公開されたときに Twitter でメッセージをプッシュする方法はありますか?

また、同様のプロジェクトについても知りたいと思います。

4

4 に答える 4

2

世界のツイッターのタイムラインにアクセスできないと思います。ただし、友達のツイートや設定リストを見て遊ぶこともできます。Twitter4J ライブラリhttp://twitter4j.org/en/index.htmlを使用することをお勧めします。

私は間違っていたかもしれません.getPublicTimeline()はあなたが望むものかもしれません.

于 2011-06-22T20:36:15.053 に答える
2

私はtweepyを使用して Twitter API にアクセスし、それらが提供するパブリック ストリームをリッスンします。これは、すべてのツイートの 1% のサンプルである必要があります。これが私が自分で使用するサンプルコードです。ストリーミングには引き続き基本的な認証メカニズムを使用できますが、すぐに変更される可能性があります。それに応じて USERNAME 変数と PASSWORD 変数を変更し、Twitter が返すエラー コードを尊重するようにしてください (このサンプル コードは、場合によっては Twitter が必要とする指数バックオフ メカニズムを尊重していない可能性があります)。

import tweepy
import time

def log_error(msg):
    timestamp = time.strftime('%Y%m%d:%H%M:%S')
    sys.stderr.write("%s: %s\n" % (timestamp,msg))

class StreamWatcherListener(tweepy.StreamListener):
  def on_status(self, status):
      print status.text.encode('utf-8')

    def on_error(self, status_code):
      log_error("Status code: %s." % status_code)
      time.sleep(3)
      return True  # keep stream alive

    def on_timeout(self):
      log_error("Timeout.")


def main():
    auth = tweepy.BasicAuthHandler(USERNAME, PASSWORD)
    listener = StreamWatcherListener()
    stream = tweepy.Stream(auth, listener)
    stream.sample()

if __name__ == '__main__':
    try:
      main()
    except KeyboardInterrupt:
      break
    except Exception,e:
      log_error("Exception: %s" % str(e))
      time.sleep(3)

ソケット モジュールのタイムアウトも設定しました。Python のデフォルトのタイムアウト動作に問題があると思われるので、注意してください。

import socket
socket.setdefaulttimeout(timeout)
于 2011-06-27T02:12:38.200 に答える
1

Twitter には、まさにこの目的のためのストリーミング APIがあります。それらは、Twitter に投稿されたすべてのメッセージの小さなランダム サンプルを提供し、説明したように「プッシュ」方式で継続的に更新されます。ある種の崇高な目的でこれを行っている場合は、Twitter からより大きなサンプルへのアクセスを要求できます。

API ドキュメントから、次のことが必要ですstatuses/sample

ステータス/サンプル

すべての公開ステータスのランダム サンプルを返します。デフォルトのアクセス レベルである 'Spritzer' は、Firehose のごく一部 (非常に大ざっぱに言えば、すべてのパブリック ステータスの 1%) を提供します。「Gardenhose」アクセス レベルは、より大きな比率を統計的に有意なサンプルにすることを望むデータ マイニングおよび研究アプリケーションにより適した比率を提供します。現在、Gardenhose は、非常に大まかに、すべてのパブリック ステータスの 10% を返します。これらの割合は、トラフィック量の変化に伴い、予告なしに調整されることに注意してください。

URL: http://stream.twitter.com/1/statuses/sample.json

メソッド: GET

パラメータ: カウント、区切られた

戻り値: ステータス要素のストリーム

個人的には、Python ライブラリtweepyを使用してストリーミング API を使用することに成功しました。

于 2011-06-22T20:39:58.063 に答える
0
import tweepy, sys, time

ckey = ''
csecret = ''
atoken = ''
asecret = ''
def log_error(msg):
    timestamp = time.strftime('%Y%m%d:%H%M:%S')
    sys.stderr.write("%s: %s\n" % (timestamp,msg))

class StreamWatcherListener(tweepy.StreamListener):
  def on_data(self, status):
    try: #Some of the object are deletion of tweet, won't have 'text' in the dict
      print getData['text']
    except Exception, e:
      pass
    #print text.encode('utf-8')
  def on_error(self, status_code):
    log_error("Status code: %s." % status_code)
    time.sleep(3)
    return True  # keep stream alive
  def on_timeout(self):
    log_error("Timeout.")

def main():
  auth = tweepy.OAuthHandler(ckey, csecret)
  auth.set_access_token(atoken, asecret)
  listener = StreamWatcherListener()
  stream = tweepy.Stream(auth, listener)
  stream.sample()

if __name__ == '__main__':
    try:
      main()
    except Exception,e:
      log_error("Exception: %s" % str(e))
      time.sleep(3)

Tweepy の BasicAuthHandler は非推奨です。これが新しいコードセットです。楽しむ!

于 2014-12-15T13:40:46.217 に答える