반응형

AttributeError: module 'attr' has no attribute 's'

메세지 테스트하는데.. 위와 같은 애러 발생..

윈도우 서버에서는 바로 되었는데... 리눅스에서는 이런 문제가 발생하였다.

cifs 물린 py 코드로 윈도우에서 돌아가게끔 짱구를 굴렸으나  문제해결의 쾌감을 맛보기위해 3시간 삽질...

pip3 install -U attr
pip3 install -U attrs
pip3 install -U kb-manager

import asyncio
import telegram


my_token = '토큰!'
chat_id = '쳇아이디~'


bot = telegram.Bot(token=my_token)
async def send_message(text):
    await bot.sendMessage(chat_id=chat_id, text=text)

asyncio.run(send_message('드디어.. ㅠ'))
 
다음에는 텔레그램 api 따는 법을 올려볼게요~!
반응형
반응형

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("정상 토큰")

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

반응형

+ Recent posts