Twitter-APIを使わずにTL取得 in Python

TwitterAPIでTL(タイムライン)を取得するとき、回数制限が設けられています。
しかしuser_timelineをRSSで取得する際には、この制限がありません。
なので、この独立したいくつかのuser_timelineを組み合わせ、TLを再構築させてみたいと思います。


準備:
  Python処理系(俺は2.6系)
  feedparser([ubuntu] slicehostでpython-mecabとかの インストール - shohu33's diaryを参考にしてインストール)

#!/usr/bin/python
# -*- encoding: utf-8 -*-
# coding: utf-8

import sys
import urllib
import feedparser

def get_rss_url(id):
	url = "http://twitter.com/%s" % id
	std_str = "http://twitter.com/statuses/user_timeline/"
	try:
		s = urllib.urlopen(url).read()
	except:
		return None
	n = s.find(std_str)
	if n == -1:
		return None
	m = s.find('"', n)
	return s[n:m]

def get_entries(url):
	try:
		fdp = feedparser.parse(url)
	except:
		print "(Error) can not get the RSS..."
		sys.exit(1)
	
	entries = []
	
	for entry in fdp['entries']:
		entries.append(entry)
	return entries

def get_tl(entries):
	entries.sort(cmp=lambda x, y:cmp(x["updated_parsed"], y["updated_parsed"]))
	return entries

if __name__ == "__main__":
	id_list = ["pastak", "hush_in", "loli_comp", "3jyo"]
	entries = []
	print "Crawle RSS Start."
	for id in id_list:
		rss_url = get_rss_url(id)
		if rss_url == None:
			print "Not found : ", id
			continue
		entries += (get_entries(rss_url))
	print "Crawle Done."
	
	timeline = get_tl(entries)
	for entry in timeline:
		try:
			print entry["title"]
		except:
			print entry["title"].encode("mbcs")
		print "Date:\t", entry["updated"]
		print "URL:\t", entry["link"]
		print ""
  • 関数説明
    • get_rss_url(id)
      • idに対応するtwitter-idのRSSのURLを取得する
    • get_entries(rss_url)
      • rss_urlには基本的にget_rss_url関数の戻り値を利用する
      • rss_urlより、Tweetデータを取得
    • get_tl(entries)
      • entries:Tweetデータの集合
      • entriesを時系列順に並び替えて返す


スクリーンショット