« 台風成果報告会日記 |Main| 漢字の勉強 »

« 台風成果報告会日記 | zakki(雑記) | 漢字の勉強 »

携帯でTwitter日記

昨日はTwitter+携帯で楽しんだ。以下ログ。

= リアルタイムで見たい人はTwitter / nishiom。 PCから書いているひとりごとも見たければ Twitter / nishio
= モバツイッターのページが、画像がサムネイルで埋め込まれていてイイと思ったけど、 携帯だとセッション情報をもてない関係でURLにセッションIDが埋め込まれているので公開できない。 そこでモバツイッターのページをスクレイピングして、ついでにいらない情報を捨てたり 古い順に並べたり、ってスクリプトを書いたんだけども、 たぶん正規表現でスクレイピングしたのは大失敗だったと思う。 わずか一日の間なのに改行が増えてたり「br」が「br/」になったり「br /」になったり。

正解は「Twitter APIを使う」だと思った。 今度気が向いたらやる。

反面教師のコード。dataにHTMLデータが入っているとする。

import re

CLEAR_LEFT = "<br\sclear=['\"]left['\"]>"
PAT = r"""
    \[@\]\n+</a>\n*<br(\s/)?>\s*
    (?P<contents>[^<]+?)\s*

    (<a\shref="[^"]+">(?P<loc>[^<]+)</a>)?\s*

    (<a\shref="(?P<imgurl>[^"]+)".+?
     <img\ssrc='(?P<smallimgurl>[^']+)'.+?)?\s*

    (<br\sclear=['"]left['"]/?>)\s*
    (?P<date>\d[^&]+\d)&nbsp;
    """ % globals()

print PAT

PAT = re.compile(PAT, re.VERBOSE + re.DOTALL)
import time

items = list(re.finditer(PAT, data))

print len(items)
#print items[0].groupdict()["debug"], items[0].groupdict()["contents"]
if 1:
    for m in reversed(items):
        d = m.groupdict()
        date = time.strptime(d["date"], "%m/%d %H:%M")
        date = time.strftime("tw%d%H%M",date)
        print "<p class='twitter'>"
        print "<a href='#%s' name='%s'>=tw</a>" % (date, date)
        if d["loc"]:
            print "いまここ→", d["loc"]
        else:
            print d["contents"].replace("\n", "<br/>")
        if d["imgurl"]:
            print """
                <br><a href="http://movatwitter.jp%(imgurl)s">
                <img src='http://movatwitter.jp%(smallimgurl)s'>
                </a>""" % d
        print "</p>"

っていうかコメントによってbrだったりbr/だったりするということは、 「抽象的な形で保管されているデータをテンプレートに流し込む」ではなく 「整形済みのHTMLの形で保管」というアプローチを取っていると言うことだろうか。 うーん。

このサービスに依存しないような形にならないといけないなぁ。

トラックバック(Trackback)

Trackback URL: http://www.nishiohirokazu.org/mt/mt-tb.cgi/645

ご意見・ご感想をお送りください(フィードバック)

(フィードバックはメールで送信され、基本的に表示されませんが、内容によっては公開させていただくこともございます。ご了承ください。Your comment doesn't appear the page immediately. If the comment has value to other people, it will be put on the page or subsequent entries. Thank you.)

上の情報は、いずれも未記入でかまいません。 All of above questions are optional.