« TortoiseSVNでコミット時にバージョン番号をコードに自動で反映する。 | トップページ | パスワードを忘れた。 »

2012年3月10日 (土)

Pythonでurllib2をつかって日本語サイトから情報フェッチしてみる。

普段Pythonであまり日本語を扱う必要に迫られたことが無いので、たまに使うといつもユニコードどうやって扱うんだっけとか、Shift-JISとかどうすんだ?とか一から調べ直し。つー訳で[1] http://www.evanjones.ca/python-utf8.htmlを参考にしてわかったことを、まとめてメモリーエイドにする。

  1. コードの一行目か二行目に# coding: utf-8を入れておく。コメントになっているがPythonのインタプリタがスクリプトのエンコーディングがなにかをこれをみて確認してくるので、これがないとASCIIとして扱われる。
  2. スクリプトの中で日本語を入れたい場合uをつけてUnicode stringにする。u'日本語ださ'
  3. urllib2で取ってきたバッファ中の文字列を探す場合、サイトのエンコーディングにしたがってデコードする。str型がもつdecodeというメソッドで行う。パラメータは'Shift_JIS'でも'shift-jis'でも同じだったので大文字小文字は区別は気にしないでいいっぽい。
  4. インタプリタのフォントが日本語フォントじゃないと当然化ける。DreamPieなら簡単に変更できる。cmdとかiPythonは知らん。
  5. unicodeから数字にするのはordを使う。PILのソースにはよく下のようにunicodeバッファを色々なデータ型で解釈する関数を定義してある。例は16bitの整数。

def i16(c):
    return ord(c[0]) + (ord(c[1])<<8)

という訳で、習うより慣れろなので具体例としてhttp://www.j-league.or.jpのJ1の全日程のページから、「祝J1記念」として札幌の試合時間を抜き出してみて、今日から一番近い試合まで後何日、何時間あるのかを表示してみた。やっつけなので汚いコードのままですいませんがとりあえず動いたしいいか。Pythonのバージョンは2.7です。

# coding: utf-8

import datetime, urllib2

print u"2012 J1札幌の次の試合時間までどんくらい?"

url = 'http://www.j-league.or.jp/SS/jpn/news/2012010001_W0501_J.html'
buf = urllib2.urlopen(url).readlines()

sapporo = []
fixtures = []
for n, line in enumerate(buf):
    if u">札幌<" in line.decode('Shift_JIS'):
        sapporo.append(n)
    elif u"節" in line.decode('Shift_JIS'):
        fixtures.append(n+1)

start_time = []
for n in sapporo:
    while True:
        n -= 1
        if ':' in buf[n]:
            pos = buf[n].find(":")
            start_time.append(buf[n][pos-2:pos+3])
            break

dates = []
for n in fixtures:
    pos = buf[n].find('+0>') + 3
    dates.append(buf[n][pos:pos+5])

_today = datetime.datetime.today()
for n in range(len(start_time)):
    _month, _day = map( int, dates[n].split('/'))
    _hour, _min = map( int, start_time[n].split(':') )
    delta = datetime.datetime(2012, _month, _day, _hour, _min) - _today
    if datetime.timedelta(0) <= delta < datetime.timedelta(2):
        print u'第%d節 %s %s 試合まで後 %s' % (n+1, dates[n], start_time[n], delta)

« TortoiseSVNでコミット時にバージョン番号をコードに自動で反映する。 | トップページ | パスワードを忘れた。 »

Python」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

« TortoiseSVNでコミット時にバージョン番号をコードに自動で反映する。 | トップページ | パスワードを忘れた。 »

しろののツイッタータイムライン

  • ツイッターは5つ目も凍結されました。6つ目での復活も不可能。なのでnoteに注力しています。

    と思ったら、イーロン・マスクの買収が公になってアカウントが復活できました。ありがとうマスク。

    トランプ関連記事の一覧リスト

オススメたち

2024年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

はてブ

無料ブログはココログ