pythonでtwitterのstreaming apiから日本語ツイートを取得する

basic認証だけで行けるので結構簡単です.
getJapaneseTweetsは引数個の日本語ツイート(json)をsimplejsonで辞書に変換して,そのリストを返します.
文字参照をデコードし直してるのはツイート本文だけになってます.

#! /usr/bin/env python
# encoding=utf-8

import urllib2
import base64
import simplejson
import re

STREAM_URL = 'https://stream.twitter.com/1/statuses/sample.json'
USERNAME = 'username'
PASSWORD = 'userpassword'

def getJapaneseTweets(length, username=USERNAME, password=PASSWORD) :
	req = urllib2.Request(STREAM_URL, headers={
		'Authorization':
		'Basic %s' % (base64.encodestring('%s:%s' % (username, password))[:-1])
	})
	
	tweets = []
	while True :
		ua = urllib2.urlopen(req)
		for line in ua:
			tweet = simplejson.loads(line)
			try :
				tweet['text'] = tweet['text'].encode('utf-8').decode('utf-8', 'xmlcharrefreplace')
			except KeyError :
				tweet['text'] = ''
	
			if tweet['text'] and isJapanese(tweet['text']):
				tweets.append(tweet);
				if len(tweets) == length :
					return tweets
		time.sleep(30)

def isJapanese(text) :
	return  re.search(u'[ぁ-んァ-ヴ]', text)

if __name__ == '__main__' :
	print getJapaneseTweets(1)[0]['text']

pythonで日本語分かち書き

まず,MeCabnのpythonバインディングがあるのでaptでインストールします.

sudo apt-get install python-mecab

そうしたら,あとは以下のコードで分かち書きできます.(NLTK使ったほうが楽かも)

#! /usr/bin/env python
# encoding=utf-8

import MeCab

def getTokens(text) :
	m = MeCab.Tagger()
	n = m.parseToNode(text.encode('euc-jp', 'ignore'))
	n = n.next
	tokens = []
	while n:
		word =  n.surface.decode('euc-jp', 'ignore')
		tokens.append(word)
		n = n.next
	return tokens

if __name__ == '__main__' :
	for token in getTokens(u'今日は本当に天気のいい日だ') :
		print token
# output
#今日
#は
#本当に
#天気
#の
#いい
#日
#だ
#

twitterのツイート時刻をパースする.

この記事でツイートの取得はできるようになりましたが,時刻のほうが文字列のままなので,ちょっと扱うのが大変です.そういうときはこうします.

#! /usr/bin/env python
# encoding=utf-8

import datetime

def getTimeByTweet(tweet) :
	return datetime.datetime.strptime(tweet['created_at'],
			"%a %b %d %H:%M:%S +0000 %Y")