[Python]LINE notifyを使って翌日の天気を教えてくれるプログラム
最近APIって単語をやけに聞くな...(聞く余裕がでてきた...)と感じるので、超超簡単ですが、LINE notifyを使って天気を教えてくれるプログラムを書いてみました。
Udemyの講座を参考にしましたが、極力自分で作りたい...と思っていたので、最低限視聴し、あとは自力で取り組むスタイルで進めました。
やっと少しづつPythonのコードに慣れてきたな...と感じてきている程度のレベル感です。
これだけでもプログラミングってすご!ってなってます。
同じように未経験で入社した人に向けて、こんなこともできるようになるのか。と参考になれば御の字です。
記録に残す目的で記事にします。
取り組んだ時のスペック
- 未経験で入社し、約7か月経過
- 使用言語はPython、並行してJavaScriptの学習
- Pythonの資格等は未取得(現在Python認定基礎試験学習中)
①LINE notifyを利用するための準備
LINE notifyを使うためには鍵の発行をする必要がありますが、これはネットで調べれば即出てきました。最近はchatGPT様がご健在ですので聞けばすぐに答えてくれますが、今回はググり力を少しでもつけるために封印しました。
簡単な流れはLINEnotifyから自分のアカウントでログイン→トークンを発行→トークルームを選んで発行。
誰か他の人に送りたい場合はここで選べば良さそうです。(私はそんな勇気はなかったので自分だけにしました。)
コード上では
token = "自身のアクセストークン"の形で入れてます。
合わせてLINE notfifyのhttps://notify-api.line.me/api/notify
LINEへの通知のためのAPIもurlに入れてます。
token = "自身のアクセストークン"
url = https://notify-api.line.me/api/notify
これだけで準備完了。
え?これだけでいいの?ってなりました。
これだけみたいです。信じられません。
②Webスクレイピング
今回はBeautifulSoupというライブラリを使用しました。
なんでこの名前なんでしょうか...
!pip install BeautifulSoup4
from bs4 import BeautifulSoup
これでOK。
BeautifulSoupはWebページの情報(HTML)を取ってくる専門のライブラリです。
今回は東京の翌日の天気の中でも、
天気・最高気温・最低気温・時間帯ごとの降水確率を送るようにします。
ちなみにYahoo天気から引っぱってきます。
大量にあるHTMLの中からhtml.find_all()を使って翌日の天気の部分を抽出します。
forecast = html.find_all("div", attrs={"class": "forecastCity"})[0]
これでforecastCityというクラス名のものを抽出。要素は1つなのですが、すべてがリストの中に入ってしまっているので[0]を付けてます。
これでリストから出すことに成功。
さらにforecastの中から翌日の天気にあたる部分を抽出。
tommorow = forecast.find_all("div")[1]
あとは最高気温等も同じようにするだけです。
weather = tommorow.find_all("p", attrs={"class": "pict"})[
0].text.replace("\n", "").replace(" ", "")
high = tommorow.find_all("li")[0].text
low = tommorow.find_all("li")[1].text
rain_06 = tommorow.find_all("td")[4].text
rain_612 = tommorow.find_all("td")[5].text
rain_1218 = tommorow.find_all("td")[6].text
rain_1824 = tommorow.find_all("td")[7].text
format関数を使って定型文を作り、そこにあてはめるようにします。
message = """
明日の天気は{}
最高気温は{}
最低気温は{}
降水確率は
0-6時:{}
6-12時:{}
12-18時:{}
18-24時:{}
です""".format(weather, high, low, rain_06, rain_612, rain_1218, rain_1824)
そして仕上げ。
auth = {"Authorization": "Bearer " + token}
content = {"message": message}
requests.post(url, headers=auth, data=content)
これで実行すれば自分のLINEに通知が!!!
感動しました。
エンジニアっぽいことができました。(笑)
追加でタスクスケジューラを使って毎日20時に送られてくるように設定をします。
これで完成です。
あとは雨予報なら送るとか追加してもよかったかもしれないです。
まとめ
はじめて完全業務外でこういったものを作ってみましたが、
先輩、上司の方が自分の作りたいものを作るのが一番勉強になる。と言っていた意味が分かったような気がしました。
楽しい...と思いながらできたので満点です。
これからもいろんなもの作っていきたいです、AIとか非常に気になる...。