본문 바로가기
IT

Python, api로 xml데이터 가져와 json으로 변경

by Cyber_ 2024. 4. 12.

개요

협업 프로젝트 중 AI팀과 빅데이터 팀에서 xml형식보단 json형식의 데이터가 좀 더 사용성이 좋다고 하여 데이터 Python에서 xml데이터를 json데이터로 변경했다.
 

 

코드

#-*- coding: utf-8 -*-
import requests
from django.shortcuts import render
from django.conf import settings
import xmltodict
import json
from django.http import JsonResponse,HttpResponse
from .serializer import Serializer
from .models import Hotspot

# Create your views here.
def get_seoul_hotspots(request): 
    # API resquest
    startpoint = 1 
    endpoint = 6 
    api_key = settings.SEOUL_API_KEY
    url = f'http://openapi.seoul.go.kr:8088/{api_key}/xml/citydata/{startpoint}/{endpoint}/강남 MICE 관광특구'
    
    response = requests.get(url)

    hotspots_data = response.content
    data_dict = xmltodict.parse(hotspots_data)  # convert xml to dict
    json_data = json.dumps(data_dict) #convert to json
    # hotspot_data_list = []
    # for hotspot_data in hotspots_data:
    #     AREA_NM = hotspot_data.find('AREA_NM').text
    #     LIVE_PPLTN_STTS = hotspot_data.find('LIVE_PPLTN_STTS').text
    #     AREA_CONGEST_LVL = hotspot_data.find('AREA_CONGEST_LVL').text
    #     AREA_CONGEST_MSG = hotspot_data.find('AREA_CONGEST_MSG').text
    #     AREA_PPLTN_MIN = hotspot_data.find('AREA_PPLTN_MIN').text
    #     AREA_PPLTN_MAX = hotspot_data.find('AREA_PPLTN_MAX').text
    
    #     hotspot = Hotspot.objects.create(
    #         AREA_NM = AREA_NM,
    #         LIVE_PPLTN_STTS = LIVE_PPLTN_STTS,
    #         AREA_CONGEST_LVL = AREA_CONGEST_LVL,
    #         AREA_CONGEST_MSG = AREA_CONGEST_MSG,
    #         AREA_PPLTN_MIN = AREA_PPLTN_MIN,
    #         AREA_PPLTN_MAX = AREA_PPLTN_MAX
    #     ) # it will delete, and I will Use class Serializer
    #     hotspot_data_list.append(hotspot)
    
    # response_data = {
    #     'status': 'success',
    #     'hotspots': hotspot_data_list
    # }
    
    return HttpResponse(json_data, content_type = 'application/json')
  • xmltodict: XML을 파이썬의 dict 객체로 읽어들이기 위한 간단한 라이브러리

3. xmltodict를 사용하는 이유

  • 간결성: XML 데이터를 직접 파싱하려면 상당히 복잡, xmltodict를 사용하면 복잡한 XML 파싱 코드 없이도 XML 데이터를 파이썬 딕셔너리로 쉽게 변환 가능
  • 일관성: xmltodict를 사용하면 XML 데이터를 파이썬의 딕셔너리로 표현할 수 있으므로, 파이썬에서 일반적으로 사용되는 데이터 조작 방법을 적용할 수 있으므로 코드의 일관성이 유지되고, 유지 보수가 용이해집니다.
  • 편리성: xmltodict는 딕셔너리와 유사한 형태로 XML 데이터를 제공하므로, XML 데이터의 탐색과 수정이 훨씬 편리해집니다.
  • 확장성: 딕셔너리 형태로 변환된 데이터는 다른 형식으로의 변환도 간단히 수행할 수 있습니다. 예를 들어, 위 코드에서는 json.dumps()를 사용하여 JSON 형식으로 쉽게 변환하고 있습니다.