Tweepy过滤器中的逻辑运算符

时间:2014-03-11 23:36:36

标签: python filter tweepy

我希望能够跟踪包含某组词语的推文,而不是其他推文。例如,如果我的过滤器是:" taco" AND("鸡肉" OR"牛肉")。

它应该返回这些推文:

-I am eating a chicken taco.
-I am eating a beef taco.

它不应该返回这些推文:

-I am eating a taco.
-I am eating a pork taco.

以下是我目前正在运行的代码:

from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener
import time
import json

# authentication data- get this info from twitter after you create your application
ckey = '...'                # consumer key, AKA API key
csecret = '...'             # consumer secret, AKA API secret
atoken = '...'   # access token
asecret = '...'     # access secret

# define listener class
class listener(StreamListener): 

    def on_data(self, data):
        try:
            print data   # write the whole tweet to terminal
            return True
        except BaseException, e:
            print 'failed on data, ', str(e)  # if there is an error, show what it is
            time.sleep(5)  # one error could be that you're rate-limited; this will cause the script to pause for 5 seconds

    def on_error(self, status):
        print status

# authenticate yourself
auth = OAuthHandler(ckey, csecret)
auth.set_access_token(atoken, asecret)
twitterStream = Stream(auth, listener())
twitterStream.filter(track=["taco"])  # track what you want to search for!

代码的最后一行是我挣扎的部分;如果我使用:

twitterStream.filter(track=["taco","chicken","beef"])

它将返回包含三个单词中任意一个的所有推文。我尝试过的其他事情,例如:

 twitterStream.filter(track=(["taco"&&("chicken","beef")])

返回语法错误。

我对Python和Tweepy都很陌生。 thisthis似乎都是类似的查询,但它们与同时跟踪多个术语有关,而不是跟踪包含术语的推文子集。我还没有找到tweepy documentation中的任何内容。

我知道另一种选择是跟踪所有包含" taco"然后过滤"鸡肉"或"牛肉"进入我的数据库,但是我担心如果我进行一般性搜索然后在Python中过滤掉它,那么就会遇到1%流速限制,所以我不想只在我的数据库中流式传输来自Twitter的第一名。

提前致谢 -

萨姆

1 个答案:

答案 0 :(得分:11)

Twitter不允许您非常精确地匹配关键字。但是,track parameter documentation表示关键字中的空格与逻辑ANDS相同。您指定的所有术语都是“OR”。

因此,要实现"taco" AND ("chicken" OR "beef")示例,您可以尝试参数[taco chickentaco beef]。这将匹配包含单词tacochicken,或tacobeef的推文。但是,这不是一个完美的解决方案,因为包含tacochickenbeef的推文也会匹配。