読んでくださりありがとうございます。
プログラミングの学習を進める上で何かを実際に作ってみることはとても大事だなと感じています。
中でも役に立つものを考えて、実装できれば喜びも倍増です!
今回はWebから天気情報を取得してLINEで自動通知をしてみました。定期実行までやりますので、かなり使えるかなと思います。
実際の通知画面
先に完成図をイメージできると実装もしやすいと思います。
実際の通知画面がこちらになります。
基本的に自分好みにカスタマイズできます。
コメントを入れてみたり、降水確率を入れてみたり、今回はやっていませんが画像なんかも入れることができます。
もちろん天気情報以外にも定期的に取得する情報を通知させることが可能ですので、概要を把握したら実際に自分で組んでみてください\\٩( ‘ω’ )و //
天気情報を取得
まずはWebから情報を取ってくる必要がありますよね。
tenki.jpを対象として、試しに横浜市の天気情報を取っていきましょう!
簡単にするために、取得する情報は
今日の日付、天気、最高気温、最低気温の4つを対象としましょう!
コードはこんな感じです⬇︎
import requests
from bs4 import BeautifulSoup
#欲しい情報があるURLからHTML情報を取得する
url2 = "https://tenki.jp/forecast/3/17/4610/14100/"
res = requests.get(url2)
soup = BeautifulSoup(res.content, 'html.parser')
#以下で各情報を取得
hiduke = soup.find(class_="left-style").text
telop = soup.find("p", class_="weather-telop").text
highlists = soup.find("dd",class_="high-temp temp").text
lowlists = soup.find("dd",class_="low-temp temp").text
実行してみると
うまく情報が取り出せていますね!
requestsやBeautifulSoupについてあまり知らないよという方は以下記事を参考にしてください
LINEに通知させる
LINE Notifyに登録する
ほとんどの人が登録してると思いますが、LINEに登録していない方はぜひこの機会に登録しておいてください!
LINEではLINE Notify が提供されていますので、これを使います
まずは右上のログインを押して、自分のLINEアカウントでログインします。
ログインしたら、
再度右上の同じところをクリックします。プルダウンメニューが現れますので、マイページをクリックします。
以下の画像のように表示されるので、トークンを発行するをクリックします。
すると、LINE上で作成されているグループと”1:1でLINE Notifyから通知を受け取る”が含まれる以下のような画面が現れます。
トークン名は自分が何を通知させたいかによって変更するのがいいと思います。
天気を通知させたいなら”天気情報”とか株価なら”今日の株価”とかですね。
トークン名を入力したら、自分一人に通知するのか、もしくはどのグループに通知するのかを選択します。
選択したら、発行ボタンが緑色になるので、発行ボタンを押します。
トークンが発行されますので、しっかりとコピーをし、メモなどに貼り付けて保管しておきましょう!!
試しにLINEに通知してみる
上記で取得したアクセストークンを使用して、ちゃんと通知が届くかを確認してみましょう!
以下がコードです(Pythonで記述しています)
import requests
#LINE API必須設定
url = "https://notify-api.line.me/api/notify"
access_token = '上で取得したトークンをここに貼り付ける'
headers = {'Authorization': 'Bearer ' + access_token}
#message送信
message = 'ここに送りたい文を記述する'
payload = {'message': message}
r = requests.post(url, headers=headers, params=payload,)
5行目と9行目の2箇所にそれぞれトークンと文を書きます。
”上で取得したトークンをここに貼り付ける”=LINE Notifyで取得したトークンを貼りつける
”ここに送りたい文を記述する”=通知の確認をするだけなのでなんでもOK!!
かけたらtest.pyファイルで名前をつけて保存して、実行しましょう!(ファイル名はなんでも良いですが、ここではtest.pyとします)
ターミナルもしくはコマンドプロンプトから
$ python3 test.py
で実行し、自分が書いた文がLINE Notifyから通知が来ていればOKです!
まとめる
上で紹介したコードをまとめて、通知したい文を加えると以下のようになります。
import datetime
import urllib.request as req
import requests
from bs4 import BeautifulSoup
import re
#LINE notifyの設定を行う
url = "https://notify-api.line.me/api/notify"
access_token = '○○○○○'
headers = {'Authorization': 'Bearer ' + access_token}
#天気サイトから欲しい情報を取得する
url2 = "https://tenki.jp/forecast/3/17/4610/14100/" #欲しい情報があるURLを指定
res = requests.get(url2) #上記URL情報を取得する
soup = BeautifulSoup(res.content, 'html.parser') #取得した情報をhtmlで解析する
# 以下各種情報を取得
ddd = soup.find(class_="left-style")
telop = soup.find("p", class_="weather-telop").string
highlists = soup.find("dd",class_="high-temp temp")
lowlists = soup.find("dd",class_="low-temp temp")
ttt = soup.find(class_="rain-probability")
row=[]
for t in ttt:
row.append(t)
# message変数に通知したい文を代入する 改行したい場合は "\n" とダブルクォテーションで囲う
message="\n" + ddd.text + "\n" + telop + "\n" + "最高 " + highlists.text + "\n" + "最低 " + lowlists.text + "\n"+ "---------" + "\n" +row[1].text +"\n" + "~6 : " + row[3].text + "\n" + "~12 : " + row[5].text +"\n" + "~18 : " + row[7].text +"\n" + "~24 : " + row[9].text +"\n" +"今日も元気に٩( 'ω' )و "
payload = {'message': message}
r = requests.post(url, headers=headers, params=payload,)
これで実行したいコードを準備できました!
定期実行
実行したいコードファイルが準備できたら、定期実行の設定をするだけです!
私はMacを使用しているので、Macの説明を行います。
Macには標準でcronという定期実行を行えるツールがあります。
cronからパソコン上ファイルにアクセスできるように設定をします。これをしておかないと実行が許可されません。
順序は以下です。
- システム環境設定を開く
- セキュリティとプライバシーをクリック
- プライバシーのタブに移動し、フルディスクアクセス をクリック
- 左下に表示されている鍵マークをクリック
- macのロックを解除するときに使うパスワードを入力
- プラスの矢印をクリック
- command+shift+Gのキーを同時に押す
- 「/usr/sbin/cron」と入力し、/usr/sbin/の中のcronが選択された状態を確認し、開くをクリック
- cronが追加され、チェックがついていることを確認したら、もう一度左下の鍵マークをクリックしてロックをかければ完璧!
ターミナル(コマンドプロンプト)を開き、以下のコマンドを入力
$export EDITOR=vim
これでエディターを開くときに自動でvimを開いてくれるようになります。
以下のコードを実行し、出力された情報をコピーしておきましょう。あとで使います。
$echo $PATH
これでPythonを実行する際にどこのファイルを使用しているのかを把握します。
次に、以下のコードを入力しEnterでcrontabが開かれます。上記の設定でvimで開かれます。
crontabで定期実行するcronを設定します。
$crontab -e
最初は何も記述されていない状態になっているので、ここに必要な情報を入力していきます。
そのまま入力しても反応してくれません。
編集モードにするためにキーボードの ” i ” を押すと、編集モードとなり文字を入力できるようになります。
最終的な形としては以下のような感じです。
PATH= "上の$echo $PATHで得られた情報をここに貼り付ける"
# (分) (時) (日) (月) (曜日) (実行するコマンド)
0 7 * * * python3 /Users/ユーザ名/Documents/LINE/cron_line.py >> /Users/ユーザ名/Documents/python_cron/cron.log 2>&1
まずはPATHを設定します。先ほど$echo $PATHで取得した情報をPATH=の後ろにペーストするだけでOKです。
それが終えればあとはいつ実行するかの設定です。
(分) (時) (日) (月) (曜日)の並びで設定していきます。
それぞれ入力できる数字は決まっていて、
(分)0から59まで
(時)0から23まで
(日)1から31まで
(月)1から12まで
(曜日)0から7まで
曜日に関しては0は日曜日を、1は月曜日、2は火曜日・・・と進み7ではまた日曜日を表すことになります。曜日以外に関しては直感的にわかりますね。
例えば毎日7時に実行したい!であれば
0 7 * * *
と入力します。この * はその項目の全部を表しています。
定期実行時間を設定できたら、その後ろに実行したいコードファイルが保存されているディレクトリを入力します。
入力したらログファイルを残しておきたいディレクトリを>>とともに入力し、最後に2>&1を入力すれば完成です!!
>> /Users/ユーザ名/Documents/python_cron/cron.log 2>&1
あとは編集モードを終える必要がありますのでescボタンを押して「:wq」 と入力しEnterで上書き保存され、crontab設定画面から抜け出すことができます!
編集したけど、やっぱり保存したくないやって時は「:q!」を入力してEnterで変更内容を破棄して、crontab設定画面から抜け出すことができます。
まとめ
ここまで読んでくださった方!お疲れ様でした!!
読むのもだるくなりそうですよね。
私は記事を途中まで書いてしばらく放置してしまっていました。反省。
何事もそうですが、やりきると達成感と多少なりとも自信がつきますので、ともに挑戦を続け、やりきっていく機会を増やしていきましょう!!
コメント