関連記事
CRONを使ったプログラミングの実演「お天気通知アプリ」
この記事の動画版はこちら(画像クリックでYoutubeに飛びます)
今回作るツールは・・・
今回は、CRONの活用事例として、毎朝自分の住んでいる地域の天気を自動取得して、今日の天気に応じたメッセージを自分宛てにメールで送ってくれるアプリを作ってみます。
例えば、
晴れなら ⇒「布団を干しましょう」
雨なら ⇒「傘を持っていきましょう」
といった感じで毎朝知らせてくれるアプリですね。
ということで、早速作っていきましょう!
設計
まずは簡単に設計していきます。
①天気予報データは、天気予報APIから取得します。
②取得したデータを元に送るメッセージを作成し、
③自分宛てにメールで送る。
④このプログラムをCRONを使って、毎朝7時に自動実行させます。
こんな感じでいきましょう。
技術的には、「PHP」と「WebAPI(天気予報API)」「CRON」を使って実現します。
WebAPIやCRONという言葉の意味や基礎知識についてはそれぞれ別の動画で説明しているので、そちらも是非ご覧ください。
天気予報APIから現在の天気を取得
それでは、プログラミングしていきましょう!
まずは、天気予報APIから今日の天気を取得してみます。
$area = 'Tokyo,JP'; $api_url = 'https://api.openweathermap.org/data/2.5/weather?q='.$area.'&appid='.OPEN_WEATHER_APP_ID.'&lang=ja&units=metric'; $response_data = json_decode(file_get_contents($api_url), true); var_dump($response_data);
実行すると、データが取得できていますね。
天気の情報は、「weather」「0」「main」に入っているようなので、これを取得します。
$current_weather = $response_data['weather'][0]['main'];
現在の天気に応じたメール文面を作成
次は、取得した天気によって条件文を書いて、メッセージを作成します。
取得される天気の種類は全部で7種類のようなので、これをswitch文で分岐処理します。
①Thunderstorm「雷雨」
②Drizzle「霧雨」
③Rain「雨」
④Snow「雪」
⑤Atmosphere「霧」
⑥Clear「晴れ」
⑦Clouds「曇り」
文面は、とりあえず簡単にこんな感じにしておきましょう。
$mail_body = ''; switch ($current_weather) { case 'Thunderstorm': $mail_body = '今日は雷雨です。無駄な外出は出来るだけ控えましょう!'; break; case 'Drizzle': $mail_body = '今日は霧雨です。傘を持っていきましょう!'; break; case 'Rain': $mail_body = '今日は雨です。傘を持っていきましょう!'; break; case 'Snow': $mail_body = '今日は雪です。ダイヤの乱れに注意!'; break; case 'Atmosphere': $mail_body = '今日は霧です。視界に注意!'; break; case 'Clear': $mail_body = '今日は晴れです!布団を干しましょう!'; break; case 'Clouds': $mail_body = '今日は曇りですが、気持ちは晴れやかにいきましょう!'; break; }
自分宛てにメール送信
これを自分宛てにメール送信すれば、OKですね。
if ($mail_body) { mb_send_mail(MAIL_ADDRESS, '【CRON】今日の天気', $mail_body); }
※今回は、エラー処理等は実装していないですが、自分用のサンプルツールなのでとりあえず動けばOKとします。
ここで一度、ブラウザで直接実行して確認してみましょう。
メールが飛んできました。
今現在の天気は「雨」のようですね。
うまく動いているようなので、あとはこのプログラムを毎朝決まった時間に自動実行させれば完成です。
CRONで毎朝7時に自動実行
自動実行には「CRON」という仕組みを使います。
毎朝7時に実行させるようにしましょう。
00 07 * * * /usr/bin/php /var/app/tools/daily_weather.php
これで、後は放置しておけば明日の朝7時から毎朝自動実行されて、メールでお知らせしてくれます。
作業結果まとめ
ということで、今回は「今日の天気予報を取得して、天気に応じたメッセージを自動で送ってくれるアプリ」を作ってみました。
プログラミングを使えば、こんな風に好きなデータを取ってきて自動化することもできます。
今回のアプリは天気をお知らせするというとてもシンプルなものなので、これだけなら他にも似たようなアプリはあるのでわざわざ作るほどでもないかもしれませんが、これをベースに色々と独自のカスタマイズをして拡張させていくことができます。
例えば、Todoと連動させたりとか、子供に通知したりとか、アイデア次第で色々応用できそうですね!また、メールだけでなくLINEで送るようにバージョンアップするのも面白そうです。
自分で作ると、こうやって自分好みにカスタマイズできるところが良い所です。
皆さんも良ければオリジナルの通知アプリを作ってみてください!