--------(--)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2012-05-13(Sun)

Twitter Search API with Python

Twitter Search APIをPythonスクリプトで作ってみた。特にIDもKeyもいらずにブラウザでも取得できるかどうか確認できるので便利だ。
APIドキュメントを参考にすればだいたいわかる。

基本のURLは以下のとおり。
SEARCH_URL='http://search.twitter.com/search.json?q=%e3%83%89%e3%83%a9%e3%82%b3%e3%83%ac&rpp=100&page=1000'  

search.json: 取得データはJsonフォーマットで。
q:クエリ 「ドラコレ」という文字列をURLエンコードして検索対象とした。
rpp:1ページで取得するデータ数、MAX=100
page:ページ数 1000回まわしてみた。
で、結果をファイルに保存する。

スクリプトは以下のとおり。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import os
import logging
import urllib2
import simplejson as json

SEARCH_URL='http://search.twitter.com/search.json?q=%e3%83%89%e3%83%a9%e3%82%b3%e3%83%ac&rpp=100'

def start_url(i):
try:
logging.info('start_search:%s', i)
url=SEARCH_URL
resultUrlOpen = None
if i != 0:
url = url + ('&page=%s' % i)

try:
logging.info('url:%s', url)
resultUrlOpen = urllib2.urlopen(url)
return resultUrlOpen
except urllib2.HTTPError:
logging.warning('urllib2 error:%s', sys.exc_info())
pass
except urllib2.URLError:
logging.warning('urllib2 error:%s', sys.exc_info())
pass

if None == resultUrlOpen:
logging.error('resultUrlOpen==None')

return None

except:
logging.error('start_soup ERROR %s', sys.exc_info())
raise

def start_search(wfp, resultUrlOpen): try:
logging.info('start_search start')

j = json.load( resultUrlOpen, encoding='utf8') # simplejsonを使ってみる。
logging.debug("%s", j['results_per_page'])
num = j['results_per_page']
results = j['results']
if len(results) == 0:
return
for result in results:
user_id = result['from_user_id'] # ユーザーID取得
text = result['text'] # ツイート内容取得

logging.info('user_id:%s', user_id) # ログ出してみる
logging.info('text:%s', text)

wfp.write('%s\n' % text.encode('utf-8')) #ファイル書き込み
return
except:
logging.error('start_soup ERROR %s', sys.exc_info())
raise

if __name__ == "__main__":
try:
# logging.getLogger().setLevel(logging.ERROR)
logging.getLogger().setLevel(logging.DEBUG)

wfp = open('ret_tweet_word.txt', 'w')
for i in range(0, 1000):
resultUrlOpen = start_url(i)
if None == resultUrlOpen: # 取得エラーなら次にまわす。
continue
start_search(wfp, resultUrlOpen)

wfp.close()
except:
print sys.exc_info()



実行してみると、10ページぐらいまではちゃんととれるがあとは同じデータがくりかえされるだけ。
大量のデータを取得するのには使えないか。



参考:

関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

コメント

プロフィール

kumagonjp2

Author:kumagonjp2
Python,Django,R,Mongo,MySQL,Struts,Spring,データマイニングなどサーバー関係のメモを残していきます。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
雪が3Dで降るブログパーツ ver2

マウスで見る方向変えられます

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。