LINEでyahoo天気から好きな地域の天気を通知してもらおう!


開発経緯

現代で誰しもが遭遇したことのあるはず「通信制限」
外出先で自由にスマホを使用できないのは辛いですよね。
月のパケット制限を大きくすればよいだけの話ですが

そんな中でも通勤や通学、さらには天気が知りたいなんてことは毎日あります。
通信制限中だとすぐにわからなくて困りますよね。

テキストだけでも見られれば何とかなりそう、、、
そこでLINEからメッセージを送ってもらえばいいのでは!?

そんなこんなで、最終目標としては始発と終着をLINEで送ったら返信で知りたい情報が得られることができればなぁということで開発を始めてみました。

多分テキストなら、アプリを見るよりも早くできるはず、、

yahoo天気の情報を取得

まずは、各駅の情報収集だ!!

と行きたいところですが、まずは手始めにLINEでメッセージのやり取りをすることや、スクレイピングの練習として各地域の天気を通知するシステムを作ります。

ひとまず、yahoo天気からスクレイピングを用いて情報持ってきましょう。

import requests
from bs4 import BeautifulSoup

そのためにrequestsを利用してpythonでURLを開きましょう。
そしてURLを開いた後にHTMLやXMLからデータを抽出するためにBeautifulSoupからbs4をimportしましょう。

次にyahoo天気のURLが下記の通りになります。
https://weather.yahoo.co.jp/weather/
このURL先では全国の天気が一目でわかるようになっており、知りたい地域にどんどん掘り下げていくことが可能となっています。

まずは全国から地方のURLを取得しましょう。

target_url= "https://weather.yahoo.co.jp/weather/"
res       = requests.get(target_url)
soup      = BeautifulSoup(res.text, 'lxml')
elems     = soup.find_all("a")

with open("yahooChiku.csv", "w", encoding="utf-8", newline ="") as ychiku:
    writer = csv.writer(ychiku)
    for e in elems:
        chikuNumList = []
        if re.search(r'<a data-ylk="', str(e)):
            if re.search(r'"//weather.yahoo.co.jp/weather/jp/\d.*/"', str(e)):
                row = re.search(r'"//weather.yahoo.co.jp/weather/jp/\d.*/"', str(e)).group().strip('"')
                row = "https:" + row
                chikuNumList.append(row)
                writer.writerow(chikuNumList)

BeautifulSoupの使い方などはいろいろ調べてみてください。
自分でも場当たり的にしか使用していないので、知識不足です、、、

このソースコードで行っていることは全国の天気から地方ごとのURLを取り出す処理となっています。
地方のURLが入っているタグは<a data-ylk>で得られます。ただ、他にもこのタグに含まれている情報もあるので、正規表現を使って各地域のURLが含まれているものだけを抽出します。
タグの情報内ではhttpsが含まれていないため、先頭に「https」を付け加えてcsvに書き込んで保存します。

とりあえず長くなりそうなので、一旦はここまで。

次回

地方のURLを取得したので次は市区町村のURLと各地域の名前を取るところとLINEで簡単にメッセージを送るところを記事にしたいと思います。

※説明不足や補足等あればぜひお願いします。

ではまた次回!!!