8
4

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.

40 代おっさんPythonを使って自分あてに指定したLINEを送る

Posted at

本記事ついて

本記事は プログラミング初学者の私が学習していく中でわからない単語や概要をなるべくわかりやすい様にまとめたものです。
もし誤りなどありましたらコメントにてお知らせいただけるとありがたいです。

参考資料

https://www.udemy.com/course/python-kaizen/learn/lecture/26849736#overview

目標

LINE Notifyを使い、Webスクレイピングを行って、明日の天気予報を自分のLINEに送る。

環境

以前はCloud9を使用していましたが、今回はExcelのため変えることにしました
Windows 10
Jupyter Notebook
そのため構文に少し違いがあります。
気を付けてください

LINE Notify

LINE Notifyとは
LINEと外部のWebサービスやアプリを連携し、ユーザーがカスタマイズされた好みの情報を受け取ることができる機能

アクセストークン発行

自分が書くより説明がしっかりなされていたのでこちらを参照してください

https://qiita.com/iitenkida7/items/576a8226ba6584864d95

コピーしてメモ帳へ

エンドポイントURLを取得

こちらはマイページに行って
トークン発行の下にある
LINE Notify API Documentをクリック
そちらの通信系(認証系もあるので注意)のPOSTから先の部分をコピーしてメモ帳へ

Jupyter上でトークンとエンドポイントURLを記述

発行したトークンと
エンドポイントURL
Jupyter上で

token="ご自身のアクセストークン"
url="https://notify-api.line.me/api/notify"

実行する

requestsをインポート

requestsとは
PythonのHTTP通信ライブラリです。
使い方は
こちらのほうがわかりやすいので
https://hibiki-press.tech/python/requests_module/1882

実際にLINEに送ってみる

auth={"Authorization":"Bearer "+token}
content={"message":"利樹大好き"}
requests.post(url,headers=auth,data=content)

LINE NotifyからLINEが来たと思います。

天気予報をWebスクレイピングする

BeautifulSoup4

BeautifulSoup4とは
HTMLファイルやXMLファイルからデータを抽出するためのPythonライブラリ

BeautifulSoup4インストール

!pip install BeautifulSoup4

BeautifulSoup4インポート

from bs4 import BeautifulSoup

天気の情報を取ってくる

今回はYahoo天気を使います
urlを変数に格納

tenki_url="https://weather.yahoo.co.jp/weather/jp/1b/1400.html"

urlの情報を変数に格納

response=requests.get(tenki_url)

今のままではtext情報がすごい分かりずらくなるので
BeautifulSoupを使いわかりやすくする。
そしてそれを変数に格納

html=BeautifulSoup(response.text,"html.parser")

必要な情報を取ってくる

このままだと情報がありすぎるので必要な情報を精査する
find_allメソッドを使う
attrsで属性を指定
リストの中にあるので必要な個所を取り出す[]を使って配列を指定
変数に格納

forecast=html.find_all("div",attrs={"class":"forecastCity"})[0]

明日の天気が欲しいのでそれも精査する

tomorrow=forecast.find_all("div")[1]

必要な個所に限定し余計な文字、スペースを取る
textで情報を取得
余計な文字は
replaceで除去
変数に格納

weather=tomorrow.find_all("p",attrs={"class":"pict"})[0].text.replace("\n","").replace(" ","")

同じ要領で必要個所の抽出

最高、最低気温

high=tomorrow.find_all("li")[0].text
low=tomorrow.find_all("li")[1].text

書く時間の降水確率

rain_06=tomorrow.find_all("td")[4].text
rain_0612=tomorrow.find_all("td")[5].text
rain_1218=tomorrow.find_all("td")[6].text
rain_1824=tomorrow.find_all("td")[7].text

LINEに天気の情報を送る

messageに天気の情報を格納する

\nで改行する方法もあるのだが水らくなるため
""""""を使って改行する

message="""
明日の天気は{}
最高気温{}
最低気温{}
降水確率は
0-6時{}
6-12時{}
12-18時{}
18-24時{}
です。""".format(weather,high,low,rain_06,rain_0612,rain_1218,rain_1824)

送ってみる

auth={"Authorization":"Bearer "+token}
content={"message":message}
requests.post(url,headers=auth,data=content)

できました~~
分かりにくいのでまとめたコードを作って見ました

import requests
from bs4 import BeautifulSoup

#LINEにつなげるトークン
token="ご自身のアクセストークン"
#エンドポイント
url="https://notify-api.line.me/api/notify"
#Yahoo天気のURL
tenki_url="https://weather.yahoo.co.jp/weather/jp/1b/1400.html"

#天気情報を取ってくる
response=requests.get(tenki_url)
html=BeautifulSoup(response.text,"html.parser")
forecast=html.find_all("div",attrs={"class":"forecastCity"})[0]
tomorrow=forecast.find_all("div")[1]

#各情報を文字化
weather=tomorrow.find_all("p",attrs={"class":"pict"})[0].text.replace("\n","").replace(" ","")
high=tomorrow.find_all("li")[0].text
low=tomorrow.find_all("li")[1].text
rain_06=tomorrow.find_all("td")[4].text
rain_0612=tomorrow.find_all("td")[5].text
rain_1218=tomorrow.find_all("td")[6].text
rain_1824=tomorrow.find_all("td")[7].text

#LINEに送るメッセージを作る
message="""
明日の天気は{}
最高気温{}
最低気温{}
降水確率は
0-6時{}
6-12時{}
12-18時{}
18-24時{}
です。""".format(weather,high,low,rain_06,rain_0612,rain_1218,rain_1824)

#LINEに送る
auth={"Authorization":"Bearer "+token}
content={"message":message}
requests.post(url,headers=auth,data=content)
8
4
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
8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?