使用Tweepy获取位置

时间:2014-08-10 01:28:35

标签: python twitter tweepy

我试图找出如何在显示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,但这不起作用。有什么想法吗?

1 个答案:

答案 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

与上述听众一起飞过。