🙌

Railwayで無料の天気予報Discord Botを実装した

2024/12/19に公開

開発目的

家と学校が遠く、天気が異なることがあった。とはいえ毎朝天気を確認するのも面倒なので、毎朝定刻に両地点の天気を一括して取得し通知するbotを作ろうと考えた。

動作環境

windows 11
Ubuntu 24.04.01 LTS
python 3.12.3

開発の流れ

githubでリポジトリを作成

Railwayにデプロイするときgithubのリポジトリからcloneすることが出来ます。
この方法が他の方法に比べ圧倒的に楽なので作っておくことを推奨します。
この際.gitignoreに環境変数を保存する.envファイルと仮想環境のディレクトリを入れておきましょう。

.envを使用しないと天気予報のデータを取得するためのデータから住所などが特定されてしまうおそれがあります。
またUbuntuだとpipコマンドがつかえないことがある(?)ので仮想環境を使って、その中でインストールしましょう。

.envファイルについて
https://qiita.com/shunii/items/5b26f14fc0d2f64de8f6

仮想環境について
https://qiita.com/fiftystorm36/items/b2fd47cf32c7694adc2e

Discord botの導入

以下のサイトを参考に作成しました。
こちらのサイトはGlitchでデプロイしているのに対し、当記事ではRailwayで行っています。
https://note.com/exteoi/n/n00342a623c93

天気情報の入手

天気予報を教えてくれるAPIを入手します。
Open-Meteoというサイトを利用しました。
こちらのサイトは無料利用できるうえ、APIキーの取得なども必要ないので此方のサイトをお勧めします。

https://open-meteo.com/

このサイトにアクセスしてヘッダーのAPI Docsをクリックします。
API DocsLocation and TimeのScrachをクリックします。

天気情報を入手したい地点を下図のように英語で打ち込みます。
(今回は千代田区)
Tokyoと出ているやつをクリックすることで東京都千代田区を選択できます。

またTimezoneをAsia/Tokyoにしておきましょう。
複数の地点の情報が欲しい場合はSearchの右の+を押して同様の操作をすることで追加できます。

つづいて、どのくらいの期間の情報が欲しいかをForecast daysで指定します。
今回の開発目的は朝にその日の天気予報を知ることなので1日で十分でしょう。
1 dayを選びます。

次にHourly, Daily Weather Varuablesをそれぞれ選びます。

今回知りたいのは天気、厳密には雨が降るかどうか、つまり降水確率
それに加えて最高気温、最低気温程度なので
HourlyからPrecipitation probability,
Daily からMaximum Temperature, Minimum Temperatureを選択します。

後の設定は特に変更しないで大丈夫だと思います。
ほしいデータがある場合は各々その値を選択してください。

上記の設定をすると以下のようなグラフを得ることが出来ると思います。
グラフが表示されない場合はReload Chartを押してください。

このグラフの下にあるAPI URL(Open in new tab.....)の文をクリックすると以下のような.json形式のデータを入手することが出来ると思います。

実装

pythonで実装します。
Open-MeteoではPython形式のテンプレートが提供されています。
こちらを利用すると効率的に開発できると思います。

実装する際の注意点

指定した時間にメッセージを送るとき、サーバーの時刻は標準時であることに注意してください。
日本は標準時から9時間進んでいるので、指定した時間-9するか、
timezoneを使って時間を日本に合わせてください。

デプロイ

Railwayを利用しました。

https://railway.app/

制限はありますが、無料枠で利用することが出来ます。
今回のレベルのbotでしたら制限下でも十分に動きます。

下記サイトがとても参考になりました。
そのまま実行していただければデプロイできると思います。

https://qiita.com/Erytheia/items/29f26fb349d5592046ae

完成

指定した日時に指定したチャンネルにメッセージが来たら完成です。

最後に

最後まで読んでいただきありがとうございました。
Open-Meteoは比較的簡単にデータを入手できるので初めて開発をしてみようという方におすすめです。
またRailwayも他と比べて簡単に使うことが出来るのでサーバーに迷っている人はぜひ使ってみてください。

Discussion