キーワードでツイートを検索する方法

研究でキーワードからツイートを集める必要があったのでメモ

下では「"キーワード"+日付」をファイル名にしています。
保存するデータはツイートIDやユーザーIDなど。
urlopenは403エラーを返すことがあるので、正常に終了させたい人は例外処理を書いてください。

ここではsoftbankを例にしています。

import json
import urllib2
import datetime

def searchTweets(keyword):
    """キーワードからツイートを検索"""

    d = datetime.datetime.today()
    date = d.strftime("%Y_%m_%d")
    f = open(keyword + '_' + date, 'w')
    i = 0
    next_page = '?q=' + keyword + '&rpp=100' + '&locale=ja'

    while i < 100:
        print next_page
        url = 'http://search.twitter.com/search.json' + next_page

        fp = urllib2.urlopen(url)
        html = fp.read()
        fp.close()
        data = json.loads(html)

        for d in data['results']:
            id = str(d['id'])
            text = d['text'].encode('utf_8')
            to_user_id = str(d['to_user_id'])
            from_user_id = d['from_user_id_str'].encode('utf_8')

            type = ""
            if to_user_id == None:
                type = 'M'
            elif text.find('RT') >= 0:
                type = 'RT'
            else:
                type = 'T'

            created_at = d['created_at'].encode('utf_8')

            f.write(id + '\t' + type + '\t' + created_at + '\t' + from_user_id + '\t' + to_user_id + '\t' + text + '\n')

        try:
            next_page = data['next_page'].encode('utf_8')
        except:
            print "no data"
            i = 100

        i += 1
    f.close()

if __name__ == '__main__':
    searchTweets('softbank')