我试图找出如何在显示Twitter用户的位置时输出它的位置。我该怎么做呢?现在我有这个:
from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener
import time
import json
from HTMLParser import HTMLParser
ckey = ''
csecret = ''
atoken = ''
asecret = ''
class listener(StreamListener):
def on_status(self, status):
print status.text
if status.coordinates:
print 'coords:', status.coordinates
if status.place:
print 'place:', status.place.full_name
return True
on_event = on_status
def on_error(self, status):
print status
auth = OAuthHandler(ckey, csecret)
auth.set_access_token(atoken, asecret)
twitterStream = Stream(auth, listener())
twitterStream.filter(track=["twerk"])
编辑:它为最后一行代码提供了错误。我怎么能过滤“twerk”或“miley”这个词
所以如果推文包含单词twerk或miley,它当前正在输出推文,但我想只有在显示时才能得到该推文的坐标。我认为它会像tweet = data.coordinates,但这不起作用。有什么想法吗?
答案 0 :(得分:2)
使用json.loads()
加载JSON作为Python对象时,不要使用字符串操作:
import json
from HTMLParser import HTMLParser
def on_data(self, data):
data = json.loads(HTMLParser().unescape(data))
tweet = data['text']
print tweet
return True
这也使您可以访问其他fields of the Tweet object,例如坐标:
if data['coordinates']:
print data['coordinates']
或地方对象:
if data.get('place'):
print data['place']['full_name']
对于流API,您可能希望不覆盖on_data()
方法,而是使用on_event()
或on_status()
处理程序;默认的on_data()
实现加载JSON并将解析后的Tweepy对象传递给这些处理程序:
class listener(StreamListener):
def on_status(self, status):
print status.text
if status.coordinates:
print 'coords:', status.coordinates
if status.place:
print 'place:', status.place.full_name
return True
on_event = on_status
def on_error(self, status):
print status
我看到的消息如下:
Ainda sonho com uma apresentação de twerk ao vivo #8BieberManiaNaZonaLivreFM #MTVHottest Justin Bieber
coords: {u'type': u'Point', u'coordinates': [-49.319543, -16.679431]}
place: Goiânia, Goiás
与上述听众一起飞过。