기상청의 API를 사용하여 기온을 얻습니다.

5079 단어 파이썬기상청api

기상청 웹사이트가 리뉴얼했기 때문에 웹 스크래핑을 할 수 없고 기온을 얻을 수 없다.



2021년 2월 16일 기상청 발표에서 인용:

기상청 홈페이지를 2월 24일 13시부터 리뉴얼합니다. 다양한 방재 기상 정보를 한 페이지에서 보기 쉽게 확인할 수 있게 되며, 스마트폰에서도 보기 쉬워집니다.
htps //w w. j. . jp / j / p / s / 2102 / 16 a / 20210216_j / hp_renew l. HTML

이 리뉴얼에 의해, 기상청이 아메다스 정보를 「표 형식」(HTML적으로는 table 태그)로서 표시하고 있던 데이터가 없어져, 웹 스크래핑으로 읽을 수 없게 되었습니다.
저는 예전보다 기상청 웹사이트에서 현지 기온을 빼내고 집 Zabbix에 데이터를 저장했기 때문에 어떠한 조치도 필요했습니다.
거기서, 여러가지 조사해 보면 비공식인 것 같습니다만, 기상청이 API를 공개(액세스 가능한 상태)로 하고 있는 것 같았습니다.
그것을 사용하여 사이타마 현 구마가야시의 기온을 얻는 파이썬 스크립트를 작성했습니다.

outside_tmp.py
# -*- coding: utf-8 -*-
#!/usr/bin/env python

# 注意点:
# 例えば12:00にデータが更新される場合、12:00にAPIを叩くとレスポンスjsonが不足している場合がある。
# そのため、crontabなどにより、5分~15分sleepしてから取得した方が良さそう。

import pprint
import requests
import datetime

def main():
    # 現在の時刻を取得
    now_raw = datetime.datetime.now()
    now = now_raw.strftime('%Y%m%d%H')

    # エンドポイントに最新時刻のurlを組み込み
    url = "https://www.jma.go.jp/bosai/amedas/data/map/" + now + "0000.json"
    header = {"content-type": "application/json"}

    # 正しいjsonが返って来た場合のみ処理し、正しくないjsonの場合はエラーとする。
    try:
      response = requests.get(url, headers=header)
      # 熊谷の tempを表示
      data = response.json()
      temp_arry = data["43056"]["temp"]
      print temp_arry[0]
    except KeyError:
      pass

if __name__ == '__main__':
    main()

스크립트의 '43056'은 쿠마가야의 코드입니다. 응답 json을 보면 알 수 있지만 기온 이외에도 취득이 가능합니다.
다만, 하나 걸린 점으로서는, json의 파일명이 변동하는 곳입니다.

htps //w w. j. . jp / 보사이 / 아메다 s / data / ma p / 20210411050000. j 그런

위에서는 20210411050000.json이 다음과 같이 분할됩니다.2021年04月11日05時 + 0000
마지막 0000은 분/초로 추측됩니다. 앞으로는 분당 초 단위로 데이터 업데이트가 있을지도 모릅니다.

현재 특히 token 등은 없는 것 같습니다만, 상기를 참고로 되는 분은 절도를 지킨 다음의 액세스를 고려해 주세요.
저는 crontab에서 다음과 같이 설명합니다.
outside_temp.sh는 위의 python 스크립트 실행 결과를 파일로 내보내는 스크립트입니다. 내보낸 파일을 zabbix에 로드할 수 있습니다.

outside_temp.sh
#!/bin/bash

python /usr/local/src/outside_tmp.py > /tmp/outside_temp
15 */1 * * * /usr/local/src/outside_temp.sh > /dev/null 2>&1이 스크립트를 각 n시간 15분에 취득하고 있습니다. 1:15 --> 2:15 --> 3:15 ...

Zabbix에서 취하는 방법



이런 느낌이 되고 있습니다.


요약


  • 이 정보는 기상청에서 공식적으로 발표되지 않았기 때문에 API 사양이 갑자기 바뀔 수 있습니다.
  • API는 공식적으로 기상청에서 외부로 공개된 것이 아닙니다. 업무로 이용하는 경우는 기상청에 문의해 주세요.
  • Python 초보자이므로 코드에 츳코미가 있으면 건간 부탁드립니다.
  • 좋은 웹페이지 즐겨찾기