코딩해보기/크롤링 해보기

카카오 토큰 관리

지니어 2022. 9. 8. 08:13

https://elecsog.tistory.com/55

 

카카오 메시지를 보내기 위한 토큰 발급 받기

(1) 카카오 개발자 사이트에 들어가서 애플리케이션 설정을 진행한다. 카카오 개발자 사이트 : https://developers.kakao.com/  <내 애플리케이션 >  <애플리케이션 추가하기> < 접근 권한 설정 > Redirect U..

elecsog.tistory.com

 

위 링크 과정을 진행을 하면 아래와 같이 토큰을 얻을 수 있다. 이 토큰은 만료 시간이 정해져 있다. 그래서 어제까지 실행이 잘 됐던 코드가 갑자기 막혀 버리는 사태가 발생할 수 있다. 

그래서 토큰을 수시로 Refresh 하고 다시 저장하는 루틴을 만들어 놓을 필요가 있다. 

import json
import os
import datetime
import requests

#아래 함수에서 filename은 토큰이 저장될 파일 경로 입력해 주면 된다. 

def save_tokens(filename, tokens):
    with open(filename, "w") as fp:
        json.dump(tokens, fp)


def load_tokens(filename):
    with open(filename) as fp:
        tokens = json.load(fp)

    return tokens

# 아래 App_key는 이전 링크 참조하면 App_Key 받는 방법은 알 수 있다.
# 그냥 카카오 개발자 사이트 들어가서 API KEy APP Key Client ID 같은건
# 한파일에 저장해 놓고 수시로 가져다 쓸수 있게 하든지
# 코드 주석으로 남겨 놓고 쓰면 좋을 듯.`~~~~
def update_tokens(app_key, filename):
    tokens = load_tokens(filename)

    url = "https://kauth.kakao.com/oauth/token"

    data = {
        "grant_type" : "refresh_token",
        "client_id" : app_key,
        "refresh_token" : tokens['refresh_token']
    }
    
    response = requests.post(url, data=data)

    # 요청에 실패했다면
    if response.status_code != 200:
        print( response.json())
        tokens = None
    else:   # 성공했다면
        print(response.json())
        #기존 파일 백업해 두자 용량 몇KB 이다
        # 날짜를 파일 이름에 추가하여 백업 파일인지 확인.
        now = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
        backup_filename = filename+"."+now
        os.rename(filename, backup_filename)
        # 갱신된 토큰 저장
        tokens['access_token'] = response.json()['access_token']
        save_tokens(filename, tokens)

    return tokens

다음 포스트에서는 진짜 메시지 보내는거 해야지.. 뭐이리 준비할게 많은지...하지만..

주식신문 송부까지 ..진짜 얼마 안남은 듯 하다. 

 

퇴근하고 일단 재밌어서 시작은 했는데 점점 귀찮다..

그래도 첫번째 사적 프로젝트이니 시간이 얼마가 걸리든 가보긴 가보련다.