-
티스토리 블로그 API 연동 완전 자동화 방법프로젝트/개인 프로젝트 2023. 12. 2.반응형
소개
Python을 사용하여 티스토리 블로그에 API를 연동 하는 방법
나는 이를 통하여 자동 글 작성 포스팅을 위한 기반을 미리 만들어 두려고 한다.
기존 다른 블로그 글들에서도 많이 다루고 있지만 다른 블로그들에서 소개 하는 방식은
url로 사용자가 직접 진입을 해서 해당 링크에서 인증 과정을 수동으로 작업을 해줘야 하는 부분이 있다는 것 이다.
그러면 자동화의 의미가 없다고 생각하기 때문에 파이썬의 셀레니움을 같이 연동을 해서 그 인증 부분도 완전 자동화를 했다.
티스토리 API 연동 과정
티스토리 API를 사용하여 블로그에 글을 작성하기 위해서는 몇 가지 단계를 거쳐야 합니다.
1. 티스토리 개발자 센터에서 애플리케이션을 등록하고 인증 과정을 거쳐 액세스 토큰을 발급받습니다.
https://www.tistory.com/guide/api/manage/register
발급 받을때 서비스 URL은 그냥 본인 블로그 주소로 등록 하면된다.
나중에 엑세스 토큰 발급 받기 위한 리다이렉트 될 주소 때문에 필요한건데 크게 상관 없다.
해당 링크에서 애플리케이션을 등록하면 발급되는 App ID, Secret Key를 따로 보관 해준다.
2. 발급 받은 앱 아이디와 키를 가지고 파이썬을 통해 requests 통신을 한다.
통신 방법은 티스토리 공식 open api 문서를 참고 하면 된다.
https://tistory.github.io/document-tistory-apis/auth/authorization_code.html
해당 문서에 따르면
1. Authentication code를 발급 받는다.
2. 발급 받은 Authentication code 코드를 가지고 Access Token을 발급 받는다.
총 두 가지의 통신을 해야 하는데
문제는 여기서 1번의 코드를 받기 위해서 get 요청을 보내고 받은 응답의 url로 이동해서 로그인 후 액세스를 허용 하는 버튼을 클릭하고 리다이렉트 된 링크 주소에서 code 부분을 따서 2번 통신 보낼때 파라미터로 사용을 해야 한다.
이 부분을 자동화 하기 위해서 셀레니움 라이브러리를 사용한다.
필요한 패키지 및 라이브러리
import time import requests from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait
사용된 변수
app_id = "" secret_key = "" redirect_uri = "https://heidong.tistory.com/" auth_code = None kako_id = "" kakao_pwd = ""
메인 코드
def get_authentication_code(): """_summary_ get Authentication code Returns: auth_code : have to use for get Access token """ url = "https://www.tistory.com/oauth/authorize" params = { "client_id": app_id, "redirect_uri": redirect_uri, "response_type": "code", # "state" : "heidong" } auth_code_url = get_request(url, params).url try: driver_sleep = 10 options = webdriver.ChromeOptions() options.add_argument("headless") driver = webdriver.Chrome(options=options) driver.get(auth_code_url) WebDriverWait(driver, driver_sleep).until(lambda x: x.find_element("id", "kakaoBody")) # login with kakao btn js driver.execute_script("kakaoAuth();") # input id, pwd driver.find_element("name", "loginId").send_keys(kako_id) driver.find_element("name", "password").send_keys(kakao_pwd) # click login btn login_btn = driver.find_element("xpath", '//*[@id="mainContent"]/div/div/form/div[4]/button[1]') login_btn.click() WebDriverWait(driver, driver_sleep).until(lambda x: x.find_element("id", "contents")) # click allow btn driver.execute_script("controlOAuthPopup('ok');") driver.implicitly_wait(driver_sleep) auth_code = driver.current_url.split("code=")[1].split("&")[0] return auth_code finally: time.sleep(1) driver.quit()
메인 코드의 포인트는
- 헤드레스로 웹 드라이버를 띄우지 않을것
- webdriverwait을 사용해서 해당 요소의 로딩을 기다릴 것
- 절대 안바뀔것 같긴 하지만 웹 요소 접근으로 인한 웹 페이지 제어가 아닌 웹 드라이버에서 자바 스크립트 실행으로 페이지 변화에 대한 대응을 한 것. (보통 웹 요소보다는 자바 스크립트 소스를 잘 건드리지 않는다.)
이렇게 코드를 짜서 실행을 하면 수동 인증 과정 없이 Authentication code를 발급 받을 수 있다.
이제 발급 받은 코드로 Access Token를 받기 위한 get 통신을 하면 된다.
3. Access Token 발급 받기
def get_access_token(auth_code): """_summary_ get Access token Returns: access_token : access_token """ url = "https://www.tistory.com/oauth/access_token" params = { "client_id": app_id, "client_secret": secret_key, "redirect_uri": redirect_uri, "code": auth_code, "grant_type": "authorization_code" } response = get_request(url, params).text return response.split("access_token=")[1]
access 토큰을 발급 받기 위한 get requests를 보내면 응답 텍스트에 토큰이 나온다.
반응형'프로젝트 > 개인 프로젝트' 카테고리의 다른 글
인스타그램 리버스 엔지니어링 (2) 2024.10.28 크몽 자동 응답 프로그램 개발 (6) 2023.10.28 자동 출석체크 프로젝트(2) (2) 2023.02.03 [웹] 서프라이즈 프로젝트 (0) 2022.05.30 파이썬 requests 크롤링 (0) 2022.05.26