Python- twitterstream。过滤元组错误

时间:2014-10-28 11:05:54

标签: python twitter tweepy

我正在尝试过滤推特流以获取与银有关的推文以进行情绪分析......

    class listener(StreamListener):
    def on_data(self, data):
        try:
            tweet = json.loads(data)
            print (tweet['created_at'], tweet['text'])

            alchemyapi = AlchemyAPI()
            response = alchemyapi.sentiment('text', tweet['text'])
            print "Sentiment: ", response["docSentiment"]["type"]

            dictionary={}
            dictionary['tweet'] = tweet['text']
            dictionary['id'] = tweet['id']
            dictionary['created_at'] = tweet['created_at']
            dictionary['sentiment'] = response["docSentiment"]["type"]
            json_data = json.dumps(dictionary)

            saveFile = open('silverTweetFeed.json','a') #a=append
            saveFile.write(json_data)
            saveFile.write('\n')
            saveFile.close()
            return True

        except BaseException, e: #baseException because there may be a rate limit or internet drop
            print 'failed ondata,',str(e)
            time.sleep(5)

    def on_error(self, status):
        print status

auth = OAuthHandler(ckey, csecret)
auth.set_access_token(atoken,asecret)
twitterStream = Stream(auth, listener())
twitterStream.filter(track=["silver" and "CFD" or "invest" or  "bloomberg" or "DFT" or "rally"or
       "hike" or "investors" or "demand" or "interest rate" or "inflation" or
       "bullion" or "trading" or  "investment" or "market"])
twitterStream.filter(languages=["en"])

但是当我运行它时会抛出错误......

/PythonFiles/silverScript.py", line 49, in <module>
"investors", "demand", "interest rate", "inflation", "bullion", "trading", "investment", "market")])
  File "build/bdist.macosx-10.9-intel/egg/tweepy/streaming.py", line 330, in filter
AttributeError: 'tuple' object has no attribute 'encode'
logout

任何人都可以提出更有效的过滤技术或帮助解决此错误吗?

1 个答案:

答案 0 :(得分:0)

这可以做到。 Twitter stream logic与过滤逻辑不同。 ’silver bullion’被解释为’silver’ AND ‘bullion’,而[‘silver’, ‘bullion’]被解释为’silver’ OR ‘bullion’。因此,要过滤所有组合:

twitterStream.filter(track=[‘silver CFD’, ‘silver invest’, ‘silver bloomberg’, ‘silver DFT’, 
                            ‘silver  rally’, ‘silver hike’, ‘silver investors’, ‘silver demand’, 
                            ‘silver interest rate’, ‘silver inflation’, ‘silver bullion’, 
                            ‘silver trading’, ‘silver investment’, ‘silver market’])

请记住,搜索字词被解析为小写,因此您的大写缩写将匹配不仅仅是大写缩写。