7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LINE notifyで天気通知

Posted at

[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とか非常に気になる...。

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?