2017-06-22 14 views
0

私は問題があり解決できない。 Stream twitter tweetsにpythonスクリプトを書いた。 私の問題は、指定されたリストの各単語につき5つのつぶやきを読む必要があることです。以下はtweepyストリームの各項目のつぶやき数を設定する

コードです:ここでは

class TweetListener(StreamListener): 

    def on_status(self,status):   
     print "TWEET ARRIVED!!!" 
     print "Tweet Text : %s" % status.text 
     print "Author's name : %s" % status.author.screen_name 
     print "Time of creation : %s" % status.created_at 
     print "Source of Tweet : %s" % status.source  
     time.sleep(10)  
     return True 

    def on_error(self, status):   
     print status 
     if status == 420: 
      print "Too soon reconnected, Exiting!!" 
      return False 
     sys.exit() 


def search_tweets(): 
    twitterStream = Stream(connect().auth, TweetListener())   
    twitterStream.filter(track=['Cricket','Maths','Army','Sports'],languages = ["en"],async=True) 

私は取得しています何

陸軍&スポーツ、クリケットのための5件のツイートそれぞれ、数学を取得する必要があります上記の要素のツイートの数が無限です。

すべてのヘルプは高く評価されます。

ありがとうございました&

+0

返されたつぶやきの数を制限するコードは何ですか? – JohanL

+0

ああややあります。私はそれぞれのアイテム、例えば4つまたは5つのつぶやきのそれぞれについて限定された数のツイートが必要です –

+0

ストリーミングの全体のアイデアは、つぶやきの無限の数を取得することです。あなたはあなたの心の欲望にツイートを収穫したらストリームをオフにするか、RESTful APIを使用して、(過去の)ツイートをそのように取得する必要があります – teknoboy

答えて

0
class TweetListener(StreamListener): 
    def __init__(self, list_=None,dict_= None): 
     self.keys_= list_ 
     self.dict = dict_ 

    def on_status(self, status): 
     str_ = status.text.lower()   
     for key in self.dict.keys(): 
      if key.lower() in str_.lower(): 
       if self.dict[key] <= 0: 
        return True 
       else: 
        self.dict[key] -=1 
        self.performAction(key,status)          

     if all(value == 0 for value in self.dict.values()): 
      return False 

    def on_error(self, status):   
     print status 
     if status == 420: 
      print "Too soon reconnected . Will terminate the program" 
      return False 
     sys.exit()  


def create_dict(list_): 
    no_of_tweets = 5 
    dict_ = {k:no_of_tweets for k in list_ } 
    return dict_ 


def search_tweets(): 
    search_word = ['Cricket','Maths','Army','Sports']  
    twitterStream = Stream(connect().auth, TweetListener(list_=search_word , dict_=create_dict(search_word))) 
    twitterStream.filter(track=search_word ,languages = ["en"],async=True) 

ここで私は、私はキーで辞書作成、つぶやきが検索されるすべての必要な言葉でリストを初期化します。word_to_be_searchedとしての価値を:create_dict(list_)機能でcount_as_5、クリケットのような:5、数学:5、陸軍:5、スポーツ:5など。それから、辞書と一緒にリストをTweetListenerクラスに渡します。

私はon_status関数をオーバーライドしてツイートを取得し、そのツイートを自分の辞書のキーフィールドと比較します。一致が存在することは明らかです。この場合、カウンタ(ここではカウンタ)を1減らします。 すべての値が0になると、ループを中断してスレッドを閉じるfalseを返します。

[キーに対応する任意の値がゼロになった場合、それは、ツイートの必要なNOが既に捕捉されるので、その言葉にそれ以上ツイートを続行しないであろうことを示している。】

そしてperformAction(key、status) function {key =検索された単語の1つとstatus = tweetが捕捉されました}私は必要な作業を行います。

関連する問題