Framework/Django

API POST 코드 공부 (쿠팡)

JM Lee 2023. 6. 13. 02:29
728x90

API를 사실 다른 분이 만드는 것만 계속 바라봤는데,

이번에 코드 공부를 좀 해보았다.

import hmac
import hashlib
import requests
import json
from time import gmtime, strftime

REQUEST_METHOD = "POST" # 요청 방식 설정
DOMAIN = "https://api-gateway.coupang.com" # API 도메인
URL = "/v2/providers/affiliate_open_api/apis/openapi/v1/deeplink" # 요청을 보낼 엔드포인트의 경로

# Replace with your own ACCESS_KEY and SECRET_KEY
ACCESS_KEY = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" # 발급받은 API KEY값 입력
SECRET_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # 발급받은 API KEY값 입력

REQUEST = { "coupangUrls": [
    "https://www.coupang.com/np/search?component=&q=good&channel=user", 
    "https://www.coupang.com/np/coupangglobal"
]}


def generateHmac(method, url, secretKey, accessKey): # 요청 메서드, URL, 비밀 키, 액세스 키를 매개변수로
    path, *query = url.split("?") 
    datetimeGMT = strftime('%y%m%d', gmtime()) + 'T' + strftime('%H%M%S', gmtime()) + 'Z'
    message = datetimeGMT + method + path + (query[0] if query else "") # 메서드와 URL을 기반으로 서명 메시지를 생성
	
    # 비밀 키를 사용하여 HMAC SHA256 서명을 생성
    signature = hmac.new(bytes(secretKey, "utf-8"),
                         message.encode("utf-8"),
                         hashlib.sha256).hexdigest()

    return "CEA algorithm=HmacSHA256, access-key={}, signed-date={}, signature={}".format(accessKey, datetimeGMT, signature)

# 생성된 서명을 포함한 Authorization 헤더 문자열을 반환
authorization = generateHmac(REQUEST_METHOD, URL, SECRET_KEY, ACCESS_KEY)
# 요청 보낼 url 생성
url = "{}{}".format(DOMAIN, URL)
# API 요청 방식 >> JSON 형태
response = requests.request(method=REQUEST_METHOD, url=url,
                            headers={
                                "Authorization": authorization,
                                "Content-Type": "application/json"
                            },
                            data=json.dumps(REQUEST)
                            )
# 응답 출력 실험
print(response.json())

백엔드 서버에서도 JSON으로 보낼 수 있나?라는 막연한 생각을 했지만,

결국 서버에서도 쿠팡 API로 '요청'을 보내는 것이기 때문에

계속해서 JSON 형태를 유지해야 쿠팡 서버 API에서 요청을 인지할 수 있는 것을 상기했다.

'Framework > Django' 카테고리의 다른 글

FBV 와 CBV 차이점  (0) 2023.06.16
DRF Docs 입문  (0) 2023.06.15
[트러블 슈팅] 인코딩 에러  (0) 2023.06.11
[트러블 슈팅] 환경설정..  (0) 2023.06.09
poetry 기본 명령어 모음  (0) 2023.06.07