気象庁天気予報のAPIを使ってみた
Bonjour!!
以前作ったその日の降水確率を朝7時に知らせてくれるLineBotが突然動かなくなりました
ちょっと調べてみるとどうやらサイトのレイアウトが変わったようです。
前回はphpqueryを利用してサイト上の情報をスクレイピングしているので、
レイアウトが変更されるとどうしてもそのたびに修正が必要になってきますね。
そんな中気象庁の天気予報にAPIが用意されたという情報を見かけました
→気象庁公式の天気予報API(?)が発見 ~Twitterの開発者界隈に喜びの声が満ちる
気象庁の中の人によるとオフィシャルなAPIではないようですが、利用に関しては
ルールに則ってすれば問題内容なので、さっそく使ってみました。
以下のエンドポイントにアクセスするとJSON形式で情報が表示されます。
(forecastのあとの数字を変えると別の地域の予報を取得できます。)
名古屋の天気→https://www.jma.go.jp/bosai/forecast/data/forecast/230000.json
そのままだととても見づらいので、整形してくれるサイトの力を借りて見やすい形にします。
- [
- {
- “publishingOffice”: “名古屋地方気象台”,
- “reportDatetime”: “2021-04-19T17:00:00+09:00”,
- “timeSeries”: [
- {
- “timeDefines”: [
- “2021-04-19T17:00:00+09:00”,
- “2021-04-20T00:00:00+09:00”,
- “2021-04-21T00:00:00+09:00”
- ],
- “areas”: [
- {
- “area”: {
- “name”: “西部”,
- “code”: “230010”
- },
- “weatherCodes”: [
- “100”,
- “100”,
- “100”
- ],
- “weathers”: [
- “晴れ”,
- “晴れ”,
- “晴れ”
- ],
- “winds”: [
- “北西の風”,
- “北西の風”,
- “北西の風 後 西の風”
- ],
- “waves”: [
- “0.5メートル”,
- “0.5メートル”,
- “0.5メートル”
- ]
- },
- {
- “area”: {
- “name”: “東部”,
- “code”: “230020”
- },
- “weatherCodes”: [
- “100”,
- “100”,
- “100”
- ],
- “weathers”: [
- “晴れ”,
- “晴れ”,
- “晴れ”
- ],
- “winds”: [
- “北西の風 東三河南部 では はじめ 北西の風 やや強く”,
- “北西の風”,
- “北西の風 後 西の風”
- ],
- “waves”: [
- “1.5メートル ただし 内海 では 0.5メートル”,
- “1.5メートル ただし 内海 では 0.5メートル”,
- “1.5メートル ただし 内海 では 0.5メートル”
- ]
- }
- ]
- },
- {
- “timeDefines”: [
- “2021-04-19T18:00:00+09:00”,
- “2021-04-20T00:00:00+09:00”,
- “2021-04-20T06:00:00+09:00”,
- “2021-04-20T12:00:00+09:00”,
- “2021-04-20T18:00:00+09:00”
- ],
- “areas”: [
- {
- “area”: {
- “name”: “西部”,
- “code”: “230010”
- },
- “pops”: [
- “0”,
- “0”,
- “0”,
- “0”,
- “0”
- ]
- },
- {
- “area”: {
- “name”: “東部”,
- “code”: “230020”
- },
- “pops”: [
- “0”,
- “0”,
- “0”,
- “0”,
- “0”
- ]
- }
- ]
- },
- {
- “timeDefines”: [
- “2021-04-20T00:00:00+09:00”,
- “2021-04-20T09:00:00+09:00”
- ],
- “areas”: [
- {
- “area”: {
- “name”: “名古屋”,
- “code”: “51106”
- },
- “temps”: [
- “8”,
- “25”
- ]
- },
- {
- “area”: {
- “name”: “豊橋”,
- “code”: “51331”
- },
- “temps”: [
- “9”,
- “22”
- ]
- }
- ]
- }
- ]
- },
- {
- “publishingOffice”: “名古屋地方気象台”,
- “reportDatetime”: “2021-04-19T17:00:00+09:00”,
- “timeSeries”: [
- {
- “timeDefines”: [
- “2021-04-20T00:00:00+09:00”,
- “2021-04-21T00:00:00+09:00”,
- “2021-04-22T00:00:00+09:00”,
- “2021-04-23T00:00:00+09:00”,
- “2021-04-24T00:00:00+09:00”,
- “2021-04-25T00:00:00+09:00”,
- “2021-04-26T00:00:00+09:00”
- ],
- “areas”: [
- {
- “area”: {
- “name”: “愛知県”,
- “code”: “230000”
- },
- “weatherCodes”: [
- “100”,
- “100”,
- “101”,
- “101”,
- “201”,
- “201”,
- “201”
- ],
- “pops”: [
- “”,
- “0”,
- “10”,
- “20”,
- “30”,
- “30”,
- “30”
- ],
- “reliabilities”: [
- “”,
- “”,
- “A”,
- “A”,
- “A”,
- “A”,
- “A”
- ]
- }
- ]
- },
- {
- “timeDefines”: [
- “2021-04-20T00:00:00+09:00”,
- “2021-04-21T00:00:00+09:00”,
- “2021-04-22T00:00:00+09:00”,
- “2021-04-23T00:00:00+09:00”,
- “2021-04-24T00:00:00+09:00”,
- “2021-04-25T00:00:00+09:00”,
- “2021-04-26T00:00:00+09:00”
- ],
- “areas”: [
- {
- “area”: {
- “name”: “名古屋”,
- “code”: “51106”
- },
- “tempsMin”: [
- “”,
- “9”,
- “11”,
- “13”,
- “14”,
- “13”,
- “13”
- ],
- “tempsMinUpper”: [
- “”,
- “13”,
- “13”,
- “14”,
- “16”,
- “15”,
- “15”
- ],
- “tempsMinLower”: [
- “”,
- “8”,
- “9”,
- “11”,
- “12”,
- “10”,
- “10”
- ],
- “tempsMax”: [
- “”,
- “26”,
- “27”,
- “25”,
- “22”,
- “23”,
- “23”
- ],
- “tempsMaxUpper”: [
- “”,
- “28”,
- “29”,
- “27”,
- “26”,
- “26”,
- “26”
- ],
- “tempsMaxLower”: [
- “”,
- “24”,
- “25”,
- “22”,
- “19”,
- “20”,
- “20”
- ]
- }
- ]
- }
- ],
- “tempAverage”: {
- “areas”: [
- {
- “area”: {
- “name”: “名古屋”,
- “code”: “51106”
- },
- “min”: “11.0”,
- “max”: “21.2”
- }
- ]
- },
- “precipAverage”: {
- “areas”: [
- {
- “area”: {
- “name”: “名古屋”,
- “code”: “51106”
- },
- “min”: “12.8”,
- “max”: “34.7”
- }
- ]
- }
- }
- ]
3日分の天気予報の情報が含まれています。
今回のボットは当日の3つの時間帯での降水確率を取得したいので、以下のようになります。
- $rain_day[0] = $arr[0][“timeSeries”][1][“areas”][0][“pops”][0]; /*6-12*/
- $rain_day[1] = $arr[0][“timeSeries”][1][“areas”][0][“pops”][1]; /*12-18*/
- $rain_day[2] = $arr[0][“timeSeries”][1][“areas”][0][“pops”][2]; /*18-24*/
他にも最大気温や最低気温といった情報もとってこれます。
これで気象庁がこのJSONを基にページを作っている限りはレイアウト変更があってもBotが途切れることはなくなりました。
ではAu revoir!!!