【LINE APIと天気予報API】を活用して天気予報を毎朝自動送信する

### 概要
LINE APIと天気予報APIを使用して毎朝指定時刻に天気予報を自動送信させる。
毎朝天気アプリを開いて確認するのが面倒なため、アラームが鳴った際にほかの連絡も合わせて天気も同時に確認したいので作成しました。

### 使用ツール
LINE API、天気予報API、Python、GitHub、GitHub Actions

### 流れ
LINE Developersで新規チャネル作成 → PythonでLINE APIと天気予報APIをimport → 完成したプログラムをGitHub Actionsでデプロイ 
### 完成例
![スクリーンショット 2023-04-23 204528.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3087483/8a74f058-839c-0186-8e25-38d5e1d576bf.png)
上記画像のように毎日7時にメッセージを送信するようになってます。


#### 使用したAPIのドキュメント等確認したい方は貼っておきます。
・ [LINEAPI](https://developers.line.biz/ja/docs/messaging-api/)
・ [天気予報API](https://weather.tsukumijima.net/)
・ [GitHub Actions](https://docs.github.com/ja/actions)


まずはLINEの公式アカウントを準備します。
https://developers.line.biz/ja/
こちらのページからMessaging APIを選択しアカウントを作成してください。
作成後にPythonで使用するための下準備として
`!pip install line-bot-sdk`でライブラリをインストールします。
そして使用する情報は、作成した公式LINEからアクセストークンとIDを引っ張ってきます。
ユーザーIDはLINEdeveloperの作成したアカウントのチャンネル基本設定の最下部に[あなたのユーザーID]があるのでそちらを使用します。
同じ要領で次はMessaging API設定のところの最下部にチャンネルアクセストークンがあるのでそちらを使用し、jsonで保存します。

###以下は上記のIDとアクセストークンを保存するjsonファイル(例)  後からPythonでimportします。

` {CHANNEL_ACCESS_TOKEN:"ここにLINEのアクセストークンを挿入してください"
USER_ID:"ユーザーIDを挿入してください"}`


``` python:main.py
import json #こちらで先ほど作成したjsonファイルをimportしています。
from linebot import LineBotApi
from linebot.models import TextSendMessage
import requests

#-----------------------天気関係
url = "https://weather.tsukumijima.net/api/forecast/city/120010"  
payload = {"city":"120010"}  #このcityの指定コードだと千葉を指す。その他の県は最初に貼った参考リンクの天気予報APIのサイト参照してください。
tenki_data = requests.get(url, params=payload).json() 

#print(tenki_data)      --すべてのデータがjson形式で出力される


#タイトル(県名出力)
print(tenki_data["title"])

#日付
day="日付 :"+tenki_data["forecasts"][0]["date"]

#天気
weather="天気 :"+tenki_data["forecasts"][0]["telop"]

#気温
celsius = "最高気温 :"+tenki_data["forecasts"][0]["temperature"]["max"]["celsius"]+"°"

#風速
wave="風速 :"  +   tenki_data["forecasts"][0]["detail"]["wave"]

#降水確率 (0時~06時の観測データ)
rain="降水確率 :"  +   tenki_data["forecasts"][0]["chanceOfRain"]["T12_18"]


##-------------------------lineAPI関係

file = open('作成したjsonのファイル名.json','r')   #rはreadモード
info = json.load(file)



CHANNEL_ACCESS_TOKEN = info['CHANNEL_ACCESS_TOKEN']
line_bot_api = LineBotApi(CHANNEL_ACCESS_TOKEN)



def main():
    USER_ID = info['USER_ID']
    messages = TextSendMessage(text = "今日の天気をお知らせします。\n"
    + day +"\n"+ weather+ "\n"+celsius+"\n"+ wave +"\n"+ rain
)
    
    
    
    #line_bot_api.push_message(USER_ID,messages = messages)  自分のみに送る
    
    #全員に送るブロードキャストテスト
    line_bot_api.broadcast(messages = messages)
    
if __name__ == "__main__":
    main() 
```

こちらでPythonで天気情報APIとLINEAPIを使用してメッセージを送るコードの完成です。

実際に動作すると作成した公式LINEからメッセージが送信されます。

### 次はGitHub Actionsでデプロイします。
ますはGitHubでリポジトリを作成してください。
その後、そのリポジトリにaddしてcommitしてpushしてください。
そうしたらGitHubからActionsを選択して、simple workflowを選択してymlファイルを作成します。
ymlファイルは[こちらをコピーして使えます。](https://github.com/kazuki178/Public_ChatBot/blob/master/.github/workflows/main.yml)

こちらのgithub上のymlファイルは午前の7時に実行されるため以下の変更を加えると即時実行がおこなわれます。
```
sample.yml
# ワークフロー名
name: test_chatbot

# 発火タイミング
# 日本時刻の朝7時に定期処理(分 時 日 月 曜日)
# UTC の 02:00 は JST だと 11:00 。
# 曜日指定には [0, 6] の整数を使います。 0 が日曜日、 6 が土曜日です。
# 実はgithub actionsのcronの時刻はUTCなので、日本時間に合わせるために日本時刻から9時間マイナスで設定する必要があります。
on:
  schedule:
    push: #ここの行をpush:に変更することで即時実行ができます。

## --------ここから先の行は変更なし。
```




そしてこのymlファイルをGitHubで go to fileさせるとgithubで実行され７時を指定していれば毎日7時に実行されるようになります。

・ [一連ファイルを載せたGitHub](https://github.com/kazuki178/Public_ChatBot)


### 最後に

TwitterAPIが使用するのに厳しくなったり、ライブドアの天気予報APIも廃止され残念ですが、色々探してみると楽しいですね。
LINEのAPIとほかのAPIを使用して何か作成しようとするといろいろできそうで、今度作ってみようと思います。