본문 바로가기
Projects

공공데이터포털에서 미세먼지 값 불러오기 – 실전편

by Maker KSH 2020. 3. 9.

(캡처 화면은 Windows 10, "2020-03-04"기준입니다.)

(운영채제등에 따라서 나타나는 화면이 다를 수도 있습니다.)
(만약 업데이트 등에 의해 화면이 다르다면 알려주세요!)

 

이번 프로젝트에서는 이전 준비편에 이어서 공공데이터포털 API를 이용해서 미세먼지 값을 불러와 봅시다!

저번 준비편에서 준비하신 "API 일반 인증키", 잊지 않으셨죠?ㅎㅎ

(혹시! 받아놓지 않으셨다면 "여기"로 이동해서 준비해주세요!)

자! 그럼 이제 프로그래밍을 시작하여봅시다!

 

우선 Visual Studio Code를 실행하여 줍시다.

(Visual Studio Code를 설치하지 않으셨다면, "여기"로 이동해주세요!)

 

그리고 New File를 눌려서 새로운 파일을 만들어줍시다!

 

New File를 눌려서 새로운 파일을 만들면 이렇게 빈 화면이 나옵니다!!

 

저희는 이 빈 파일에서 어떤 언어를 사용할 것인지 Visual Studio Code에게 알려주자고요!

오른쪽 아래 "Plain Text"를 선택하여주세요!

 

누르면 이렇게 상단에 다양한 언어들이 뜹니다!

 

저희는 Python을 사용할 거서이기 때문에 검색창에 Python을 검색하고 Enter를 한번 쳐줍시다!

 

이렇게 적용이 완료되면 파일 로고가 Python으로, 오른쪽 아래에 "Plain Text"가 "Python"이 된 것을 확인할 수 있습니다!

더보기

혹시 어느 부분인지 궁금하신 분은

 

그럼 이재 코드를 넣어볼까요?

(아래 코드를 복사하여 붙여 넣어주세요!)

#-*- coding: utf-8 -*-
"""
Made By KSH
Link : blog.makerksh.com
"""

from urllib.request import Request, urlopen
from urllib.parse import urlencode, quote_plus,unquote
import xml.etree.ElementTree as ET

txt_Output = True #txt파일로 출력할 것인가? True : 예 | False : 아니요
cmd_Output = True #python에 바로 출력할 것인가? True : 예 | False : 아니요

#File Set
if txt_Output == True :
    Out_file = open("Output.txt", 'w')
    Out_file.write(u"Write Start\n")
    Out_file.close()

#API Set 1
API_key = unquote('[ A P I K E Y ]')
url = 'http://openapi.airkorea.or.kr/openapi/services/rest/ArpltnInforInqireSvc/getCtprvnMesureLIst'
queryParams = '?' + urlencode({ quote_plus('ServiceKey') : API_key, quote_plus('numOfRows') : '10', quote_plus('pageNo') : '1', quote_plus('itemCode') : 'PM10', quote_plus('dataGubun') : 'HOUR', quote_plus('searchCondition') : 'MONTH' })

#API Call(For dustcheck)
request = Request(url + queryParams)
request.get_method = lambda: 'GET'
response_body = urlopen(request).read().decode('utf-8')
root = ET.fromstring(response_body)


def Read(): #API Read
    request = Request(url + queryParams)
    request.get_method = lambda: 'GET'
    response_body = urlopen(request).read().decode('utf-8')
    root = ET.fromstring(response_body)

def dustcheck(city): #Search
    Read() #API Read
    dustinfo = root.find('body').find('items').find('item').find(city)
    if txt_Output == True :
        Out_file = open("Output.txt", 'a')
        Out_file.write(city + u"\n" + dustinfo.text)
    if cmd_Output == True :
        print(city + ' : ' + dustinfo.text + u' ug/m3')

    if 0 < int(dustinfo.text) <= 30: #좋음
        if cmd_Output == True :
            print(city + u" : 좋음\n")
        if txt_Output == True :
            Out_file.write(u" -> Good\n")
    elif 30 < int(dustinfo.text) <= 80:  #보통
        if cmd_Output == True :
            print(city + u" : 보통\n")
        if txt_Output == True :
            Out_file.write(u" -> Nomal\n")
    elif 80 < int(dustinfo.text) <= 150:  #나쁨
        if cmd_Output == True :
            print(city + u" : 나쁨\n")
        if txt_Output == True :
            Out_file.write(u" -> Bad\n")
    elif 150 < int(dustinfo.text):  #매우 나쁨
        if cmd_Output == True :
            print(city + u" : 매우 나쁨\n")
        if txt_Output == True :
            Out_file.write(u" -> Very Bad\n")

    if txt_Output == True :
        Out_file.close()

if __name__ == "__main__":
    dustcheck('seoul')
    dustcheck('busan')

 

코드를 넣으셨다면, 다음과 같은 화면이 될 겁니다!

여기서 여러분이 수정을 해주셔야 하는 부분이 있는데요.

저 위의 코드에서 아래와 같은 부분이 있는데,  

API_key = unquote('[ A P I K E Y ]')

'[ A P I K E Y ]'에 공공데이터 포털에서 받은 "API 일반 인증키"를 넣으시면 됩니다.

예를 들면, 

API_key = unquote('a2y4ht23#6+d1yedkdbnek%2d4tkdnCWldC')

이렇게 말이죠.

 

그리고 여러분이 얻고 싶은 도시의 미세먼지 양을 맨 밑 코드에 추가해주시면 됩니다.

여기서 주의하실 점은 도시 이름은 적어주셔야 합니다! 꼭이요!

if __name__ == "__main__":
    dustcheck('seoul')
    dustcheck('busan')

또 예시를 들어볼까요?

만약 대구의 미세먼지 값을 알고 싶으면,

if __name__ == "__main__":
    dustcheck('daejeon')

저렇게 입력하시면 됩니다.

 

이제 "API 일반 인증키"를 넣으셨다면 F5를 눌려봅시다! F5를 누르시면 여러 가지 옵션들이 뜨는데요.

저희는 "Python File"이기 때문에 그냥 Enter를 눌러주시면 됩니다.

(아니면 "Python File"을 마우스로 눌러주셔도 됩니다!)

와우!! 대성공입니다! 드디어 서울과 부산(또는 입력하신 도시)의 미세먼지 농도과 미세먼지 상태를 알려주는군요!

 

혹시 에러가 난다면 더보기를 확인해주세요

더보기

만약 아래 같은 화면이 나오면서 실행이 안된다면 아래 3개의 항목을 확인하여주세요!


1. 내가 코드를 제대로 입력하였나?
2. "API 일반 인증키"를 잘못 적지는 않았나?
3. 도시이름이 대문자이거나 잘모샤 적지는 않았나?

 

부가기능을 알고 싶으시면 더보기를 눌러주세요!

더보기

또한 저 프로그램을 실행하게 되면 아래 화면과 같이 Output.txt 파일이 생깁니다.

만약 이 파일이 생기는 것이 싫으시다면 상단 코드중에

txt_Output = True #txt파일로 출력할 것인가? True : 예 | False : 아니요

txt_Output = False #txt파일로 출력할 것인가? True : 예 | False : 아니요

로 바꾸시면 됩니다.

 

드! 디! 어! 기나긴 여정이 끝났습니다.

앞으로도 다양한 프로그래밍과 Maker 활동을 올릴 예정이니 많은 관심 부탁드립니다!!

 

여기까지 따라와 주시고, 끝까지 봐주신 여러분들께 감사드립니다!

혹시 궁금금한 점이나 사진과 틀린점이 있으면 알려주세요! 수정하도록 하겠습니다!!

(가시기전에 공감 한번만 눌려주시면! 저에게 큰 힘이 됩니다! 감사합니다!)

댓글