공공데이터 OPEN API 사용해보기 - 서울시 열린데이터 광장

Red_Panda·2021년 7월 8일
3

이것저것

목록 보기
2/3

오늘은 OPEN API를 이용해 어떻게 데이터를 가져오는지 해보기로 했다.

서울 열린 데이터 광장

http://data.seoul.go.kr/
나는 서울 열린데이터 광장에서 제공하는 OPEN API를 이용하기로 했다.


정말 다양하고 많은 데이터를 제공하고있다.

http://data.seoul.go.kr/dataList/OA-2219/S/1/datasetView.do
이 많은 데이터중에서 서울시 내 구별 미세먼지, 초미세먼지 정보를 가져오기로 했다.


이렇게 화면이 나오는데 좀만 스크롤을 아래로 내리면 데이터를 가져올 수 있는 URL을 알려준다.

내가 사용할 URL은 맨위 '권역별 실시간 대기환경정보 조회'다.
http://openAPI.seoul.go.kr:8088/(인증키)/xml/RealtimeCityAir/1/5/
이 주소를 사용할것인데 중간에 인증키는 회원가입 후 간단하게 발급 받을 수 있다.

코드 작성

그럼 이제 이 정보를 이용해 Python으로 코드를 짜보겠다.

먼저 Python 환경에 모듈을 하나 설치해준다.

pip install requests

HTTP 요청처리를 간편하게 다루기 위해 사용하는 모듈이다. 내장 모듈이 아니니 직접 설치해주어야 한다.

import requests

url="http://openAPI.seoul.go.kr:8088/인증키번호/json/RealtimeCityAir/1/100/"
res = requests.get(url)
data = res.json()

url이라는 값에 서울시에서 제공하는 api url을 넣어주었다.
맨뒤 100에 해당하는 값은 몇번째 값까지 가져올 것인지 정하는것인데, 서울시 내의 구 개수는 25개로 25를 넣어도 무방하다. 간단하게 100을 넣었다.

가운데 인증키 번호에는 자신이 발급받은 인증키를 복사해서 붙여넣으면된다.

그리고, 제공되는 url에서는 xml로 되어있지만 나는 requests 에서 제공하는 json요청 및 출력 기능을 사용할 것이라 url 중간에 인증키 번호 뒤 부분에 있는 xml을 json으로 수정했다.
바로 .json을 이용하여 받아온 요청값을 json형태(리스트, 딕셔너리)로 변환할 수 있다.


json 형태로 변환한 값을 출력하면 이렇게 딕셔너리로 나온다.

내가 원하는 값은 data['RealtimeCityAir']['row']에 해당하는 것을 알 수 있다.

RealTime = my_data['RealtimeCityAir']['row']


측정일시, 권역명, 구이름, 각종 대기환경 요소가 반복되는 식으로 출력된다.
각 측정값에 대한 설명은 공공데이터 페이지에서 이렇게 알려준다.

이 값들중에서 측정일시, 구이름, 미세먼지, 초미세먼지만 출력해보자.

측정시기 MSRDT, 구이름(측정소명): MSRSTE_NM, 미세먼지: PM10, 초미세먼지: PM25다.

이 값들은 딕셔너리에서 key값으로, value값을 출력해주면 된다.

for i in RealTime:
    print(i['MSRSTE_NM'])
    print('측정일시',i['MSRDT'][5],'월',i['MSRDT'][7],'일',i['MSRDT'][8:10],':',i['MSRDT'][10:])
    print("미세먼지 : ",i['PM10'],"(㎍/㎥)"," 초미세먼지 :",i['PM25'],"(㎍/㎥)")
    print()


출력 내용은 내가 보기 편하게 슬라이싱 했다.

그리고 네이버에서 은평구의 미세먼지, 초미세먼지 수치를 검색했다.

같은 값으로 값을 잘 가져온다는 것을 확인했다.

전체코드

import requests

url="http://openAPI.seoul.go.kr:8088/5641615959613930333270697a4c77/json/RealtimeCityAir/1/25/"

res = requests.get(url)

data = res.json()

RealTime = data['RealtimeCityAir']['row']

for i in RealTime:
    print(i['MSRSTE_NM'])
    print('측정일시',i['MSRDT'][5],'월',i['MSRDT'][7],'일',i['MSRDT'][8:10],':',i['MSRDT'][10:])
    print("미세먼지 : ",i['PM10'],"(㎍/㎥)"," 초미세먼지 :",i['PM25'],"(㎍/㎥)")
    print()
profile
신입 개발자

0개의 댓글