コンテンツへスキップ
Tutorial

1 回の呼び出しで空気品質を確認できる無料の天気 API

| 6 min read

1 つの API キー、2 つのエンドポイント、および任意の都市の現在の気温と PM2.5 を返す 40 行の Node.js 関数。 製品層のアップグレードはありません。

City skyline with haze representing weather and air quality data
Photo by NASA on Unsplash

山火事通知アプリ、ランニングルート プランナー、または e コマース バナーを構築しているとします。 地域の空気の質に反応します。 現在の気温、雨の状況、PM2.5 が必要です 同じ API から。 人気のある気象プロバイダーはすべて、別の製品で大気の質を管理しています。 層、個別の API キー、またはエンタープライズ契約。 月に40ドル支払う必要はない 外でジョギングしても安全かどうかをユーザーに伝えます。

Botoi API が提供するもの /v1/weather/current そして /v1/air-quality/check 同じフリーキー上で。 2 つの POST エンドポイント、JSON in と JSON サインアップすると、1 日あたり 1000 件のリクエストが送信されます。

AQI がペイウォールの後ろに隠れている理由

OpenWeatherMap は、大気汚染 API をアップグレードとして販売しています。 無料プランでは現在の天気がカバーされます 5 日間の予報ですが、過去の大気質とより高い AQI コール制限は現在も生きています。 プロフェッショナル層とエンタープライズ層は月額 40 ドルから。 別の API キーも持ち歩きます 製品ファミリーごとに異なるため、趣味のプロジェクトでは 2 つのダッシュボードをやりくりすることになります。

WeatherAPI.com は月に 100 万回の無料通話を宣伝しており、天気に関してはそれを実現しています。 大気質は Pro プランにバンドルされています。 AccuWeather は、AQI をエンタープライズ層に維持します。 営業電話ゲート。 Tomorrow.io は、1 ページで済むほど低い料金上限のトライアルを提供します。 リフレッシュすると予算が使い果たされてしまいます。

プロバイダー 無料枠の通話 AQIは無料ですか? 認証 エンドポイントの結合?
出版された 匿名で 5/分、鍵ありで 1000/日 はい 1 つのキーで両方に対応 2 つの POST エンドポイント、1 つのキー
天気マップを開く 1000/日 いいえ (有料アップグレード) 製品ごとに個別のキー いいえ、製品間で分割します
WeatherAPI.com ~100万/月 いいえ (プロレベル) ワンキー、プロゲート 単一エンドポイント、Pro のみ
アキュウェザー 50/日トライアル いいえ (エンタープライズ) 売上ゲート型 いいえ

ワンカールで現在の天気を取得

/v1/weather/current エンドポイントは都市名、郵便番号、または緯度/経度を受け入れます ペア。 摂氏と華氏の両方で温度、湿度、風速、テキストを返します。 条件、独自のスプライト シートにマッピングできるアイコン キー、および解決された座標。

応答:

待っててください lat そして lon フィールド。 あなたは彼らに直接餌を与えます これにより、2 回目のジオコーディング呼び出しが無駄にならないようになります。

2 番目のカールに空気の質を追加する

/v1/air-quality/check エンドポイントは緯度/経度を取得し、米国 EPA Air を返します 品質指数、カテゴリーラベル、および個々の汚染物質濃度。 PM2.5とPM10 ほとんどのヘルスケアアプリが気にする 2 つの数字です。 残りはオゾン、二酸化窒素、 より厳密な使用例では、二酸化硫黄、一酸化炭素が使用されます。

応答:

AQI が 62 で「中程度」のラベルは、ほとんどの人が外出できるが、喘息のある人は誰でも外出できることを意味します。 ゆっくりするべきだ。 の aqi_category フィールドを使用すると、数値をバケット化する手間が省けます 自分自身で作成し、UI コピーを EPA の公式言語と一貫性のあるものに保ちます。

両方を 1 つの Node.js 関数で結合します

ほとんどのアプリは、都市ごとに 1 つの番号を必要とし、都市全体に分散した 2 つの別々の往復を必要としません。 コードベース。 この 40 行の関数は両方のエンドポイントをラップし、タイムアウトを処理し、マージされた結果を返します。 任意のダッシュボードにドロップできるオブジェクト。

2 番目の呼び出しには最初の呼び出しからの座標が必要であるため、この関数は 2 つの連続した呼び出しを実行します。 以前のリクエストからすでに lat/lon がキャッシュされている場合は、両方の呼び出しを並行して実行します。 Promise.all レイテンシーを半分に短縮します。 ノード 20+ にはネイティブがあります fetch そして AbortControllerなので、axios や node-fetch は必要ありません。

コードを使用した 3 つの実際の用途

ランニングルートプランナー

フィットネス アプリが屋外ルートを提案します。 PM2.5が急増したり、雷雨が降ってきたりすると、 ルートの提案は一時停止し、屋内の代替案を表示する必要があります。 この関数は次のいずれかを返します。 3 つの状態: 実行、スキップ、勧告。

三状態復帰は重要です。 バイナリの「はい/いいえ」は、実行される中間点を非表示にします。 も問題ありませんが、短い方がスマートです。 敏感なユーザーはニュアンスを理解し、あなたは避けます 慎重すぎるアラートで経験豊富なランナーをイライラさせます。

空気清浄機の電子商取引バナー

家庭用品店では空気清浄機を販売しています。 訪問者が AQI が 100 を超える都市から到着すると、 この製品は本当に役に立つので、表面化してください。 空気がきれいなときは、バナーを非表示にしてください。 恐怖マーケティングとは思えません。

自分で条件を取得する /api/conditions API キーを維持するためのプロキシ サーバー上で。 都市ごとの結果をエッジで 30 分間キャッシュします。 AQI は十分にゆっくりと動きます 店頭のバナーには 30 分以内の鮮度で十分です。

天候バッファーを使用した配送予定時刻

配達アプリには 25 分の到着予定時刻が表示されます。 ライダーの街で大雨が降った場合、さらに 10 分かかることになります。 雷雨は 20 度を意味します。ETA を表示する前にバッファを追加すると、がっかりするのを防ぐことができます。 遅れたライダーを追跡する顧客。

バッファーのルールは単純にしてください。 ドライバーと顧客はどちらも、目的地内に着陸するETAを信頼しています。 窓を閉めたり、雨天時に 10 ~ 20 分間パッドを入れるのは、防御的というよりも正直なほうです。

レート制限とキー

匿名アクセスでは、IP ベースで 1 分あたり 5 件、1 日あたり 100 件のリクエストが許可されます。 それで十分です サインアップせずにデモを作成したり、個人的なプロジェクトを作成したりできます。

無料のキーにサインアップするには、 botoi.com/api 上限を 1000 リクエストに引き上げます 1日あたり。 同じキーが天気と大気質の両方に加えて、190 以上の他のエンドポイントにも機能します。 プラットフォーム。 429 を押すと、API は を返します。 Retry-After 数秒でヘッダーが表示されるので、 クライアントはきれいに撤退できます。

重要なポイント

  • /v1/weather/current 都市、郵便番号、または緯度/経度を取得して気温を返します。 湿度、風、文字の状態、座標。
  • /v1/air-quality/check 緯度/経度を取得し、US EPA AQI (カテゴリ ラベル) を返します。 PM2.5、PM10、O3、NO2、SO2、COの測定値。
  • 両方のエンドポイントは 1 つの API キーを共有します。 他のプロバイダーはすべて、AQI に追加料金を請求するか、AQI を非表示にします 企業の門の後ろ。
  • 無料利用枠では、匿名で 1 分あたり 5 件のリクエスト、キーを使用した場合は 1 日あたり 1000 件のリクエストがカバーされます。 応答は次のとおりです。 Cloudflare Workers でエッジキャッシュされ、100 ミリ秒未満のレイテンシーを実現します。
  • 天気予報を 15 分間、AQI を 30 分間アプリにキャッシュします。 どちらも十分な速さで動きません リアルタイムのポーリングが必要であり、キャッシュにより、負荷が重い場合でも無料枠内に留まります。 ダッシュボード。

FAQ

API はどの AQI スケールを使用しますか?
/v1/air-quality/check エンドポイントは、米国 EPA 大気質指数を返します。0 ~ 500 は良好、51 ~ 100 は中程度、101 ~ 150 は敏感なグループにとって不健康、151 ~ 200 は不健康、201 ~ 300 は非常に不健康、301 以上は危険です。 aqi_category フィールドにはラベルが付けられるため、自分で数値をバケット化する必要はありません。
気象データはどれくらい新鮮ですか?
現在の状況は国の気象サービスから 1 時間ごとに更新されます。 ほとんどのダッシュボード、通知アプリ、電子商取引のユースケースでは、1 時間ごとの観察で十分な精度が得られます。 航空警報や悪天候警報について分単位の更新が必要な場合は、あまり積極的にキャッシュせず、オンデマンドで呼び出します。
郵便番号で機能しますか、それとも緯度/経度のみで機能しますか?
両方。 {"city": "San Francisco"} または {"city": "94107"} を /v1/weather/current に送信すると、API がそれをジオコーディングします。 応答には lat フィールドと lon フィールドが含まれているため、別のジオコーディング呼び出しを行わずに、これらのフィールドを /v1/air-quality/check に直接フィードできます。
複数の都市に対応するバッチ エンドポイントはありますか?
気象エンドポイントは、リクエストごとに 1 つの都市を処理します。 複数の都市の場合は、クライアント側で Promise.all を使用してファンアウトします。 無料枠では 1 分あたり 5 つのリクエストが許可されるため、バーストごとに最大 5 都市まで可能です。 より重いバッチ ジョブの場合、無料の API キーにより、上限が 1 日あたり 1000 リクエストに引き上げられます。
レート制限に達するとどうなりますか?
API は、数秒以内に Retry-After ヘッダーを含む HTTP 429 を返します。 表示された値を元に戻して再試行してください。 この期間は、匿名アクセスの場合は 1 分単位であり、キー付きアクセスの場合は 1 日単位です。 429 を明示的に処理して、ダッシュボードから天気予報の最新情報を黙って削除しないようにします。

botoiで開発を始めよう

150以上のAPIエンドポイント。検索、テキスト処理、画像生成、開発者ユーティリティに対応。無料プラン、クレジットカード不要。