Tweepy Streaming API 为启用地理的推文上的坐标返回“无”

Posted

技术标签:

【中文标题】Tweepy Streaming API 为启用地理的推文上的坐标返回“无”【英文标题】:Tweepy Streaming API returning "None" for coordinates on geo-enabled tweets 【发布时间】:2013-05-27 21:04:38 【问题描述】:

我正在使用 Tweepy 访问流 API。我可以使用下面的代码获得结果,但对于 Geo Enabled 值为“True”的推文,我得到的坐标返回值为“False”。怎么会这样?我是否需要解码为 status.coordinates 返回的 JSON 对象?

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

consumer_key="XXX"
consumer_secret="XXX"

access_token="XXX"
access_token_secret="XXX"

db=MySQLdb.connect(host='localhost', user='XXX', passwd='XXX', db='twitter')
db.set_character_set('utf8')

Coords = dict()
Place = dict()
PlaceCoords = dict()
XY = []
curr=db.cursor()

class StdOutListener(StreamListener):
    """ A listener handles tweets that are the received from the stream.
    This is a basic listener that inserts tweets into MySQLdb.
    """
    def on_status(self, status):

        print "Tweet Text: ",status.text

        text = status.text

        print "Time Stamp: ",status.created_at

        print "Time Stamp: ",status.created_at

        print "Source: ",status.source

        source = status.source

        print "Author: ",status.user.screen_name

        author = status.user.screen_name

        print "Name: ",status.user.name

        name = status.user.name

        print "Time Zone: ",status.user.time_zone

        time_zone = status.user.time_zone

        print "User Language: ",status.user.lang

        user_language = status.user.lang

        print "Followers: ",status.user.followers_count

        followers = status.user.followers_count

        print "User Description: ",status.user.description

        user_description = status.user.description

        print "Geo Enabled: ",status.user.geo_enabled

        geo_enabled = status.user.geo_enabled

        print "Friends: ",status.user.friends_count

        friends = status.user.friends_count

        print "Retweets: ",status.retweet_count

        retweets = status.retweet_count

        print "Location: ",status.user.location

        location = status.user.location

        print "ID: ",status.user.id_str

        user_id = status.user.id_str

        print "Coordinates: ",status.coordinates

        coordinates = status.coordinates

        print "Place: ",status.place

        place = status.place

这是一个示例结果输出:

推文文字:@aranone aran tu eres el mejor soy tu fanatico 1 me gusta tu musica.hey pana sique asi q vay bn te deseo lo mejor bro)

时间戳:2013-05-30 23:36:38

时间戳:2013-05-30 23:36:38

来源:网络

作者:juandvd_96

姓名:胡安·大卫·罗梅罗

时区:大西洋时间(加拿大)

用户语言:es

关注者:365

用户描述:hola soy juan david... soy una chico muy 爱慕... y soy muy fekiz...

地理启用:是的

朋友:1857

转推:0

地点:veezuela maracaibo

ID:481513551

坐标:无

地点:无

干杯, BD

感谢您的澄清。我刚才正在查看监听器,并注意到一条推文,其中填充了坐标但作为 json 对象。我正在将推文写入 mysql 数据库,因为它们是流式传输的,似乎带有坐标信息的推文没有插入到数据库中。不确定 SQL 语句周围的错误是针对第一条推文还是第二条推文,发生错误的两列都设置为“varchar”值。这是流式传输的结果:

Tweet 文字:Vi 10 minutos y no pude ver mas。大豆超级 cagona,dios。 Vay a verotra。

时间戳:2013-06-04 01:08:57

时间戳:2013-06-04 01:08:57

来源:网络

作者:爱伦瓦利

姓名:Λili

时区:圣地亚哥

用户语言:es

关注者:384

用户描述:创造你的现实,否则它将为你创造

http://instagram.com/ailenvalli

地理启用:是的

好友数:338

转推:0

地点:704 East Broadway ▲ 1966

ID:200264965

坐标:无

地点:无

firehose_geo.py:87:警告:不正确的字符串值:第 1 行的列“名称”的“\xCE\x9Bili”

(文本,s​​tatus.created_at,status.created_at,来源,作者,姓名,时区,用户语言,关注者,用户描述,地理启用,朋友,转发,位置,用户ID,坐标,地理)) firehose_geo.py:87:警告:不正确的字符串值:第 1 行的“位置”列的“\xE2\x96\xB2 19...”

(文本、status.created_at、status.created_at、来源、作者、姓名、时区、用户语言、关注者、用户描述、geo_enabled、朋友、转发、位置、user_id、坐标、地理位置))

Tweet Text:我有一种感觉,沃尔玛正在准备从我的钱包中取出一大块。健康食品太贵了。

时间戳:2013-06-04 01:42:00

时间戳:2013-06-04 01:42:00

来源:android 版 Twitter

作者:KaylaRenae21

姓名:†Kayla Renae'

时区:中部时间(美国和加拿大)

用户语言:zh

关注者:300

用户描述:我喜欢做的事情在城市里找不到。给我一根鱼竿,我会一整天都不在。

地理启用:是的

朋友:437

转推:0

地点:俄克拉荷马州

ID:282414509

坐标:'type': 'Point', 'coordinates': [-96.6623549, 34.7918959]

地点:'type': 'Point', 'coordinates': [34.7918959, -96.6623549]

【问题讨论】:

查看原始推文的 JSON 对象是个好主意,因为 Twitter 对象有时具有令人惊讶的结构。 【参考方案1】:

问题与tweepy 本身无关。

例如,查看这条推文 (https://api.twitter.com/1/statuses/show.json?id=341458303064354817&include_entities=true) - 它的 geo_enabled 设置为 true,而 geocoordinatesplace 等于 null

根据twitter docs:

geo_enabled:当为真时,表示用户已启用 对他们的推文进行地理标记的可能性。

因此,如果geo_enabled 为真,则推文数据中会有位置信息并不是一个严格的规则。只需检查您的听众中的status.geostatus.coordinates 是否为not None

希望对您有所帮助。

【讨论】:

以上是关于Tweepy Streaming API 为启用地理的推文上的坐标返回“无”的主要内容,如果未能解决你的问题,请参考以下文章

tweepy Streaming API:全文

尝试使用 Tweepy/Twitters Streaming API 和 psycopg2 来填充 PostgreSQL 数据库。很近,一条线

检查JSON var是否具有可为空的密钥(Twitter Streaming API)

Python,tweepy流

管理 Tweepy API 搜索

如何使用 Tweepy 获取 Twitter 生物信息