반응형
오늘은 파이썬의 다양한 활용법 중 API를 통한 웹 데이터 가져오기를 설명해 보겠습니다.
코드는 아래와 같습니다.
import json
import requests
from urllib.parse import urljoin
class SpaceXData(object):
def __init__(self, host='https://api.spacexdata.com', version='v3'):
"""
Instantiate a new API client.
Args:
host (str): Hostname of the factomd instance.
version (str): API version to use. This should remain 'v2'.
"""
self.version = version
self.host = host
# Initialize the session.
self.session = requests.Session()
# Convenience method for building request URLs.
@property
def url(self):
return urljoin(self.host, self.version)
def handle_error_response(self, resp):
print(resp)
raise RuntimeError("Response code not 200 go check code")
# Perform an API request.
def _request(self, path, params=None):
fullpath = self.url + '/' + path
resp = self.session.request('GET', fullpath, params=params)
# If something goes wrong, we'll pass the response
# off to the error-handling code
if resp.status_code >= 400:
self.handle_error_response(resp)
# Otherwise return the result dictionary.
return resp.json()
# API methods
def get_launches(self, **kwargs):
return self._request('launches/'.format(kwargs.get('path', '')), kwargs)
def get_payloads(self, flight_number):
""" Fetch Payloads """
flight = self.get_launches(path='upcoming', flight_number=flight_number)[0]
payloads = flight.get('rocket').get('second_stage').get('payloads')
return payloads
# return brief version of flight info (not used)
def get_launches_brief(self):
flights = self.get_launches()
flight_info_items=['details','flight_number','is_tentative','launch_date_local','launch_date_unix','launch_date_utc','launch_site']
launches_brief=[]
for flight in flights:
launch_brief={}
for item in flight_info_items:
launch_brief.update({item:flight.get(item)})
launches_brief.append(launch_brief)
return launches_brief
위 예제는 일론 머스크의 유명한 우주기업 스페이스 엑스의 발사정보를 웹 API를 통해 가져오는 파이썬 클래스 입니다.
먼저 클래스 컨스트럭터 부분 (def __init__ ) 에서는 웹 API 주소 정보를 define하고 있으며
이 클래스에서 가장 중요한 부분은 _request 메소드 부분입니다. 파이썬의 request 모듈 (https://requests.readthedocs.io/en/master/) 을 사용하여 API주소에 GET요청을 보내고 받은 결과를 resp 변수로 리턴하게 되어 있습니다.
get_launches_brief 메소드는 제가 추가한 부분인데, 지정된 항목 (flight_info_items 리스트) 에 포함된 항목만을 리턴할 수 있게 만들어 보았습니다.
반응형