sakusaku の今週のみどころを抽出する for GAE | 忘れたらググればいい

2011年10月25日火曜日

sakusaku の今週のみどころを抽出する for GAE

@sakusakubotの抽出する今週のみどころがおかしくなった

何も表示されていない...

よく見るとHTMLがなんかおかしい...

月曜はpタグで囲まれてるけど,火曜以降は囲まれていない.今まで使ってきたスクリプトだと対応できないパターンだ(最初,テキストでHTMLを表示してたけど,文法エラーが勝手に修正されてしまうので,画像で差し替え).

sakusaku|tvk
〔特別!〕 ●今週のゲストは、中孝介さん! ...
〔特別!〕 ●今週のゲストは、中孝介さん!

というわけで修正.とりあえず動けばいい.

GAEで使う部分.getMidokoro()を実行するとみどころデータが得られる.キーに曜日 ("mon", "tue", "wed", "thu", "fri") を指定すると対応する曜日のみどころリストが得られる.

from google.appengine.api import urlfetch
import re

def getMidokoro():
    htmlurl = "http://www3.tvk-yokohama.com/saku2/midokoro.php"
    result = urlfetch.fetch(htmlurl)
    midokoro = {}
    h4Pattern = re.compile("<[hH]4>(.*)")
    clearerPattern = re.compile("
") if result.status_code == 200: lines = result.content.split("\n") f_in_midokoro = False f_is_first_h4 = True buf = [] key = None for l in lines: m = h4Pattern.match(l) if m: if not f_is_first_h4: midokoro[key] = getMidokoroItems(buf) buf = [] else: f_is_first_h4 = False f_in_midokoro = True dow = unicode(m.group(1),"utf-8") key = None if re.search(u"月曜日",dow): key = "mon" elif re.search(u"火曜日",dow): key = "tue" elif re.search(u"水曜日",dow): key = "wed" elif re.search(u"木曜日",dow): key = "thu" elif re.search(u"金曜日",dow): key = "fri" continue if f_in_midokoro and clearerPattern.match(l): f_in_midokoro = False midokoro[key] = getMidokoroItems(buf) buf = [] if f_in_midokoro: buf.append(unicode(l,"utf-8")) return midokoro def getMidokoroItems(buf): paragraph = "".join(buf) paragraph = paragraph.strip() paragraph = paragraph.replace("

","") paragraph = paragraph.replace("

","") paragraph = paragraph.replace(u" ","") data = re.split("<[bB][rR]( )*/?>",paragraph) items = [] tmptxt = "" for d in data: if re.search(u"●",d): items.append(tmptxt) tmptxt = d.replace(u"●",u"▽") else: tmptxt += d items.append(tmptxt) return items

とりあえず動いた

もうちょっと汎用的に書いた方がいいだろうけど,どうせ本家ページのフォーマットもころころ変わるからいいや.