일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 음성인식
- 구글일정
- Ai
- Selenium
- 독학
- Quickstart
- STT
- 파이썬독학
- 소스코드
- 파이썬간단한게임
- 기본기
- kakao
- 구글캘린더
- 자동화
- 파이썬
- 파이썬게임
- 파이썬게임만들기
- 인공지능
- 딥러닝
- 오늘배워오늘쓰는
- 간단한파이썬게임
- 업무자동화
- 크롤링
- 카카오
- 빅데이터
- 구글
- Python
- OpenAPI
- 웹크롤링
- 머신러닝
Archives
- Today
- Total
ai-creator
[python] 인증키 관리 본문
반응형
<< 문제 정의 >>
프로그램을 작성할 때마다 앱키를 찾아서 복사하고, access_token이 만료되면 재발급소스 코드를 수행하는게 참 번거롭습니다.
<< 목표 >>
OpenAPI를 제공하는 플랫폼들의 인증키를 관리하는 프로그램을 만들어봅시다.
<< 사전 준비 >>
- 구글 인증키 발급
- 카카오 인증키 발급
- 네이버 인증키 발급
- 공공데이터 포털 인증키 발급
<< 예제 파일 >>
<< 구현 순서 >>
Step 1 | auth 모음집 만들기 |
Step 2 | 플랫폼의 인증 파일명 얻어오기 |
Step 3 | 인증키 읽기 |
Step 4 | 인증키 업데이트 |
Step1) auth 모음집 만들기
auth 라는 이름의 폴더를 만들고, 그 안에 4개의 파일을 만듭니다.
- 구글의 경우는 다운로드 받은 파일명을 google_code.json로 파일 이름을 변경합니다.
- kakao_code.json은 아래와 같이
{"app_key": "앱키를 입력하세요",
"refresh_token": "refresh token을 입력하세요",
"access_token": "access token을 입력하세요"}
- naver_code.json
{"client_id" : "client_id를 입력하세요",
"client_secret" : "client_secret을 입력하세요"}
- opendata_code.json
{"service_key" : "service_key를 입력하세요"}
Step2) 플랫폼의 인증 파일명 얻어오기
인증 파일명은 플랫폼 별로 규칙성이 있습니다.
000_code.json 이지요.
플랫폼명(회사명)을 input으로 받고, 인증 파일명을 output으로 주는 함수를 만들었습니다.
def _get_auth_filename(company):
BASE_DIR = "auth"
POSTFIX = "_code.json"
filename = os.path.join(BASE_DIR, company+POSTFIX)
return filename
Step3) 인증키 읽기
원하는 플랫폼의 인증키를 읽어서 output으로 주는 함수 입니다.
def read_auth(company):
#>> 파일명 얻기
filename = _get_auth_filename(company)
# >> 파일읽기
with open(filename, "r") as fp:
tokens = json.load(fp)
if company == "google":
tokens = filename
# >> auth key return
return tokens
Step4) 인증키 업데이트
카카오의 경우 특정 시간이 지나면 access_token이 무효화 됩니다. 이때 refresh token으로 재발급받아야 하죠.
재발급 받는 함수입니다.
단, 현재는 카카오 플랫폼만 지원이 되요. 만약, 네이버도 추가하지 싶다면, elif문을 추가하면 됩니다.
def _kakao_update_auth(tokens):
url = "https://kauth.kakao.com/oauth/token"
data = {
"grant_type" : "refresh_token",
"client_id" : tokens['app_key'],
"refresh_token" : tokens['refresh_token']
}
response = requests.post(url, data=data)
if response.status_code == 200:
tokens['access_token'] = response.json()['access_token']
tokens['expires_in'] = response.json()['expires_in']
else:
print("kakao_update_auth(%d) : error!!" %(response.status_code))
#tokens['expires_in'] = 0
return tokens
def update_auth(company, token):
#>> update
if company == "kakao":
#print(">> before : "); print(token)
retoken = _kakao_update_auth(token)
#print(">> after : "); print(retoken)
#elif company == "naver":
# retoken = naver_update_auth(token)
else:
return token
#>> 파일 쓰기
#>>>> 파일명 얻기
filename = _get_auth_filename(company)
#>>>> write
with open(filename, "w") as fp:
json.dump(retoken, fp)
return retoken
저작물의 저작권은 작성자에게 있습니다.
공유는 자유롭게 하시되 댓글 남겨주세요~
상업적 용도로는 무단 사용을 금지합니다.
끝까지 읽어주셔서 감사합니다^^
반응형
'오늘 배워 오늘 쓰는 OpenAPI > Quick Start' 카테고리의 다른 글
[Python] 업무 자동화 - Naver 메일 보내기 (14) | 2020.06.12 |
---|---|
[python] Slack Webhook 메시지 보내기 (0) | 2020.06.10 |
[Python-pptx] 업무 자동화 - 파이썬으로 파워포인트 편집하기 (13) | 2020.05.21 |
[Python/MacOS] Selenium 크롤러 - 네이버 자동 로그인 (캡차 해결 버전) (5) | 2020.05.21 |
유투브 영상으로 Google Speech-to-Text 기능과 성능 확인 (0) | 2020.03.28 |
Comments