読者です 読者をやめる 読者になる 読者になる

c-bata web

@c_bata_ のメモ。python多め

Pythonで天気を取得してくる

正規表現 Raspberry Pi Python

朝起きた時に,今日の天気をRaspberry Piに読み上げてほしいので,↓のサイトから引っ張ってくる。

http://tenki.jp/forecast/pref-31.html

流れとしてはソケット通信でhtmlを取得してきて,idから文章を引っ張ってきて正規表現でタグ消し を行う。後はこちらの方法でRaspberry Piにインストールした,AquesTalkPiを使うと,ゆっくりに読ませることができる。

参考ページ

正規表現を実際にプログラミングで利用するのは初めてだったのですが,結構便利で驚き。これからも利用していきたい。

天気とは関係ないですが,Pythonのプログラムを書いている時に,↓の記事も参考になりました

コードは↓

#coding: UTF-8

import urllib2
import re
import socket

def tenki():
    url = "http://tenki.jp/forecast/pref-31.html"
    socket.setdefaulttimeout(10.0)
    # 正規表現のパターンを定義 - タグ消し
    remove_tag = re.compile(r'<.*?>')
    
    try:
        htmldata = urllib2.urlopen(url)
    except urllib2.HTTPError as err:
        print('HTTPError')
        print(err)
    except urllib2.URLError as err:
        print('URLError')
        print(err)
        if isinstance(err.reason, socket.timeout):
            print('timeout')
    else:
        print('Get HTML')

    content = htmldata.read()
    htmldata.close()
    content_list = content.split('\n')

    flag = False

    for line in content_list:
        if flag==True and not "</div>" in line:
            #正規表現でタグ消しした後にstripメソッドでスペースを除去。後ろに,をつけると改行しない
            print remove_tag.sub("", line).strip(),
            #print line
            #filewrite(line)
        if flag==True and "</div>" in line:
            print remove_tag.sub("", line).strip(),
            #print line
            #filewrite(line)
            flag = False
        elif "weatherCountryDescriptionBody" in line:
            print remove_tag.sub("", line).strip(),
            #print line
            #filewrite(line)
            flag = True

if __name__ == "__main__":
    tenki()