3

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]}

4

1 に答える 1

7

問題はtweepyそれ自体には関係ありません。

たとえば、このツイート ( https://api.twitter.com/1/statuses/show.json?id=341458303064354817&include_entities=true )geo_enabled参照してください。geocoordinatesplacenull

ツイッターのドキュメントによると:

geo_enabled: true の場合、ユーザーがツイートにジオタグを付ける可能性を有効にしていることを示します。

geo_enabledしたがって、が true の場合、ツイート データに位置情報が含まれるという厳密なルールはありません。またはリスナーにあるかどうstatus.geostatus.coordinatesを確認してください。not None

それが役立つことを願っています。

于 2013-06-03T07:42:54.393 に答える