본문 바로가기
Programming/Python

[Python] API(json, xml)

API = Application Program Interface.  

interface = 어느 한 곳에서 정보를 가져올 수 있도록 연결해주는 것

 

 

import json  

 

json.dumps(dict자료)          ->  json이 이해할 수 있는 언어로 변환 , 이 경우 type은 str        (dict자료만 받음)

 

 

ex) 

 

python_dict = {
    "이름": "홍길동",
    "나이": 25,
    "거주지": "서울",
    "신체정보": {
        "키": 175.4,
        "몸무게": 71.2
    },
    "취미": [
        "등산",
        "자전거타기",
        "독서"
    ]
}

 

 

이 dict자료가

 

json_data = json.dumps(python_dict)
print(json_data)

 

 

{"\uc774\ub984": "\ud64d\uae38\ub3d9", "\ub098\uc774": 25, "\uac70\uc8fc\uc9c0": "\uc11c\uc6b8", "\uc2e0\uccb4\uc815\ubcf4": {"\ud0a4": 175.4, "\ubab8\ubb34\uac8c": 71.2}, "\ucde8\ubbf8": ["\ub4f1\uc0b0", "\uc790\uc804\uac70\ud0c0\uae30", "\ub3c5\uc11c"]}

 

dump로 이렇게 바뀜

 

 

 

 

 

json_data = json.dumps(python_dict, indent=3, sort_keys=True, ensure_ascii=False)
print(json_data)
결과는 이렇게
 
{
   "거주지": "서울",
   "나이": 25,
   "신체정보": {
      "몸무게": 71.2,
      "키": 175.4
   },
   "이름": "홍길동",
   "취미": [
      "등산",
      "자전거타기",
      "독서"
   ]
}

 

 

 

 

json.load()는 기존 이 json으로 변환된 언어를 다시 기존 dict로 바꿔서 보여주는 함수

json_dict = json.loads(json_data)
type(json_dict)            # 이게 다시 dict로 출력해줌



json_dict['신체정보']['몸무게']    #신체정보 안의 리스트인 몸무게 정보만 출력; 71.2


json_dict['취미']         # 취미 리스트로 전부 출력



json_dict['취미'][0]   #1번째 취미만 출력

 

 

 

XML data에도 적용 可

 

HTML    ->   java script  ->   Markup language   -> XML(Extended Markup Language)

HTML은 현재 HTML5(스마트폰 기반까지 고려함)까지 발전됨.

 

 

 

xmltodict  를 pip install로 설치하고 xmltodict를 import

xmltodict.parse로 데이터 정리

xml_data = """<?xml version="1.0" encoding="UTF-8" ?>
<사용자정보>
    <이름>홍길동</이름>
    <나이>25</나이>
    <거주지>서울</거주지>
    <신체정보>
        <키 unit="cm">175.4</키>
        <몸무게 unit="kg">71.2</몸무게>
    </신체정보>
    <취미>등산</취미>
    <취미>자전거타기</취미>
    <취미>독서</취미>
</사용자정보> 
"""

import xmltodict

dict_data = xmltodict.parse(xml_data, xml_attribs=True)
dict_data

{'사용자정보': {'이름': '홍길동',
  '나이': '25',
  '거주지': '서울',
  '신체정보': {'키': {'@unit': 'cm', '#text': '175.4'},
   '몸무게': {'@unit': 'kg', '#text': '71.2'}},
  '취미': ['등산', '자전거타기', '독서']}}

 

 

 

 

 

 

 

 

 

 

 

웹사이트 경로 추적

 

 

import requests  
import json

url = "http://api.open-notify.org/iss-now.json"

r = requests.get(url)
print(r.text)

{"message": "success", "iss_position": {"latitude": "-5.4228", "longitude": "-99.9381"}, "timestamp": 1692607641}

 

 

 

json to dict  = jason.loads(r. 이름)           <- dict로 변환

json_to_dict = json.loads(r.text)
type(json_to_dict)

# 위 아래 같은 dict 출력

url = "http://api.open-notify.org/iss-now.json"

json_to_dict = requests.get(url).json()
type(json_to_dict)

dict

 

 

그 값 내용은

 

 

 

 

{'message': 'success',
 'iss_position': {'latitude': '-5.1444', 'longitude': '-99.7384'},
 'timestamp': 1692607647}

 

 

 

import time

url = "http://api.open-notify.org/iss-now.json"

def ISS_Position(iss_position_api_url):    #web의 json data를 dict로 변환하는 함수
    json_to_dict = requests.get(iss_position_api_url).json()
    return json_to_dict["iss_position"]

for k in range(5):
    print(ISS_Position(url))
    time.sleep(10)  # 10초 동안 코드 실행을 일시적으로 중지한다.

{'latitude': '-4.9418', 'longitude': '-99.5934'}
{'latitude': '-4.4101', 'longitude': '-99.2130'}
{'latitude': '-3.9033', 'longitude': '-98.8513'}
{'latitude': '-3.3710', 'longitude': '-98.4720'}
{'latitude': '-2.8638', 'longitude': '-98.1113'}               <-10초마다 천천히 결과 나온 것들

 

.json() : 웹의 json을 dict형태로 반환하는 것. (response 안의 json 함수

 

 

728x90
반응형