파이썬으로 일기 예보 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가 고정으로 좋았습니다만, 여기를 인수로 하거나, 나머지는 에러의 핸들링 방법 등, 좀 더 잘 하고 싶다고 생각하고 있습니다.
파이썬을 작성하는 방법은 자기 흐름으로 배웠기 때문에 츳코미와 더 나은 쓰기가 있다면 코멘트를 주시면 기쁩니다.
Reference
이 문제에 관하여(파이썬으로 일기 예보 API를 두드려 데이터 취득 & DB 저장까지 해 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/xxbxxqxx/items/6da1210e25a888e0a42a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
유저로부터 액세스가 있을 때마다 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가 고정으로 좋았습니다만, 여기를 인수로 하거나, 나머지는 에러의 핸들링 방법 등, 좀 더 잘 하고 싶다고 생각하고 있습니다.
파이썬을 작성하는 방법은 자기 흐름으로 배웠기 때문에 츳코미와 더 나은 쓰기가 있다면 코멘트를 주시면 기쁩니다.
Reference
이 문제에 관하여(파이썬으로 일기 예보 API를 두드려 데이터 취득 & DB 저장까지 해 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/xxbxxqxx/items/6da1210e25a888e0a42a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
당일의 최저 기온, 최고 기온, 텔롭(흐림 가끔 맑음, 같은 정보)을 취득해 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가 고정으로 좋았습니다만, 여기를 인수로 하거나, 나머지는 에러의 핸들링 방법 등, 좀 더 잘 하고 싶다고 생각하고 있습니다.
파이썬을 작성하는 방법은 자기 흐름으로 배웠기 때문에 츳코미와 더 나은 쓰기가 있다면 코멘트를 주시면 기쁩니다.
Reference
이 문제에 관하여(파이썬으로 일기 예보 API를 두드려 데이터 취득 & DB 저장까지 해 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/xxbxxqxx/items/6da1210e25a888e0a42a
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(파이썬으로 일기 예보 API를 두드려 데이터 취득 & DB 저장까지 해 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/xxbxxqxx/items/6da1210e25a888e0a42a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)