Node.JS で悪天候のリアルタイム警報システムを構築する

Node.JS で悪天候のリアルタイム警報システムを構築する

序文:

ここ数日、テレビをつけても、短い動画を見ても、河南省鄭州市が予想外の暴風雨に見舞われたことが分かる。特に、地下鉄の駅が洪水で逆流し、閉じ込められた乗客の状況は想像を絶するものだった。死を免れた目撃者たちの投稿をいくつか聞くと、突然の災害とそれに対処する能力のなさに直面した彼らがいかに無力で苛立ちを覚えたかが想像できる。

私たちが拠点を置く鄭州ハイテク産業開発区でも断水と停電が発生しています。この記事を書いている時点では、ラジオとテレビの帯域はまだ信号が回復しておらず、オフィスの同僚は基本的にまだホットスポットに接続して仕事をしています。

この記事では、実用的な観点から始め、NodeJS と、データを集約して完全なリアルタイム気象警報プロジェクト システムを作成するサードパーティの無料インターフェースを使用します。この記事は特に高度なテクノロジー スタックを使用していません。その目的は議論を刺激することです。

ステップ1: 無料の天気予報インターフェースを見つける

インターネット上には気象情報を取得するための無料APIインターフェースが多数存在します。ここで使用しているのは大手メーカーから比較的安定して提供されているデータを集約するものです。

アプリケーションアドレス: https://www.juhe.cn/docs/api/id/73

申請が成功すると、パーソナル センターでリクエスト キーが生成され、インターフェイスの送信時に使用されます。

授業間の10分を利用して、悪天候に対するリアルタイム警報システムを構築する

ステップ2: 天気予報インターフェースを使用してプログラムコードを生成する

集約データの使用手順に従い、インターフェース デバッグ ツールを使用してインターフェースをデバッグできます。ここでは、ApiPost テストを使用します。

授業間の10分を利用して、悪天候に対するリアルタイム警報システムを構築する

リクエストが成功した後の json 形式は次のようになります。

{
    "reason": "クエリが成功しました!",
    "結果": {
        "都市": "鄭州",
        "リアルタイム": {
            "温度": "24",
            「湿度」: 「100」、
            "info": "小雨",
            "幅": "07",
            "direct": "北東の風",
            "パワー": "レベル2",
            "アキ": "32"
        },
        "未来": [
            {
                「日付」: 「2021-07-23」、
                "温度": "23/28℃",
                「天気」:「小雨が曇りに変わる」
                "幅": {
                    "日": "07",
                    「夜」:「02」
                },
                「direct」:「東風が北風に変わる」
            },
            {
                「日付」: 「2021-07-24」、
                "温度": "24/31℃",
                「天気」:「小雨が曇りに変わる」
                "幅": {
                    "日": "07",
                    「夜」:「01」
                },
                「direct」:「北東の風が東の風に変わる」
            },
            {
                「日付」: 「2021-07-25」、
                "温度": "23/31℃",
                「天気」:「曇り」
                "幅": {
                    "日": "01",
                    「夜」:「01」
                },
                「direct」:「東風が南東風に変わる」
            },
            {
                「日付」: 「2021-07-26」、
                "温度": "24/31℃",
                「天気」:「小雨」、
                "幅": {
                    "日": "07",
                    「夜」:「07」
                },
                「直進」:「北東の風」
            },
            {
                「日付」: 「2021-07-27」、
                "温度": "23/31℃",
                「天気」:「小雨が晴れに変わる」
                "幅": {
                    "日": "07",
                    「夜」:「00」
                },
                「直行」:「北東風が南風に変わる」
            }
        ]
    },
    「エラーコード」: 0
}

この時点で、今後 7 日間の天気データを取得しました。

ステップ3: nodemailerを使用してNodeJSでメールを送信する

nodeJS の nodemailer は電子メールの送信に使用され、非常に便利です。次のコマンドを使用してインストールできます。

npm インストール nodemailer

以下は、メールを送信するために作成した関数です。メール アカウントと認証コードは、対応するメール サービス プロバイダーから取得できます。

/**
 * nodeJS メールを送信 *
 * */
関数sendEmail(テキスト){
    nodemailer を require('nodemailer'); とします。
 
    トランスポーターをnodemailer.createTransport({
        service:"126", //メール secure:true, //セキュア送信モード auth:{
            user:"be***[email protected]", // 送信者のメール アドレス pass:"MLQ***PYU" // メール サービス プロバイダーから取得した認証コード。126 メール アドレスを取得するためのアドレスは次のとおりです: https://help.mail.163.com/faq.do?m=list&categoryID=197
        }
    })
 
    mailOptions = {を設定します
        from:"be***[email protected]", // 送信者のメールアドレス。上記の送信者のメールアドレスと同じにしてください to:"[email protected]", // 受信者のメールアドレス。リアルタイムで天気予報を受信するためのメールアドレスです subject:"天気リアルタイム監視システム", // メールの件名 (タイトル)
        text:text // メールエッセイ}
 
    トランスポーター.sendMail(mailOptions,(err,data) => {
        もしエラーが起きたら
            コンソールログ(エラー);
            res.json({status:400,msg:"送信失敗....."})
        }それ以外{
            コンソールにログ出力します。
            res.json({status:200,msg:"メールは正常に送信されました..."})
        }
    })
}
 
// メール送信テスト sendEmail('雨が降っています') 

授業間の10分を利用して、悪天候に対するリアルタイム警報システムを構築する

上記のコードを含む新しい weather.js を作成します。

ノード天気.js

メールの送信をテストできます。

授業間の10分を利用して、悪天候に対するリアルタイム警報システムを構築する

送信に成功しました。メールの受信に成功しました。

ステップ4: nodeJSで天気を定期的に取得し、指定されたメールボックスに送信する

ApiPost の右上隅にある [NodeJS (リクエスト) コードの生成] をクリックすると、NodeJS で集約された天気インターフェースを要求するためのプログラム コードが生成されます。setInterval組み合わせることで、上記の要件を実現できます。

授業間の10分を利用して、悪天候に対するリアルタイム警報システムを構築する

完全なコードは次のとおりです。

/**
 * nodeJS メールを送信 * 
 * */
関数sendEmail(テキスト){
    nodemailer を require('nodemailer'); とします。
 
    トランスポーターをnodemailer.createTransport({
        service:"126", //メール secure:true, //セキュア送信モード auth:{
            user:"be***[email protected]", // 送信者のメール アドレス pass:"MLQ***PYU" // メール サービス プロバイダーから取得した認証コード。126 メール アドレスを取得するためのアドレスは次のとおりです: https://help.mail.163.com/faq.do?m=list&categoryID=197
        }
    })
 
    mailOptions = {を設定します
        from:"be***[email protected]", // 送信者のメールアドレス。上記の送信者のメールアドレスと同じにしてください to:"[email protected]", // 受信者のメールアドレス。リアルタイムで天気予報を受信するためのメールアドレスです subject:"天気リアルタイム監視システム", // メールの件名 (タイトル)
        text:text // メールエッセイ}
    トランスポーター.sendMail(mailOptions,(err,data) => {
        もしエラーが起きたら
            コンソールログ(エラー);
            res.json({status:400,msg:"送信失敗....."})
        }それ以外{
            コンソールにログ出力します。
            res.json({status:200,msg:"メールは正常に送信されました..."})
        }
    })
}
 
setInterval(関数(){
    var リクエスト = require('リクエスト');
 
    var ヘッダー = {
        'User-Agent': 'Apipost クライアント ランタイム/+https://www.apipost.cn/'
    };
 
    var オプション = {
        URL: 'http://apis.juhe.cn/simpleWeather/query?city=%E9%83%91%E5%B7%9E&key=8763efe2a90b025c03e03fef95621cbc',
        ヘッダー: ヘッダー
    };
 
    関数コールバック(エラー、レスポンス、本文) {
        json = JSON.parse(body);
        コンソールログ(json.result)
        if (!エラー && response.statusCode == 200) {
            sendEmail('鄭州の今後の天気' + json.result.future[0].weather)
        }
    }
 
    リクエスト(オプション、コールバック);
 
}, 300000);

この時点で、システムが構築されました。実行するための小さなサーバーを見つけるだけです

ノード天気.js

このコマンドは、指定されたメールアドレスに 5 分ごとに天気情報を送信します。 もちろん、必要に応じて送信することもできます。

注記:

中国語のエンコードはリクエストで問題を引き起こす可能性があるため、都市名をエンコードするのが最適です (右クリック)。

授業間の10分を利用して、悪天候に対するリアルタイム警報システムを構築する

Node.JS を使用してリアルタイムの悪天候警報システムを構築する方法についての記事はこれで終わりです。Node.JS 悪天候リアルタイム警報に関する関連コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Node.js クローラーで天気と日々の挨拶を取得する方法
  • Node.js での中国の天気予報の簡単な実装

<<:  条件付きコメント形式の書き方とサンプルコード

>>:  クリックして展開し、全文を読む機能を実現する純粋なCSS

推薦する

WeChatアプレットコンポーネント開発:視覚的な映画座席選択機能

目次1. はじめに1. コンポーネントデータ2. コンポーネントページのレイアウト1. ロゴエリアの...

mysql order by in の文字順序の詳細な説明 (推奨)

//MySQL ステートメント SELECT * FROM `MyTable` WHERE `id...

MySQL 8.0.12 解凍バージョンのインストールチュートリアル

この記事では、MySQL 8.0.12解凍版のインストールチュートリアルを参考までに紹介します。具体...

jQueryはシャトルボックス機能を実現する

この記事では、シャトルボックス機能を実現するためのjQueryの具体的なコードを参考までに紹介します...

オブジェクト内のフィールドを削除する js メソッド

この記事では主に、オブジェクト内のフィールドを削除するための js の実装を紹介し、次のように共有し...

1 つの記事で Apache Avro データを解析する

概要: この記事では、Avro データをシリアル化して生成し、FlinkSQL を使用して解析する方...

フレームセットを使用してワイドスクリーンを中央に配置するためのヒントを共有する

コードをコピーコードは次のとおりです。 <フレームセット cols="*,1280,...

HTML の ReadOnly と Enabled の違い

ReadOnly 属性を持つ TextBox は、クライアント上で次のマークアップとして表示されます...

XHTML言語のデフォルトCSSスタイル

html、アドレス、引用ブロック、本文、dd、div、 dl、dt、フィールドセット、フォーム、フレ...

Mysql binlog ログファイルが大きすぎる場合の解決策

目次1. 関連するbinlog設定2. binlogに関する詳細設定2.1 バイナリログモードの変更...

MySQL でのトランザクションの使用方法

基礎トランザクションは、SQL ステートメントのグループに対するアトミック操作です。つまり、グループ...

JavaScriptのonclickとclickの違いの詳細な説明

目次addEventListener が必要な理由は何ですか? addEventListener を...

MySQL が innobackupex を使用して接続サーバーをバックアップできない場合の解決策

innobackupex を使用してバックアップする際に MySQL がサーバーに接続できない場合は...

Reactフックとzarmコンポーネントライブラリ構成に基づいてh5フォームページを開発するためのサンプルコード

最近、React Hooks を zarm コンポーネント ライブラリと組み合わせて使用​​し、js...