반응형

https://soowim.tistory.com/98

 

아래와 같이, 스크립트로 글을 작성하려면 엑세스토큰을 먼저 받으셔야해요! 위 게시물 확인하시고 ! 토큰 받은 다음에 아래와 같이 진행하시면 됩니다.

API TEST로 글을 작성하려한다.

코드 실행~

 

엑세스~ 200 !리턴 정상적으로 게시 되었고, https://blog.soowim.co.kr/99 게시 된 링크로 확인 고고

 

 

잘 작성이 되었습니다.

 코드는 아래와 같아요~~복사해서 맘껏 쓰세요!

import requests


token = "{본인 엑세스 토큰!}"

blogname = "{본인 blogurl}"

def write_post(title="제목", content="컨텐츠 내용"):
    """write tistory post"""
    data = f'{tistory_write_url}{token}&blogName={blogname}&title={title}&content={content}&output=json'
    return  requests.post(data).json()
   
if __name__ == "__main__":
    post_result = write_post()
    print(post_result)

참 쉽쥬잉~

반응형
반응형

 

 

링크에 접속하면 애플리케이션 기능 퍼미션 활성화 허가를 해줘야한다.

 

허가하기를 누르면 본인의 blog url로 리다이렉션 될 것 이다.

 

\

url 주소를 보면 code =블라블라 

코드를 확인 했으면 아래 코드를 작성한다.

import requests

from tistory import Tistory, Auto

# API 키와 리디렉션 URI 설정
client_id = '********************************************' # 발급받은 App key
client_secret = '****************************************' # 발급받은 Secret key
redirect_uri = "https://blog.soowim.co.kr" # API 신청시에 기입한 리디렉션 URI


code = "위에서 받은 블라블라 입력."

to_url = f'https://www.tistory.com/oauth/access_token?client_id={client_id}&client_secret={client_secret}&redirect_uri={redirect_uri}&code={code}&grant_type=authorization_code'

print (to_url)

위 코드를 실행하여 나온 값을  웹페이지에 접속하여 F12 개발자 도구를 켜 놓고 웹에 접속하면

 

 

 

엑세스 토큰을 받았다!!!!

이제 글을 써보자!

 

 

 

 

반응형
반응형

어제 받은 토큰으로 메세지 발송 시도~~~ 하였으나

 

코드는 돌았는데...메세지 무반응....

알아보니

 

"로그인 시 카카오계정 세션의 인증 시간은 기본 24시간이며, 최초 인증 후 세션 시간은 변경되지 않습니다. 사용자가 로그인 유지를 선택한 경우에는 인증 시간이 1입니다. "

뚜둥..쓰 

 

우선 토큰 부터 다시 파해치자.

# https://kauth.kakao.com/oauth/authorize?client_id={api값}&redirect_uri={설정하신 리다이렉션 url}&response_type=code 

위 url로 접속하면  code 값을 반환해줍니다.

 

====================코드===============================

import requests
import json

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

data = {
"grant_type" : "authorization_code",
"client_id" : "{apt값}",
"redirect_uri" : '설정하신 리다이렉션 url',
"code" : "반환 된 code 값"
}

response = requests.post(url, data=data)
tokens = response.json()


if "access_token" in tokens:
    with open("kakao_token.json", "w") as fp:
        json.dump(tokens, fp)
        print("Tokens saved successfully")
else:
    print(tokens)

====================코드===============================

실행해주세요.

토큰을 저장 하였습니다 석세스~~

 

생성 된 토큰에 유효기간이 있음

딕셔너리 형태 반환 값 중 , "expires_in": 12333, 숫자 초단위  잔여 유효시간을 전달 합니다!-

 

아래 코드로 토큰을 리프레시하실 수 있습니다.

====================코드===============================

import requests
import json

rest_api_key = 'aa462514c84043fba37df1f82aaf6f4b'
redirect_uri = 'https://localhost:3000'
url_token = 'https://kauth.kakao.com/oauth/token'
authorize_code = 'CK5cVxsxO6I4zBsMaMgo1AWl7wf9vMGhzsACPuD7phtO_aQx8jjk_91O5O-PbD7RnFFdvgo9c00AAAGI4mjg8A'

try:
    with open("kakao_token.json","r") as fp: # 기존에 저장된 token 파일이 있는지 찾아봅니다.
        tokens = json.load(fp)
        if "error_code" in tokens:
            tokens={}
except Exception as e:
    print(e)
    tokens={}

if tokens == {}:
    # 신규 발급이 필요한 경우
    param = {
        'grant_type':'authorization_code',
        'client_id':rest_api_key,
        'redirect_uri':redirect_uri,
        'code': authorize_code, # 한번 발급되면 authorize_code는 무효화됩니다. 
    }

    response = requests.post('https://kauth.kakao.com/oauth/token', data=param)
    tokens = response.json() # token 발급 api로 발급된 정보들을 kakao_token.json 파일에 저장합니다.
    if "error_code" in tokens:
        print(tokens["error_code"])
    else:
        with open("kakao_token.json","w") as fp:
            json.dump(tokens, fp)
            print("파일로 토큰 정보 저장!")
else:
# 기존 발급된 정보가 있을 경우
    headers = {
        "Authorization": "Bearer " + tokens["access_token"]
    }
    # access_token_info의 결과가 계속 -401로 돌아옵니다. 추후 수정할 예정입니다.
    response = requests.get('https://kapi.kakao.com/v1/user/access_token_info', headers=headers)
    result = response.json()
    if "error_code" in result:
     # -401은 유효하지 않은 값 혹은 유효기간이 지난 토큰일 경우 발생하는 에러입니다.
        # api로 token 갱신을 요청합니다.
        param = {
            "grant_type":"refresh_token",
            "client_id" : rest_api_key,
            "refresh_token" : tokens["refresh_token"]
        }
        response = requests.post('https://kauth.kakao.com/oauth/token', data=param)
        new_token = response.json()
        
        # 새로 발급된 token을 다시 저장합니다.
        if "error_code" in new_token:
            print("ERROR :", new_token["error_code"])
        else:
            with open("kakao_token.json", "w") as fp:
                json.dump(new_token, fp)
                print("파일로 새로운 토큰 정보 저장!")
    else:
        print("정상 토큰")

====================코드===============================

반응형
반응형

A. www.developers.kakao.com/

 

Kakao Developers

카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.

developers.kakao.com

 

 

B. (A) 웹으로 이동하여, 로그인 후 애플리케이션 생성

 "내 애플리케이션" 이동

"애플리케이션 추가하기"

"앱이름" "사업자명" 입력, 사업자 없으면 버디버디 아이디 입력하시면 됩니다. (조크) ... 아무거나 쓰시면 됩니다 !

"앱 키" 중 REST API 키를 통해 연동을 할 예정입니다.

 

 

"카카오 로그인"  "상태 on" 으로 바꾸고,  "Redirect URI"  ->  "https://localhost:3000" 입력 -> 토큰 값을 리다이렉트로 받아와야 합니다.

https://kauth.kakao.com/oauth/authorize?client_id=자신의 REST 키값&redirect_uri=https://example.com/oauth&response_type=code

파란새 부분으로 줄을 쳐 놓은 code= 토큰값 으로 토큰을 json 형태로 저장하여 r,w 인증에 사용합니다.

 

============================================================================================

import requests
import json

url = 'https://kauth.kakao.com/oauth/token'
client_id = '자신의 REST 키값'
redirect_uri = 'https://example.com/oauth'
code = '자신의 CODE 값'

data = {
    'grant_type':'authorization_code',
    'client_id':client_id,
    'redirect_uri':redirect_uri,
    'code': code,
    }

response = requests.post(url, data=data)
tokens = response.json()

#발행된 토큰 저장
with open("token.json","w") as kakao:
    json.dump(tokens, kakao)

 

============================================================================================

import requests
import json

#발행한 토큰 불러오기
with open("token.json","r") as kakao:
    tokens = json.load(kakao)

url="https://kapi.kakao.com/v2/api/talk/memo/default/send"

headers={
    "Authorization" : "Bearer " + tokens["access_token"]
}

data = {
       'object_type': 'text',
       'text': '퇴근 완료',
       'link': {
           'web_url': 'https://developers.kakao.com',
           'mobile_web_url': 'https://developers.kakao.com'
       },
       'button_title': '키워드'
   }
   
data = {'template_object': json.dumps(data)}
response = requests.post(url, headers=headers, data=data)
response.status_code

 

============================================================================================

 

 

 

*api 발급 순서 정리

현재 카카오모먼트API 사용하기위해
1.https://kauth.kakao.com/oauth/authorize?client_id= 3 요청해서 인가코드 받고

2.URL → https://kauth.kakao.com/oauth/token 4 파라미터 1.client_id, 2.code, 3.redirect_uri, 4.grantType=“authorization_code”
요청으로 받은 refresh토큰으로

3.URL → https://kauth.kakao.com/oauth/token 4 파라미터 1.client_id, 2.refresh_token 3.grant_type=refresh_token
요청으로 ACCESSTOKEN을 받아서 사용

 

근데...토큰 유효 시간이 너무 짧다..

해결방법은~ 아래 링크!

https://blog.soowim.co.kr/95

 

 

반응형

+ Recent posts