About

天気予報 API(livedoor 天気互換)は、気象庁が配信している全国各地の今日・明日・あさっての天気予報・予想気温と都道府県の天気概況情報を json データで提供しています。

去る 2020 年 7 月、livedoor 天気がサービス終了となりました。livedoor 天気の API はわかりやすく、認証も不要でとても利用しやすかったのですが、突然の終了となりとても残念です。
代替として使えそうな API を探しましたが、OpenWeatherMap は API キーが必要な上に予報自体が正確でなかったり、気象庁のサイトはそもそも API がなかったりなど livedoor 天気のように手軽に使える API は見つからず、こうして自作することとなりました。

この API は、気象庁 から配信されている全国各地の天気予報を取得し、終了した livedoor 天気 の API と互換性のある json 形式のデータで提供するものです。URL を差し替えるだけで極力既存のコードをいじることなく利用できるようにしているつもりですが、livedoor 天気の API からの変更点や注意点もあります。利用される際は下記の 変更点・注意事項 をよく読んだ上でご利用ください。

変更点・注意事項

  • 天気予報は気象庁のサイトをスクレイピングして取得しているため、もし取得元のページに予期しないデータが入っていた場合や HTML の構造が大幅に変わった場合などに、500 エラーで取得できなくなる可能性があります。
    • 万全は期しているつもりですが、アクセスする時間によってデータが変わるため、修正できていない不具合があるかもしれません。
    • サービスの利用は無料ですが、この API を利用したことで何らかの不具合が発生しても責任は負えません。自己責任にてお願いします。
    • このため、天気を「確実に」取得する必要がある用途での利用は推奨しません。有料サービスなども検討してください。
  • API は HTTP 接続と HTTPS 接続両方に対応していますが、できるだけ HTTPS でアクセスすることを推奨します(証明書云々など HTTPS 接続が難しい環境向けに一応残しています)。
  • ピンポイント予報の発表地点を表す pinpointLocations は気象庁 HP からは取得できないため、廃止としました。
  • link はリクエストされたデータの地域に該当する気象庁 HP 天気予報のデータ取得元 URL を返すようになりました。
  • copyright 内の項目は現状に合わせて変更しています。provider は気象庁としていますが、非公式です。
    • API のレスポンス内 ( copyright → provider → note ) に JSON データへ編集している旨を明記しています。
  • 気象庁から配信されているデータの関係上、明後日の最高気温、最低気温は取得できません( null になります)。また、今日の最低気温も取得できないようです。
    • 時間帯によっては明後日の天気が予報ごと取得できないこともあります。取得できない場合も考慮して実装してください。
    • 天気が取得できなかった場合は天気アイコンのタイトル・URL も空 (null) になります。
  • 日付が変わってから今日分の天気が配信されるまでの0時~5時の間は、気象庁 HP で明日分として配信されている天気を今日の天気、明後日分として配信されている天気を明日の天気として扱います。
    • したがって、0時~5時の間は明後日の天気は取得できません。また、明日の最高気温・最低気温・降水確率も取得できません(降水確率のみ null ではなく --% と表示されます)。
  • forecasts → image はサルベージした各天気アイコンの URL を返しますが、稀にしか発表されない天気などアイコンを判定できなかった場合は「?」アイコンの画像を返すことがあります。もし遭遇した場合は Issues へ報告していただけると助かります。
  • publicTime_format と description → publicTime_format を追加しました。ISO8601 形式の publicTime を 年/月/日 時間:分:秒 の形で取得できます。
  • 降水確率を表す chanceOfRain を追加しました。今日と明日の 0時~6時・6時~12時・12時~18時・18時~24時 の降水確率を取得できます(明後日は取得できず、常に --% になります)。
    • 今日分の降水確率のうち、過ぎた分(例・12時にアクセスしたときの0時~6時の降水確率)は --% と表示されます。
  • コードは GitHub にて公開しています。なにか不具合があれば Issues へお願いします。
    • 未検証ですが、自分のサイトでこの API をホストすることも可能です。

リクエストパラメータ

JSONデータをリクエストする際のベースとなるURLは以下になります。
https://weather.tsukumijima.net/api/forecast
このURLに下の表のパラメータを加え、実際にリクエストします。

パラメータ名 説明
city 地域別に定義された ID 番号を表します。
リクエストする地域と ID の対応は、livedoor 天気で使われていた 全国の地点定義表 内で
「1次細分区(cityタグ)」の ID をご参照ください。(例・佐賀県 伊万里 = 410020 )
(例)「福岡県・久留米の天気」を取得する場合
下記 URL にアクセスして JSON データを取得します。HTTP でのアクセスも可能です。
基本 URL + 久留米の ID(400040)
https://weather.tsukumijima.net/api/forecast/city/400040
クエリで取得することもできます。
https://weather.tsukumijima.net/api/forecast?city=400040

レスポンスフィールド

取得したJSONデータは以下の定義に基づいて構成されています。(プロパティ名は順不同)

プロパティ名 内容
publicTime 予報の発表日時( ISO8601 形式 / 例・2020-09-01T05:00:00+09:00 )
publicTime_format 予報の発表日時(例・2020/09/01 05:00:00 )
title タイトル・見出し(例・福岡県 久留米 の天気)
link リクエストされたデータの地域に該当する気象庁 HP 天気予報の URL
description
天気概況文
プロパティ名 内容
text 天気概況文
publicTime 天気概況文の発表時刻( ISO8601 形式 / 例・2020-09-01T04:52:00+09:00 )
publicTime_format 天気概況文の発表時刻(例・2020/09/01 04:52:00 )
forecasts
都道府県天気予報の予報日毎の配列
プロパティ名 内容
date 予報日
dateLabel 予報日(今日・明日・明後日のいずれか)
telop 天気(晴れ、曇り、雨など)
temperature
max・・・最高気温
min・・・最低気温
プロパティ名 内容
celsius 摂氏 (°C)
fahrenheit 華氏 (°F)
chanceOfRain
降水確率(明後日は取得できません)
プロパティ名 内容
00-06 0 時から 6 時までの降水確率
06-12 6 時から 12 時までの降水確率
12-18 12 時から 18 時までの降水確率
18-24 18 時から 24 時までの降水確率
image
プロパティ名 内容
title 天気(晴れ、曇り、雨など)
url 天気アイコンの URL
width 天気アイコンの幅
height 天気アイコンの高さ
location
予報を発表した地域を定義
プロパティ名 内容
area 地方名(例・九州)
pref 都道府県名(例・福岡県)
city 一次細分区名(例・八幡)
copyright
プロパティ名 内容
title コピーライトの文言
link 天気予報 API(livedoor 天気互換)の URL
image 天気予報 API(livedoor 天気互換)への URL 、アイコンなど
provider 天気予報 API(livedoor 天気互換)で使用している気象データの配信元(気象庁)

JSON データサンプル

livedoor 天気の API では ASCII の範囲外の文字はすべてエスケープされていましたが、この API ではエスケープは行いません。

{
  "publicTime": "2020-09-06T05:00:00+09:00",
  "publicTime_format": "2020/09/06 05:00:00",
  "title": "福岡県 久留米 の天気",
  "link": "https://www.jma.go.jp/jp/yoho/346.html",
  "description": {
      "text": "福岡県では、強風や高波、竜巻などの激しい突風、急な強い雨、落雷に注意してください。\n\n福岡県は、台風第10号の影響により、概ね曇りとなっています。\n\n6日は、台風第10号の影響により曇りで昼過ぎから雨となり、夜は雷を伴い激しく降るでしょう。また、高温が予想されるため、熱中症など健康管理に注意してください。\n\n7日は、台風第10号の影響により概ね雨となり、雷を伴い非常に激しく降る所がありますが、次第に曇りとなるでしょう。\n\n<天気変化等の留意点>\n筑後地方では、6日6時から7日6時までに予想する降水量は、多い所で1時間に60ミリ、24時間に180ミリの見込みです。",
      "publicTime": "2020-09-06T04:43:00+09:00",
      "publicTime_format": "2020/09/06 04:43:00"
  },
  "forecasts": [
      {
          "date": "2020-09-06",
          "dateLabel": "今日",
          "telop": "曇のち雨",
          "temperature": {
              "min": null,
              "max": {
                  "celsius": "31",
                  "fahrenheit": "87.8"
              }
          },
          "chanceOfRain": {
              "00-06": "--%",
              "06-12": "20%",
              "12-18": "80%",
              "18-24": "80%"
          },
          "image": {
              "title": "曇のち雨",
              "url": "https://weather.tsukumijima.net/icon/13.gif",
              "width": 50,
              "height": 31
          }
      },
      {
          "date": "2020-09-07",
          "dateLabel": "明日",
          "telop": "暴風雨",
          "temperature": {
              "min": {
                  "celsius": "25",
                  "fahrenheit": "77"
              },
              "max": {
                  "celsius": "30",
                  "fahrenheit": "86"
              }
          },
          "chanceOfRain": {
              "00-06": "90%",
              "06-12": "90%",
              "12-18": "60%",
              "18-24": "20%"
          },
          "image": {
              "title": "暴風雨",
              "url": "https://weather.tsukumijima.net/icon/22.gif",
              "width": 50,
              "height": 31
          }
      },
      {
          "date": "2020-09-08",
          "dateLabel": "明後日",
          "telop": null,
          "temperature": {
              "min": null,
              "max": null
          },
          "chanceOfRain": {
              "00-06": "--%",
              "06-12": "--%",
              "12-18": "--%",
              "18-24": "--%"
          },
          "image": {
              "title": null,
              "url": null,
              "width": 50,
              "height": 31
          }
      }
  ],
  "location": {
      "city": "久留米",
      "area": "九州",
      "prefecture": "福岡県"
  },
  "copyright": {
      "link": "https://weather.tsukumijima.net/",
      "title": "(C) 天気予報 API(livedoor 天気互換)",
      "image": {
          "width": 120,
          "height": 120,
          "link": "https://weather.tsukumijima.net/",
          "url": "https://weather.tsukumijima.net/logo.png",
          "title": "天気予報 API(livedoor 天気互換)"
      },
      "provider": [
          {
              "link": "https://www.jma.go.jp/jma/",
              "name": "気象庁 Japan Meteorological Agency",
              "note": "気象庁 HP にて公開されている天気予報を json データへ編集しています。"
          }
      ]
  }
}