파이썬으로 일기 예보 API를 두드려 데이터 취득 & DB 저장까지 해 보았다

소개



운영하고 있는 WEB 사이트에서, 매일의 도쿄의 날씨를 표시하려고 하게 되어, 우선은 무료의 API로 시험해 보았습니다.

이미지로서는 w w. 일본 치메 s. 이. jp 의 헤더를 이미지 받을 수 있으면 가깝다고 생각합니다.


하는 방법



유저로부터 액세스가 있을 때마다 API를 두드리고 있으면 힘들었기 때문에, 하루 1회 Python으로 데이터를 취득해 DB에 보존, WEB 사이트로부터는 DB를 참조해 그 날씨를 표시하는 형태로 했습니다.



사용하는 API



Livedoor 날씨 정보 서비스 Weather Hacks를 사용합니다.
ぇ tp // 우아아테 r. 아오오오 r. 코 m / 우에 아테 r_은 cks / 우에 bse r ゔ

전국 142곳의 3일간(오늘/내일/명후일)의 일기 예보·예상 기온을 json 형식으로 취득할 수 있습니다.

코드



당일의 최저 기온, 최고 기온, 텔롭(흐림 가끔 맑음, 같은 정보)을 취득해 DB에 보존할 때까지의 코드입니다.
# -*- coding: utf-8 -*-

import requests
import mysql.connector

def output_weather():
    datas = []
    url = 'http://weather.livedoor.com/forecast/webservice/json/v1?city='+city
    api_data = requests.get(url).json()
    if len(api_data) > 0:
        if api_data['forecasts'][0]['temperature']['min'] is not None:
            min_temp = api_data['forecasts'][0]['temperature']['min']['celsius']
        else:
            min_temp = '-'
        if api_data['forecasts'][0]['temperature']['max'] is not None:
            max_temp = api_data['forecasts'][0]['temperature']['max']['celsius']
        else:
            max_temp = '-'
        datas.append([ api_data['forecasts'][0]['date'], api_data['location']['city'], min_temp, max_temp, api_data['forecasts'][0]['telop'] ])
    else:
        print('failed')

    sqtbl = 'jd_api_weather' #テーブル名

    #DB接続情報
    conn = mysql.connector.connect(host = '{host_server_url}', db = '{database}', user = '{user_name}', password = '{passwd}', charset = 'utf8mb4')
    c = conn.cursor()

    #過去の天気情報は不要なので都度初期化
    c.execute('drop table if exists ' + sqtbl) #初期化
    c.execute('create table ' + sqtbl + '(Date date, City text, Min text, Max text, Telop text)')

    #テーブルにINSERT処理
    c.executemany('insert into ' + sqtbl + ' values (%s,%s,%s,%s,%s)',datas)

    #施した変更を保存
    conn.commit()

    #確認用に結果を取得してコンソールに表示。
    c.execute('select * from ' + sqtbl + ' order by Date desc limit 10;')
    for rowsql in c.fetchall():
        print(rowsql)

    #接続終了
    conn.close()

#Weather Hackで指定された地域ごとのIDを入れる。ちなみに130010は東京です
output('130010')

엄밀히 말하면 위의 Python 코드를 조금 수정하여 AWS의 LAMBDA에 두고 있으며 하루에 한 번 자동으로 실행하게 되어 있습니다. 그 정도라면 무료 테두리로 사용할 수 있습니다.

마지막으로



이번은 지역 ID가 고정으로 좋았습니다만, 여기를 인수로 하거나, 나머지는 에러의 핸들링 방법 등, 좀 더 잘 하고 싶다고 생각하고 있습니다.
파이썬을 작성하는 방법은 자기 흐름으로 배웠기 때문에 츳코미와 더 나은 쓰기가 있다면 코멘트를 주시면 기쁩니다.

좋은 웹페이지 즐겨찾기