API 데이터를 다운받을 때는 requests 라이브러리 설치가 필요하다.
python -m pip install requests
requests에서 get, post, update, delete를 모두 지원하고,
get 메서드에 url 주소만 넣어주면 데이터를 바로 받을 수 있다.
# 데이터 다운로드
# python -m pip install requests 라이브러리 다운로드
# Scripts 폴더 환경변수 잡으면 pip부터 할 수 있음
import requests
response = requests.get("http://apis.data.go.kr/1360000/TourStnInfoService/getCityTourClmIdx?serviceKey=dSHJNipMJz%2BPWTt9UN2qgExW7ql36lF%2BXp81YL%2FD42muatm7QP9jYJQSfIPMJ79C6NLitgJqd%2FGhRmY6U6YWwg%3D%3D&pageNo=1&numOfRows=10&dataType=JSON&CURRENT_DATE=2018123110&DAY=3&CITY_AREA_ID=5013000000")
# print(response) # 헤더에 있는 status 상태코드
# print(type(response)) # 클래스 타입
# dict 검색 : response["키값"]
# class 검색 : response.객체연결
# print(response.text) # 데이터를 문자열 그대로 읽음(통신 데이터)
# print(type(response.text)) # str 타입
# print(response.json())
# print(type(response.json())) # dict 타입
datas = response.json()["response"]["body"]["items"]["item"]
for data in datas:
print(data["doName"])
response를 text로 받으면 통신을 통해 문자열로 들어오는 데이터를 그대로 읽을 수 있고,
json( )으로 받으면 dict 타입으로 들어오게 된다.
API가 제공해주는 모든데이터를 클래스로 받을 필요는 없지만
한 건 한 건 item 데이터에 대한 클래스를 만들어두면 . 을 사용하여
접근이 가능하기 때문에 실수를 줄일 수 있다.
기능별로 파일을 분리해보면 다음과 같다.
실제 데이터를 담아서 클래스로 파싱 하기 weather.py ▼
class Weather:
def __init__(self, tm, totalCityName, doName, cityName, cityAreaId, kmaTci, TCI_GRADE):
self.tm = tm
self.totalCityName = totalCityName
self.doName = doName
self.cityName = cityName
self.cityAreaId = cityAreaId
self.kmaTci = kmaTci
self.TCI_GRADE = TCI_GRADE
# 원래 타입 변환 라이브러리가 다 있음!!
@staticmethod
def dict_to_entity(data):
weather = Weather(
data["tm"],
data["totalCityName"],
data["doName"],
data["cityName"],
data["cityAreaId"],
data["kmaTci"],
data["TCI_GRADE"])
return weather
url을 입력받아 필요한 데이터만 리턴해주기 http_provider.py ▼
# repository (X) provider(O)
# DAO가 아니고 access data는 provider!!
import requests as api
def get(url):
response = api.get(url)
if response.status_code == 200:
# 파싱 시작(공공데이터에서만 사용할 수 있는 무적 코드!!)
datas = response.json()["response"]["body"]["items"]["item"]
return datas
호출하기 httpex02.py ▼
import http_provider as hp
from weather import Weather
datas = hp.get("http://apis.data.go.kr/1360000/TourStnInfoService/getCityTourClmIdx?serviceKey=dSHJNipMJz%2BPWTt9UN2qgExW7ql36lF%2BXp81YL%2FD42muatm7QP9jYJQSfIPMJ79C6NLitgJqd%2FGhRmY6U6YWwg%3D%3D&pageNo=1&numOfRows=10&dataType=JSON&CURRENT_DATE=2018123110&DAY=3&CITY_AREA_ID=5013000000")
# print(datas) # 컬렉션
weathers = []
# 클래스로 파싱
for data in datas:
weather = Weather.dict_to_entity(data)
weathers.append(weather)
print(weathers[0].tm)
[출처]
https://cafe.naver.com/metacoding
메타코딩 : 네이버 카페
코린이들의 궁금증
cafe.naver.com
메타 코딩 유튜브
https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9
메타코딩
문의사항 : getinthere@naver.com 인스타그램 : https://www.instagram.com/meta4pm 깃헙 : https://github.com/codingspecialist 유료강좌 : https://www.easyupclass.com
www.youtube.com