Python

[Python] 공공 API 데이터를 받아서 사용 해 보자. (feat. JSON AND XML)

allempty_sheep 2024. 8. 2. 16:07
반응형

 

서울시 공공자전거 실시간 대여정보

https://data.seoul.go.kr/dataList/OA-15493/A/1/datasetView.do

 

열린데이터광장 메인

데이터분류,데이터검색,데이터활용

data.seoul.go.kr

 

 

해당 api 를 사용하여 json 데이터를 가져와서 보여주는 예제이다.

#클라이언트 요청 처리
import requests

#json 타입 데이터 처리
import json

API_KEY = '자신의APIKEY'

url = 'http://openapi.seoul.go.kr:8088/{}/json/bikeList/1/1000/'.format(API_KEY)

#API를 호출하여 결과값을 변수에 대입
response = requests.get(url)

if response.status_code == 200:
    #json 형태로 리턴받아 변수에 대입
    data = response.json()

    #자전거 대여소 이름
    stations = data['rentBikeStatus']['row']
    
    #배열 선언
    bike_stations = []

    for station in stations:
        name = station['stationName']
        lat = station['stationLatitude']
        lng = station['stationLongitude']

        bike_stations.append([name,lat,lng])

    for station in bike_stations:
        print(station)
        
else:
    print('API 요청 실패',response.status_code)

 

서울시 권역별 실시간 대기환경 현황

 

https://data.seoul.go.kr/dataList/OA-2219/S/1/datasetView.do

 

열린데이터광장 메인

데이터분류,데이터검색,데이터활용

data.seoul.go.kr

 

xml 은 입력을 받아서 권역, 구에 해당하는 데이터 정보를 가지고 오도록 하였다.

#클라이언트 요청 처리
import requests

import xml
import xml.etree.ElementTree as ET

API_KEY = '자신의APIKEY'

gunyuk = input('권역 입력') # 도심권, 서북권, 동북권, 서남권, 동남권
gu = input('구 입력')

url = 'http://openAPI.seoul.go.kr:8088/{}/xml/RealtimeCityAir/1/5/{}/{}'.format(API_KEY, gunyuk, gu)

#API를 호출하여 결과값을 변수에 대입
response = requests.get(url)

if response.status_code == 200:
    #xml 형태로 리턴받아 변수에 대입
    # print(response)
    content = response.text
    
    soup = BeautifulSoup(content, 'lxml-xml')

    MSRRGN_NM = soup.find('MSRRGN_NM').text
    MSRSTE_NM = soup.find('MSRSTE_NM').text
    PM10 = soup.find('PM10').text
    PM25 = soup.find('PM25').text
    O3 = soup.find('O3').text
    NO2 = soup.find('NO2').text
    CO = soup.find('CO').text
    SO2 = soup.find('SO2').text
    IDEX_NM = soup.find('IDEX_NM').text
    IDEX_MVL = soup.find('IDEX_MVL').text
    ARPLT_MAIN = soup.find('ARPLT_MAIN').text
    
    print(f'권역 : {MSRRGN_NM}')
    print(f'구 : {MSRSTE_NM}')
    print(f'미세먼지 : {PM10}')
    print(f'초미세먼지 : {PM25}')
    print(f'오존 : {O3}')
    print(f'이산화질소 : {NO2}')
    print(f'이산화탄소 : {CO}')
    print(f'아황가스 : {SO2}')
    print(f'통합대기환경등급 : {IDEX_NM}')
    print(f'통합대기환경지수 : {IDEX_MVL}')
    print(f'지수결정물질 : {ARPLT_MAIN}')
    
else:
    print('API 요청 실패',response.status_code)