파이썬으로 공공데이터 API XML 파싱후 DB저장하기
#!/usr/bin/python
#-*- coding: utf-8 -*-
# 공공데이터 포털사이트에서 지역별로 미세먼지 데이터를 시간대별로 API제공 - 인코딩되어 한글이 변환되어 보여진다
# http://tech.leotek.co.kr/2017/04/11/공공데이터포털-한국환경공단-대기오염-api/
# 에어코리아에서 제공해주는 시간별 미세먼지 측정값 XML형식 / %EC%A2%85%EB%A1%9C%EA%B5%AC=종로구
#url = "http://openapi.airkorea.or.kr/openapi/services/rest/ArpltnInforInqireSvc/getMsrstnAcctoRltmMesureDnsty?stationName=종로구&dataTerm=month&pageNo=1&numOfRows=10&ServiceKey=u4Q%2FF%2BzFS1PHRIhVj2cJcxGP8J%2B5vOxCbaO039frcCGDEuD2km6rhbR2wZrwBrZtlLu2Z%2FbsqMHDVVGHwkq8ow%3D%3D&ver=1.3"
# 에어코리아에서 제공해주는 시간별 미세먼지 측정값 JSON형식 / %EC%A2%85%EB%A1%9C%EA%B5%AC=종로구
#url = "http://openapi.airkorea.or.kr/openapi/services/rest/ArpltnInforInqireSvc/getMsrstnAcctoRltmMesureDnsty?stationName=종로구&dataTerm=month&pageNo=1&numOfRows=10&ServiceKey=u4Q%2FF%2BzFS1PHRIhVj2cJcxGP8J%2B5vOxCbaO039frcCGDEuD2km6rhbR2wZrwBrZtlLu2Z%2FbsqMHDVVGHwkq8ow%3D%3D&ver=1.3&_returnType=json"
import xml.etree.ElementTree as ET
import urllib2
import datetime
import time
import sys
import pymysql
import random
now = time.localtime()
# 미세먼지 센서에서 갖고오는 값은 우선 랜덤함수를 이용하여 데이터를 수집한다.
# 추후에 데이터를 수신하여 변수값으로 지정하여 데이터를 생성
from random import *
chkpmValue = uniform(20.0,35.0)
# 현재 나짜를 갖고오는 함수이며, 현재 미세먼지 센서를 통해서 갖고 오는 값을 저장할 때
# API에서 제공되는 XML 데이터중 해당 시간대와 맞는 데이터를 갖고 오기 위한 작업
#CurrentTime = datetime.datetime.now()
CurrentTime = "%04d-%02d-%02d %02d:00" % (now.tm_year, now.tm_mon, now.tm_mday,
now.tm_hour)
# AirKorea에서 공식적으로 제공하는 종로구의 시간대별 미세먼지 측정 API
# 많은 데이터를 제공하고 있지만 여기서는 pm10과 pm25 값 만을 활용
url = "http://openapi.airkorea.or.kr/openapi/services/rest/ArpltnInforInqireSvc/
getMsrstnAcctoRltmMesureDnsty?stationName=%EC%A2%85%EB%A1%9C%EA%B5%AC&dataTerm=m
onth&pageNo=1&numOfRows=10&ServiceKey=u4Q%2FF%2BzFS1PHRIhVj2cJcxGP8J%2B5vOxCbaO0
39frcCGDEuD2km6rhbR2wZrwBrZtlLu2Z%2FbsqMHDVVGHwkq8ow%3D%3D&ver=1.3"
tree = ET.ElementTree(file=urllib2.urlopen(url))
root = tree.getroot()
# 함수를 이용하여 해당되는 값이 있을 때만 데이터베이스에 저장한다
def db_insert(a, b, c) :
# DB Connect
conn = pymysql.connect(host='localhost', user='ID', password='PASSWD',db='mysql', charset='utf8')
curs = conn.cursor()
sql = """insert into dust(drone_id, dust_id, gps_id, chkpmValue, pm25Value, pm10Value, datecreated) values('drone01', 'dust01', 'Eulgiro4ga', %s, %s, %s, now())""";
curs.execute(sql, (a, b, c))
conn.commit()
conn.close()
sys.exit(1)
# 현재 날짜를 불러와서 날짜가 존재하면 측정값을 실행한다
#print CurrentTime
if CurrentTime > 0 :
for i in root.iter("item") :
i.dataTime = i.findtext("dataTime")
if i.dataTime == CurrentTime : # API에서 제공하는 값이 현재 시간하고 맞는 시간대가 존재할 때 측정값을 처리
i.pm10Value = i.findtext("pm10Value")
i.pm25Value = i.findtext("pm25Value")
#print i.dataTime, i.pm10Value, i.pm25Value
if i.pm10Value > 0 and i.pm25Value >0 : # 정상적인 값이 존재할 때 수행
a = db_insert(chkpmValue, i.pm25Value, i.pm10Value) # 함수를 호출하여 수행
else :
sys.exit(1)
else :
sys.exit(1)
else :
sys.exit(1)
[관련파일]
https://github.com/e3jake/DustProject
End of Posting
'Tech Story > IoT' 카테고리의 다른 글
구글차트 DB 연동하기 (1) | 2020.12.19 |
---|---|
라즈베리파이를 이용한 구글어시스턴트스피커 (16) | 2020.12.19 |
웹으로 DB에 데이터 저장하기 (0) | 2018.06.18 |
MySQL 테이블 생성-기초 (0) | 2018.06.18 |
MySQL 접속테스트 (1) | 2018.06.18 |