White scenery @showyou, hatena

If you have any comments, you may also send twitter @shsub or @showyou.

今日1日の発言をメールで送ってくれるスクリプト2

こんにちは。せっかくノリで書いてみたけど、今の所使うという人がいなくてしょんぼりなしょうゆです。

それはともかく、昨日(http://d.hatena.ne.jp/showyou/20080224#1203866547)の続きの話。

メールは先日貼ったhttp://labs.unoh.net/2007/06/python_2.htmlそのまんまです。強いていうなら文字コードでエラーが出てたので無理やりu'てすと'.encode('iso-2202-jp')なんてやりました。

Twitterのログ取得部分ですが、これはちょっと苦労しました。
現在、TwitterAPIで過去複数ページが取得できないんですよ。
なので、Webページから直接さらっちゃいました。

def getUserPageWithScraping(self,user,num):
	self.setAuthHandler()
	s = "http://twitter.com/"+user+"?page="+str(num)
	print "url+" +s
	data = urllib2.urlopen(s)
	urlstring = data.read()
	if num == 1:
		return self.scrapeTwit(urlstring,True)
	else:
		return self.scrapeTwit(urlstring,False)
		
# HTMLをスクレイプします。
def scrapeTwit(self,a,isFirst):
	import re
	# <span class="entry-title entry-content">~</span>(最短)
	#reg = re.compile(r'<(.*?)>')
	retList = []
		
	reg = re.compile("<span class=\"entry-title entry-content\">([\w\W]*?)</span>[\w\W]*?<abbr class=\"published\" title=\"([\w\W]*?)\">.*?</abbr>",re.MULTILINE)
	reg2 = re.compile("<p class=\"entry-title entry-content\">([\w\W]*?)</p>[\w\W]*?<abbr class=\"published\" title=\"([\w\W]*?)\">.*?</abbr>",re.MULTILINE)
	# もし1ページ目なら、最新の発言も取ってくる
	if isFirst :
		a3 = reg2.findall(a)
		retList.append( a3[0] )

	a2 = reg.findall(a)
	for aa in a2:
		retList.append( (aa[0].strip(),aa[1]) )
	return retList

いやー、正規表現が苦労しました。(.*?)でいけるかと思ったら、改行を認識しなくて。。思わず[\w\W]なんてやってしまいました。酷すぎですね。

実際に取得すると少し時間かかります。正規表現とログ取得のどっちが負担かけてるのか知りませんが。あんまり使わない方がいいんでしょうねぇ。

あと、↑のコメント見ればわかりますが、実は最新の発言が取れません。アレだけ実は

 <p class=""></p>

ってなってるのです。今日はその辺修正予定。修正しました。

で、だれか使う人いない?いなければ勝手にメール送りつけるよ?(ぉぃ