livedoor 天気互換の天気予報 API をリリースした話

唐突ですが、数日前に 天気予報 API(livedoor 天気互換) なるサイトをリリースしました。
livedoor 天気のサービス終了に伴い利用できなくなった API の代替として利用できます。

Sponsored Link

About

気象庁が配信している天気予報データを、livedoor 天気 API と互換性のある JSON データで返す API です。
ソース元が異なるためいくつか変更点もありますが、概ね livedoor 天気 API の URL と差し替えるだけで、ほとんど既存のコードを変更することなく使えると思います。
詳細は ドキュメントページ に譲るとして、この記事では簡単な概要だけ紹介します。

リクエストパラメータの地域 ID は livedoor 天気 API と同じものを採用しています。リクエストする地域と ID の対応は、livedoor 天気で使われていた 全国の地点定義表 内で「1次細分区(cityタグ)」の ID を参照してください。(例・神奈川県 横浜 = 140010 )
存在しない地域 ID の場合は "The specified city ID does not exist." とエラーになります。

気象庁 HP の地域 ID は livedoor 天気と異なる形式になっており、またページが都道府県ごとに用意されているため、API 側で livedoor 天気互換の地域 ID から気象庁 HP の地域 ID に変換してたりします。

レスポンスフィールドは基本的に互換性を保っているつもりですが、pinpointLocations は気象庁 HP から取得できないため削除しました。このほか、データ元の変更ともなう仕様変更、新たに降水確率の項目を追加したりなども行っています。詳細は 変更点・注意事項 をご覧ください。

注意

個人利用・商用利用ともに OK としますが、注意点として、気象庁から配信されている天気予報をスクレイピングして取得している関係上、予想されていないデータが入ったり html の構造が変わったりがあると 500 エラーになってしまうかもしれません。そのため、天気を「確実に」取得する必要がある用途での利用は推奨しません。 有料サービスなども検討してください。
また、この API を叩くごとに1回、気象庁 HP へのリクエストが行われます。この API を過剰に叩くとこのサーバーが落ちる可能性があるだけでなく、結果的に気象庁のサーバーにまで負荷をかけてしまいます。できるだけ API へのアクセス回数が少なくなるようにコーディングするようお願いします。

異常な量のリクエストを確認した場合、負荷軽減のため当該 IP アドレスからのアクセスをブロックするごとがあります。あらかじめご了承ください。(普通に使ってれば大丈夫です、全国の天気を取得したいなど何度か API にアクセスする必要がある場合は少し間を空けてから行うようにしてください)

もし 500 エラーになってしまった場合は Issues にて報告していただけると助かります。エラーになった地域 ID と気象庁 HP で公開されているその地域の天気予報、可能であれば天気予報の HTML ソースを添えてください。

API は常時稼働していますが、(サーバー料金未払いとかで)停止してしまっていることがないとも限りません。
ソースコードは GitHub で公開しています(Laravel 製)。もし確実に常時稼働させておきたいのであれば、(他の環境で動くかは未検証ですが)りどみやコードを参考に自分のサイトでホストしても良いと思います。

経緯

2020年7月、無料で登録なしに利用できる API を提供していることで知られていた livedoor 天気から突如7月末でサービスを終了するという発表があり、代替を探す間もなくあっという間にサービス終了してしまいました。

無料で使える API としては(提供データは多くはないものの)JSON 形式で(!)最低限の天気予報データを提供しており、また登録なしで利用できたことから重宝されていた印象です。

様々なサイトで livedoor 天気の API を利用したプログラムが公開されていたり、私自身いくつかの Twitter Bot で使っていたのですが、突然の終了となってしまい残念です。

livedoor 天気「自体の」利用者はさほど多くない上、API や各種ウィジェットのアクセス数ばかり増えるようでは(あの Weather Hacks のページも10年以上前からあったようだし)サービス終了もやむなしかな…とは思いますが、なかなか代替となる API が見つかりません。

日本の天気 API 事情

天気予報 API 自体は tenkiapi.jpyumake.jp日本気象協会が出してる API などいくつか見つかりますが、いずれも有料な上、個人利用は基本的に対象外です(月数万円〜数十万円は個人じゃとても無理…)。
人気の天気APIをまとめてみた には無料で使える API が複数載っていますが、全て海外サイトのようです。

このうちポピュラーで比較的利用者が多いのが OpenWeatherMap ですが、登録必須なことに併せて日本国内の天気予報は変な予報が出ることが多く、あまりアテになりません…(Linux のデスクトップ環境入れて天気ウィジェット入れるととんちんかんな予報の天気が表示されるのはだいたい OpenWeatherMap のせい)

YOLP の気象情報 API も検索でヒットしますが、こちらもデベロッパー登録が必須です。ただし、Yahoo! JAPAN ID があれば取得できるので、登録自体はさほど面倒ではありません。
ただし、この API は雨の予想降水量のみで天気予報自体は取得できないため、こちらも却下です(アプリ解析すれば非公開の API とか見つけられるんだろうけど…)。

気象庁の天気 API

「なら気象庁は?」というところですが、気象庁は API を公開していません(IT後進国…)。
厳密には 気象庁防災情報XMLフォーマット形式電文の公開(PULL型) にて Atom フィード(気象庁的には『電文』らしい)の形式で天気予報を含めた各種情報を公開していますが、そこから天気予報を取得するには、

  1. 長期フィード:定時 から数日間分の全入電(気象庁の各発表)が記述された XML のリストを取得する
    • 天気概況以外の詳細データは <link> に記述された UUID の XML 内に記述されている
  2. 取得した長期フィードから天気概況だけを抜き出し、各都道府県ごとに整理する
  3. 実際の天気予報データを <link> 内の XML にアクセスして取得する
  4. XML 内から必要なデータを取得する

という具合でかなり面倒な手順を踏まないと取得できません。さらに長期フィードの XML 自体が重く(ロードに数秒かかる)、また都道府県ごとにデータがまとめられているわけではないので、目当てのデータを探す処理を入れる必要が出てきます。
速度的にも利便性的にも API として使うのは厳しそうです。

実は AITC(先端IT活用推進コンソーシアム)が気象庁の XML データを随時取得し、REST API で利用できる形で提供されていたりもしたのですが、PULL 型ではなく PUSH 型の電文配信を利用していたため、気象庁からの PUSH 配信の終了にともない、今年の8月末でサービス終了となってしまいました。
今でもアクセス自体は可能ですが、データの更新が 2020/09/01 で止まってしまっています。

…というわけで、

  • 個人が無料で使える
  • 予報が正確である
  • livedoor 天気で提供されていた天気予報全てを提供している

という条件をつけると、(少なくとも、私が調べた限りでは)ほとんど代替となりうる選択肢がありません。

ほぼ唯一の選択肢は個人の方が公開されている 気象庁の天気予報情報を XML で配信 の API を利用することですが、ソースに気象庁の週間天気予報を利用しているためか、都道府県ごとにしか予報が取得できないのがネックです。

スクレイピング

正直昔に作った Bot を今更改修するのも気が引けたので、「いっそ気象庁のサイトからスクレイピングして livedoor 天気 API の URL と差し替えるだけで使える API 作るか!」と開発した、というのが経緯だったりします。
データを気象庁のフィードから取得することも検討しましたが、気象庁 HP からスクレイピングした方が速度的にも手間的にも手っ取り早いと考え、スクレイピングする実装としました。

気象庁いわく、気象庁 HP で公開されている各種データはスクレイピング含め自由に利用できるとのことなので、とくに問題はないと考えています(出典と編集・加工を行っている旨を API のレスポンスに記載しています)。

スクレイピング許可するくらいなら公式で使いやすい API を提供しておくれ…

Sponsored Link
Sponsored Link
Web
tsukumiをフォローする
Sponsored Link
つくみ島だより

コメント