1편 - API발급 전체 프로세스 구성 내용
2편 - API발급 전체 프로세스 구성 내용
API 테스트 및 Python 코드 / ChatGPT / 24시간 업데이트 내용
3편 - Request로 가져오기
cURL Python 코드를 활용해서 x-token만들기
3편에서 개발자 도구와 cURL Python으로 쿠팡 API요청 코드를 받는 방법을 기술하였다.
실행시 아래와 같이 Python코드를 얻을 수 있다.
위 코드를 실행하면 바로 이벤트 정보를 얻을 수 있다.
아쉽게도 위 코드는 계속 사용할 수 없다. 왜냐하면 유통기한이 있기 때문이다.
유통기한?
보통 API를 제공하는 사이트는 "유료로 API 기능을 제공하거나" , "특정 회원에게만 기능을 제공한다"
그런데 이런 유저들이 자신의 코드를 배포하여 "허가 받지 않는 유저나" "해킹 유저들에게" 원치 않는 정보 유출이 발생 할 수 있다.
이렇게 되면 서버 관리자는 야근에 고통 받을 것이고, API는 안정적인 서비스 제공이 어려울 것이다.
서버의 Token과 사용자의 Token 비교
그래서 보통 서버는 로그인을 할때 특정 Token을 사용자의 session에 저장을 해서 사용자의 행동을 추적하고, 특정 기능의 사용 여부를 서버의 저장된 session token과 사용자의 session token을 비교 확인한 후 동일할 경우에만 기능을 제공해준다.
이러한 Token은 1일단위나 짧게는 10분 단위로 제한하고 "연장"하거나 다시 로그인 하지 않을경우 만료되어 사용이 불가능하다. <- 자동 로그아웃을 시켜 재 로그인을 유도하거나, 오류 메시지로 알려준다.
그럼 방법이 없는 건가?
방법1) 셀레니움으로 가짜 로그인해서 Token키를 업데이트 하는 방법
Selenium은 Python 라이브러리로 크롬을 열고, 사용자의 특정 동작을 Python 코드로 조작하여, 실제 사용자가 행동하듯이 하여 토큰을 얻는 방법이다.
가장 편한 방법이지만 "로봇 체크"나 "2중 로그인"일 경우에는 사용하기 어려운 방법이다.(물론 그것도 뚫는 방법은 많다.)
셀레니움 사용법은 차후 게시할 예정이다.
방법2) API키로 Token키를 업데이트 하는 방법
API 사용자는 Access Key와 Secret Key를 전달받는데 2개의 키를 사용해서 토큰을 업데이트 할 수 있다.
아래 코드를 사용하면 coupang에서 사용하는 x_token을 업데이트 할 수 있다.
import time
import jwt
accessKey = 'API 액세스 키'
secretKey = 'API 시크릿 키'
def generate_token():
payload = {
'access_key': accessKey,
'timestamp': int(time.time() * 1000),
}
token = jwt.encode(payload, secretKey, algorithm='HS256') //알고리즘 HS256으로 json web token을 인코딩한다.
return token
x_token = generate_token()
print(x_token)
만일 정상적으로 x_token이 뜨지 않는다면 댓글로 문의바랍니다.
X-token으로 이벤트 목록 받기
1) 토큰 업데이트 방법도 알았고,
2) 서버에 어떻게 요청(request)하는지와
3) request시 어떤 항복이 필요한지를
알게 되었다. 위 내용들을 모두 종합해서 아래 코드를 작성하였다.
쿠팡 현재 진행중인 이벤트 목록을 가져오는 Python 코드
import time
import jwt
import requests
accessKey = '액세스 키'
secretKey = '시크릿 키'
cookies = {
'CSID': 'cURL Python로 받은 CSID',
'CUPT': 'cURL Python로 받은 cUPT',
'CPUSR_RL': 'cURL Python로 받은 CPUSR_RL',
}
def generate_token():
payload = {
'access_key': accessKey,
'timestamp': int(time.time() * 1000),
}
token = jwt.encode(payload, secretKey, algorithm='HS256')
return token
def post_event(json_data):
headers = {
'Authorization': 'Bearer ' + generate_token(),
'Content-Type': 'application/json',
}
response = requests.post('https://partners.coupang.com/api/v1/events', cookies=cookies,headers=headers, json=json_data)
return response.json()
json_data = {
'page': {
'pageNumber': 0,
'size': 120,
},
}
response = post_event(json_data)
print(response)
이제 위에서 받은 eventId를 사용해서 각 이벤트의 URL를 추출하는 코드를 실행할 수 있다.
events XHR를 사용해서 정보를 가져온것 처럼, eventId를 사용해서 이벤트 url를 가져오는 방법을 실습해보길 바랍니다.
너무 귀찮으시다면 5편에 이어서 작성하겠습니다.
끝.(5편 속편)
'AI > chatGPT' 카테고리의 다른 글
[쿠팡 API 발급 완료]쿠팡 API + chatGPT + web으로 객관적인 1등 제품 가져오기 프로젝트 -1 (0) | 2023.11.26 |
---|---|
[chatGPT]chatGPT 활용하기 -2 (빠르게 블로그 글 쓰기) (2) | 2023.11.04 |
[ChatGPT]Chatgpt가 안되거나 느릴경우 추천하는 사이트 -chatgpt 대체 (0) | 2023.10.04 |
[chatGPT]chatGPT 활용하기 -1 (flowchart 그리기) (0) | 2023.04.17 |