使用tweepy在流媒体API中搜索多个术语,并知道哪个是命中的



我试图使用tweepy来构建推文数据集。现在,我有一个流运行一个搜索词,但我想使用库来搜索不同的查询在同一时间。我知道我能够为twitterStream.filter函数提供一个列表,而不仅仅是"迪士尼"术语,但是我不确定如何才能看到哪个tweet是在这种情况下返回哪个术语的结果。

下面的代码的一个很好的扩展是搜索["Disney", "Pandabears", "Polarbears"]而不是仅仅"Disney",并知道哪个查询返回命中?

原则上我可以想到两种方法:

1:在结果tweet中搜索搜索词并相应地标记它们。然而,这并不能真正解决问题,因为tweet可能包含两个搜索词。这里描述

2:运行尽可能多的流,因为有搜索条件。然而,我不确定API允许同一个应用程序一次有多个活动流?

from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener
import time
ckey = "secret"
csecret="secret"
atoken="secret"
asecret="secret"
searchterm = "Disney"
class listener(StreamListener):
    def on_data(self, data):
        try:
            tweet = data.split(',"text":"')[1].split('","source')[0] 
            saveThis = str(time.time())+"::%::"+tweet    
            saveFile = open("tweets.csv", "a")
            saveFile.write(saveThis)
            saveFile.write("n")
            saveFile.close()
            return True
        except BaseException, e:
            print "Failed on data", str(e)
            time.sleep(10) 
            return True # Don't kill the stream
    def on_error(self, status):
        print status
        time.sleep(5)
        return True # Don't kill the stream
try:
    auth = OAuthHandler(ckey, csecret)
    auth.set_access_token(atoken, asecret)
    twitterStream = Stream(auth, listener())
    twitterStream.filter(track=[searchterm])
except Exception:
    print "Failed in auth or streaming"

有解决这个问题的"好"方法吗?

我选择了选项1,使用多个搜索词运行单个流,手动检查每条tweet的匹配…

tweet = "I am a tweet"
terms = ["am","tweet"]
matches = []
for i, term in enumerate(terms):
                    if( term.lower() in tweet.lower() ):
                        matches.append(i)
matches
Out: [0, 1]

…并将结果匹配列表添加到流侦听器返回的对象中。当然,这会导致更大的流,增加速率限制的危险。

最新更新