読者です 読者をやめる 読者になる 読者になる

pythonで位置情報つきのtwitter stream表示

技術

気になっていたtwitterのstreaming API (今更!?)と、最近、勉強中のpythonでgeoタグ付きのつぶやきが拾えたので、方法をメモ。


このページのコードをベースにちょこっと足しただけ。
http://d.hatena.ne.jp/xmalloc/20100220/1266682133
##参考にさせていただきました。ありがとうございます!!


あと、参考にしたのは当然のことながら公式ドキュメント。
http://dev.twitter.com/pages/streaming_api_methods

USERNAME = 'USERNAME'
PASSWORD = 'PASSWORD'

#STREAM_URL = 'http://stream.twitter.com/1/statuses/sample.json'
#条件指定がある時はこっち
STREAM_URL = 'http://stream.twitter.com/1/statuses/filter.json'


def is_japanese(text):
     def check_chr(x):
        return ((x >= 0x3040 and x <= 0x309f) or (x >= 0x30a0 and x <= 0x30ff))
     return [ch for ch in text if check_chr(ord(ch))]

def main():
    #位置はおおよそ。日本の左下(与那国辺り)と右上(知床辺り)の緯度経度。
    values = {'locations':'122.87,24.84,153.01,46.80'}
    reqpara = urllib.urlencode(values)
    req = urllib2.Request(STREAM_URL,
        reqpara,
        headers={
            'Authorization':
            'Basic %s' % (base64.encodestring('%s:%s' % (USERNAME, PASSWORD))[:-1])
        })

    ua = urllib2.urlopen(req)
    for line in ua:
        #時々、json生成の所でエラーを吐いたので暫定対処。
    try:
            data = simplejson.loads(line)
        except:
            continue
        text = data.get('text')
        if text and is_japanese(text):
        #if text:
            geoStr='no point'
            if(data['geo'] and data['geo']['coordinates']):
                geoStr = str(data['geo']['coordinates'][0]) + str(data['geo']['coordinates'][1])
            print('<li>'
            '<img src="%s" /> <a href="http://twitter.com/%s">%s</a> %s %s'
            '</li>' %
            (escape(data['user']['profile_image_url'].encode('utf-8', 'ignore')),
            escape(data['user']['screen_name'].encode('utf-8', 'ignore')),
            escape(data['user']['screen_name'].encode('utf-8', 'ignore')),
            escape(data['text'].encode('utf-8', 'ignore')),
            #出力は適当
            geoStr
            ))

if __name__ == '__main__':
    main()


出力の方法とか、座標とかは適当に調整が必要。

filter.jsonにしてlocationを指定しても、geoタグのついていないtweetも流れてきます。
geoタグ付きでつぶやいてる人+日本の範囲指定なので、ストリームの流れが悪いです。

あと、座標が四角形での範囲指定のため、韓国のtweetも含まれ、is_japanese をコメントアウトすると、ハングル語のつぶやきがちらほらと表示されて、ほんとに世界中で使われているんだな〜と感慨に浸れます(笑)。

    • -

追記:
丁度、朝鮮半島でのtweeterに関する記事がtechchrunchに出てので、リンクっておいた。
http://techcrunch.com/2011/01/18/twitter-is-now-available-in-korean/

    • -
  • -

追記2:
後から見つけましたが、このやり方を加工するほうがスマートそう。
http://d.hatena.ne.jp/nokuno/20110117/1295227445

  • -


これをがつがつデータとして溜め込んでいって、、、どうしよ??
これまた最近手を出そうとしているAWS(http://d.hatena.ne.jp/seikoudoku2000/20110115)と絡めて何かしたいな〜
考え中。
AWSはドキュメントにちらほらと目を通したけど、S3とかEBSとかSimpleDBと色々でてきて、それぞれの役割がはっきり分からず、結局、DB立てたり、NoSQL系の製品でちっちゃなクラスタ組むにあたってそれぞれの違いは何で、どのように構成すれば良くて、安上がりになるのか良く分からなかったので、今日、これをぽちってしまった。$25のチケットを頂いたけど、ちょっと赤字だな。しっかり元を取らないと。

AmazonCloudテクニカルガイド ―EC2/S3からVPCまで徹底解析―

AmazonCloudテクニカルガイド ―EC2/S3からVPCまで徹底解析―


エキスパートPythonプログラミング

エキスパートPythonプログラミング