2010年3月21日日曜日

twitter searchからデータを拾ってほげほげする話(1)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
#!/usr/bin/python
# -*- coding: utf-8 -*-


import sys
import urllib
import simplejson

def printer(d, indent=''):
  if isinstance(d, dict):
    for k in d:
      print indent+k,
      printer(d[k], indent+' ')
  elif isinstance(d, list):
    print indent + 'item in list length =', len(d)
    for i in d:
      print indent+'-'*10
      printer(i, indent+ ' ')
  else:
    print (d, )
    #print indent, str(d).encode('utf-8')

def twittersearch(word, since_id=None, page=None):
  baseurl = "http://search.twitter.com/search.json"
  #param = urllib.urlencode({'q': u'堺市 中学'})
  if page is None:
    page = 1
  param = '?q=%E5%A0%BA%E5%B8%82%20%E4%B8%AD%E5%AD%A6' + '&per_page=20&page=%i'%(page,)
  #param = '?q=%E5%A0%BA%E5%B8%82%20%E4%B8%AD%E5%AD%A6' + '&since_id=%s'%(since_id,) #ugh!


  print >> sys.stderr, 'retreiving:', param
  h = urllib.urlopen(baseurl + param)
  return simplejson.load(h)


all = {}

since_id = None
page = 1
try:
  while True:
    result = twittersearch(None, since_id, page)
    if 'results' not in result or not len(result['results']):
      break
    #since_id = result['max_id']
    for item in result['results']:
      all[item['id']] = item
      if not since_id or int(item['id']) < int(since_id):
        since_id = item['id']
    printer(result)
    page += 1
finally:
  print len(all)
  print 'done'

since_idが使われていなかったり、()で囲ってprintしたりしているのはまあ、そういうモンだ

0 件のコメント: