Tweepy を使用してストリーミング API にアクセスしています。以下のコードで結果を取得できますが、Geo Enabled の値が「True」であるツイートの場合、Coordinates の戻り値は「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
結果出力の例を次に示します。
Tweet Text: @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...
地域対応: True
友達: 1857
リツイート: 0
場所: ベズエラ マラカイボ
ID: 481513551
コーディネート:なし
場所:なし
乾杯、BD
明確にしていただきありがとうございます。ちょうど今、リスナーを調べていて、座標が json オブジェクトとして設定されているツイートに気付きました。ツイートがストリーミングされているときに、ツイートを mysql db に書き込んでいますが、座標情報を持つツイートがデータベースに挿入されていないようです。SQL ステートメントの周りのエラーが最初のツイートか 2 番目のツイートかは不明です。エラーが発生した両方の列が 'varchar' 値に設定されています。ストリーミングの結果は次のとおりです。
Tweet Text: Vi 10 minutos y no pude ver mas. 大豆スーパーカゴナ、ディオス。別の言い方をしてください。
タイムスタンプ: 2013-06-04 01:08:57
タイムスタンプ: 2013-06-04 01:08:57
出典:ウェブ
作者: アイレンヴァリ
名前:Λili
時間帯: サンティアゴ
ユーザー言語: es
フォロワー: 384
ユーザーの説明: あなたの現実を作成するか、あなたのために作成されます
http://instagram.com/ailenvalli
地域対応: True
友達:338人
リツイート: 0
場所: 704 イースト ブロードウェイ ▲ 1966
ID: 200264965
コーディネート:なし
場所:なし
firehose_geo.py:87: 警告: 不正な文字列値: 行 1 の列 'Name' の '\xCE\x9Bili'
(text,status.created_at,status.created_at,source,author,name,time_zone,user_language,followers,user_description,geo_enabled,friends,retweets,location,user_id,coordinates,geo)) firehose_geo.py:87: 警告: 文字列が正しくありません値: '\xE2\x96\xB2 19...' 行 1 の列 'Location' の場合
(text,status.created_at,status.created_at,source,author,name,time_zone,user_language,followers,user_description,geo_enabled,friends,retweets,location,user_id,coordinates,geo))
ツイート テキスト: ウォルマートが私の財布から少しずつ取り出そうとしているような気がします。健康食品はとても高価です。
タイムスタンプ: 2013-06-04 01:42:00
タイムスタンプ: 2013-06-04 01:42:00
出典:Twitter for Android
著者: KaylaRenae21
名前: †ケイラ・レナエ'
タイムゾーン: 中部時間 (米国およびカナダ)
ユーザー言語: en
フォロワー: 300
User Description: やりたいことが都会にはない。釣り竿を渡せば、一日中いなくなるよ。
地域対応: True
友達: 437
リツイート: 0
場所: オクラホマ
ID: 282414509
座標: {'type': 'Point', 'coordinates': [-96.6623549, 34.7918959]}
場所: {'type': 'Point', 'coordinates': [34.7918959, -96.6623549]}