Strava API – Token

Written by

in

Strava는 별다른 조건 없이 API를 이용하여 자료를 처리할 수 있다.

access token을 이용해서 자료를 읽을 수 있다. 쓰기도 되는 모양이지만, 난 사용하지 않을 것 같다. access token은 발급 후 9시간 동안 유효하다. refresh token 을 이용해서 발급 신청을 할 수 있다.

홈페이지에서 확인할 수 있는 refresh token 이나 access token 을 이용할 수 있는 경우와 할 수 없는 경우가 있다. 환장할 노릇이지만 이건 외국 사용자들도 흔하게 겪는 문제인 것 같다. 이용할 수 없는 경우는 해당 token에 읽기 권한이 없기 때문이라고 한다. 이럴 경우 이용 목적을 명시한 code 를 발급 받고, 이를 이용해서 access token을 발급 받아서 이용하면 된다. 웃기는 것은 이렇게 하면 홈페이지의 access token 도 일시적으로 사용 가능하다.

이 쪽으로 공부를 하지 않은 나로선 이 과정이 이해가 어렵다. 여러 번 시도 끝에 알게 된 부분은 다음과 같다.

  • Web application 은 사람의 입력 과정이 개입되어야 한다.
  • Mobile application 은 로그인 되어 있는 앱이 있다면 개입을 최소화 할 수 있다.
  • code는 redirect uri을 이용해서 알 수 있다.
  • 코파일럿에 물어보니 여러 복잡한 방법을 알려 준다. 도움이 안되었다.
  • Selenium을 이용한 방법도 있는 것 같다. 하지만, 나의 개발 환경인 주피터 랩과 실제 사용할 환경에서는 사용이 어렵다.
  • 내 도메인 주소를 redirect uri로 설정한 후 진행해 보았다. 그 결과 웹서버 로그에 code가 포함된 주소가 있을 것 같았다. 확인해 보았더니 실제로 있었고 이를 이용하기로 했다.

Web application 을 이용할 때에는 다음의 주소를 이용한다.

https://www.strava.com/oauth/authorize

스마트폰에서는 다음의 주소를 이용한다.

https://www.strava.com/oauth/mobile/authorize

난 redirect_uri 를 https://www.welovedoctor.com 으로 설정했다. 그렇다면 다음의 링크를 이용한다.

auth_url_mobile = f"https://www.strava.com/oauth/mobile/authorize?client_id={CLIENT_ID}&response_type=code&redirect_uri=https://www.welovedoctor.com&approval_prompt=auto&scope=read,activity:read"

이러면 redirect_uri 에 code가 포함된 주소를 받을 수 있다. nginx의 access.log 를 파싱해서 code를 추출했다.

이 code를 이용해서 token 을 받을 수 있다.

url = "https://www.strava.com/oauth/token"
payload = {
	'client_id': CLIENT_ID,
	'client_secret': CLIENT_SECRET,
	'code': CODE,
	'grant_type': 'authorization_code'
}
response = requests.post(url, data=payload)