홍카나의 공부방

REST API에서 데이터 추출하기 파이썬 예제 본문

Data Engineering

REST API에서 데이터 추출하기 파이썬 예제

홍문관카페나무 2023. 5. 13. 17:18

REST API에서 데이터를 추출하는 것은 흔한 방법이다.

다음의 간단한 패턴과 파이썬 코드 예제로 살펴본다.

 


패턴

  1. API에 HTTP GET Request를 보낸다.
  2. JSON Format일 가능성이 높은 Response를 받는다.
  3. 응답을 파싱하고 추후 스토리지나 데이터베이스에 로드할 수 있는 CSV 파일로 변환한다.

* 데이터를 데이터 웨어하우스에 적재하기 위해 JSON 형식으로 저장할 수도 있지만, 이 글에서는 CSV 파일을 이용하겠다.

 


 

예제

 

이 글에서는 Open Notify라는 API에 연결하겠다.

그중에서도 국제우주정거장(ISS)의 현 위치를 return 하는 API를 이용하겠다.

http://open-notify.org/Open-Notify-API/ISS-Location-Now/

 

 

JSON 데이터는 현재 타임스탬프와, ISS의 위도/경도 위치를 반환할 것이다.

그리고 CSV 파일에는 다음과 같이 ISS의 위치, 시간이 기록될 수 있도록 만들 것이다.

50.6206,-131.5936,2023-05-13 16:47

 

API를 쿼리하고 파이썬에서 응답을 처리하려면 requests 라이브러리가 필요하다.

requests 라이브러리를 이용하여 HTTP 요청과 응답을 사용해보자.

pip install requests를 이용하여 현재 환경에 설치한다.

 

그리고 받아온 JSON을 CSV 파일로 만들어서 AWS S3 버킷에 업로드할 수 있게끔 코드를 작성해 보겠다.

JSON을 파싱 하기 위해 python의 json 라이브러리도 필요하나, 이 라이브러리는 표준으로 설치되어 있다.

그리고 Boto3 라이브러리가 CSV 파일을 S3 버킷에 업로드할 때

필요한 자격증명을 configparser 라이브러리를 이용하여 가져오겠다.

 

import requests as rs
import json
import csv
import configparser
import boto3
from datetime import datetime

api_response = rs.get("http://api.open-notify.org/iss-now.json")

# json 형식으로 출력해보는 코드
# print(api_response.content)

# json 처리
response_json = json.loads(api_response.content)
datas = []

location = response_json["iss_position"]
datas.append(location["latitude"])
datas.append(location["longitude"])
datas.append(
    datetime.fromtimestamp(response_json["timestamp"]).strftime("%Y-%m-%d %H:%M")
)

print(datas)
export_file = "export_file.csv"

with open(export_file, "w", newline="") as fp:
    csvw = csv.writer(fp)
    csvw.writerows([datas])  # 2차원 리스트로 처리
fp.close()


# load aws_boto_credentials value
parser = configparser.ConfigParser()
parser.read("pipeline.conf")
access_key = parser.get("aws_boto_credentials", "access_key")
secret_key = parser.get("aws_boto_credentials", "secret_key")
bucket_name = parser.get("aws_boto_credentials", "bucket_name")

s3 = boto3.client("s3", aws_access_key_id=access_key, aws_secret_access_key=secret_key)
s3.upload_file(export_file, bucket_name, export_file)

 

위 코드에서 사용한 pipeline.conf 파일의 구성 내용은 다음과 같다.

[aws_boto_credentials]
access_key = AWS S3 버킷 엑세스키
secret_key = AWS S3 버킷 시크릿키
bucket_name = 버킷 이름
account_id = AWS 계정 아이디

 

반응형