我正在使用 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 enamorado... y soy muy fekiz...
地理启用:真
朋友:1857
转推:0
地点: veezuela maracaibo
编号:481513551
坐标:无
地点:无
干杯,BD
感谢您的澄清。我刚才正在查看监听器,并注意到一条推文,其中填充了坐标但作为 json 对象。我正在将推文写入 mysql 数据库,因为它们是流式传输的,似乎带有坐标信息的推文没有插入数据库。不确定 SQL 语句周围的错误是针对第一条推文还是第二条推文,发生错误的两列都设置为“varchar”值。这是流式传输的结果:
推文文本:Vi 10 minutos y no pude ver mas。大豆超级 cagona,dios。Vay a ver otra。
时间戳:2013-06-04 01:08:57
时间戳:2013-06-04 01:08:57
来源:网络
添加一名作者
姓名:Λ力
时区:圣地亚哥
用户语言:es
追随者:384
用户描述:创造你的现实,否则它将为你创造
http://instagram.com/ailenvalli
地理启用:真
朋友:338
转推:0
地点:东百老汇704号▲1966
编号:200264965
坐标:无
地点:无
firehose_geo.py:87:警告:不正确的字符串值:第 1 行的列“名称”的“\xCE\x9Bili”
(文本、status.created_at、status.created_at、来源、作者、姓名、时区、用户语言、关注者、用户描述、geo_enabled、朋友、转发、位置、用户 ID、坐标、地理)) firehose_geo.py:87:警告:字符串不正确值:'\xE2\x96\xB2 19...' 用于第 1 行的列 'Location'
(文本、status.created_at、status.created_at、来源、作者、姓名、时区、用户语言、关注者、用户描述、geo_enabled、朋友、转发、位置、user_id、坐标、地理位置))
推文文本:我有一种感觉,沃尔玛打算从我的钱包里拿出一大块。健康食品太贵了。
时间戳:2013-06-04 01:42:00
时间戳:2013-06-04 01:42:00
来源:Android 版 Twitter
作者:KaylaRenae21
姓名:†凯拉·蕾娜(Kayla Renae)
时区:中部时间(美国和加拿大)
用户语言:en
追随者:300
用户描述:我喜欢做的事情在城市里找不到。给我一根钓鱼竿,我会一整天都不在。
地理启用:真
朋友:437
转推:0
地点:俄克拉荷马
编号:282414509
坐标:{'type': 'Point', 'coordinates': [-96.6623549, 34.7918959]}
地点:{'type': 'Point', 'coordinates': [34.7918959, -96.6623549]}