3

私は、自分の好みを知り、自動的に友人や興味深いつぶやきを見つけて関連情報を提供するシンプルなTwitterクライアントを作ろうと思っています。twitterからメッセージが流れ続ける

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

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

私は同様のプロジェクトについて学ぶことにも興味があります。

答えて

2

私はtweepyを使ってTwitter APIにアクセスし、彼らが提供するpublic streamを聞いています。これはすべてのつぶやきの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でのデフォルトのタイムアウト動作に問題があったと考えているので、注意してください。 TweepyのBasicAuthHandlerが廃止されました

import socket 
socket.setdefaulttimeout(timeout) 
2

あなたは世界のtwitterタイムラインにアクセスすることはできないと思います。しかしあなたは確かにあなたの友人のつぶやきと再生リストを見ることができます、私はTwitter4Jライブラリを使用することをお勧めしますhttp://twitter4j.org/en/index.html

私は間違っているかもしれない、getPublicTimeline()あなたが望むかもしれない。

1

Twitterはちょうどこの目的のためにstreaming APIです。彼らは、あなたが記述しているように、「プッシュ」の方法で継続的に更新され、すべてのメッセージの小さな無作為サンプルを提供します。あなたが何らかの高貴な目的のためにこれをしているなら、あなたはrequest accessをTwitterからより大きなサンプルにすることができます。

APIドキュメントから、あなたはstatuses/sampleたい:すべての公共のステータスのランダム サンプルを返し

ステータス/サンプル

を。 の既定のアクセスレベルである 'Spritzer' は、 Firehoseのうちのごく一部を占めており、おおよそすべての公開ステータスのうちの1%を占めています。 「Gardenhose」 アクセスレベルは、データマイニングにさらに適した割合である を提供し、 大きな割合を統計的に 有意なサンプルとすることを望む研究アプリケーションを提供します。現在のところ、 ガーデンホースは、大まかに言って、すべての一般の状態の10% を返します。 これらの比率は、 予告なしの調整の対象となります。トラフィックは、 となります。

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

方法(複数可):

パラメータGET:数、区切り

戻り値:

個人的にステータス要素のストリームは、私はいくつかの成功を収めてきましたPythonライブラリtweepyを使用してストリーミングAPIを使用します。

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) 

。ここに新しいコードがあります。楽しむ!

関連する問題