我正在尝试过滤推特流以获取与银有关的推文以进行情绪分析......
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
任何人都可以提出更有效的过滤技术或帮助解决此错误吗?
答案 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’])
请记住,搜索字词被解析为小写,因此您的大写缩写将匹配不仅仅是大写缩写。