[파이썬 활용] 티스토리 API를 파이썬으로 호출하여 글을 작성하는 방법

티스토리도 API가 있다고?

티스토리는 네이버 블로그와 함께 국내에서 가장 많이 사용하는 블로그 서비스입니다. 원래는 “다음” 에서 운영했는데 다음이 카카오에 인수되면서 현재는 “카카오” 에서 운영하고 있습니다.

티스토리 로고

저도 티스토리를 운영하고 있는데 티스토리가 API가 있었다는 사실을 그동안 알지 못했습니다. 당연히 블로그 글은 에디터를 사용하여 글을 쓰는게 정석이라고 생각을 했었습니다.

그런데 최근에 이런 저런 웹 서핑을 하다보니 “티스토리” 도 API를 사용하여 글을 쓰고 읽는게 가능하다고 하네요. 그리고 “파이썬” 을 이용하면 글 쓰는게 가능해진다고 합니다.

API로 글이라.. 나름 흥미로워서 최근에 파이썬을 즐기고 있던 저는 꽤 괜찮은 도전이라고 생각해서 한번 API를 사용하여 글을 써보기로 했습니다.

이번에는 파이썬을 활용하여 티스토리 API를 호출하여 글을 쓰는 방법에 대해 알아보겠습니다.

티스토리 API 사용을 위한 API 키 얻어오기

티스토리에서는 블로거들의 원활한 글쓰기를 돕고자 “Open API” 를 운영하고 있습니다. 따라서 티스토리에 가입되어 있으면 누구나 API 사용이 가능합니다.

그런데 API를 사용하려면 약간의 절차가 필요합니다.

위 링크를 통해 Open API 의 앱 등록 절차를 진행해야 합니다. 내 티스토리 계정으로 들어가면 아래와 같이 나타납니다.

위 빨간색으로 표시된 부분에 기입을 합니다. 서비스 URL 은 자신의 티스토리 주소를 입력해줍니다. 또한 CallBack 도 동일하게 티스토리 주소를 입력해줍니다. 완료되었으면 “등록” 버튼을 누릅니다.

그런 다음 “앱 관리” 로 들어가면 좀전에 생성한 앱 아이디와 키가 생성된 것을 확인할 수 있습니다. 이 정보를 토대로 파이썬으로 API를 호출해 주면 티스토리 글을 작성하는게 가능해집니다.

웹 브라우저로 “Access Token 값” 얻기

다음으로 App ID와 Secret Key 를 사용해 웹 브라우저에 접속하여 Access Token 값을 얻어야 합니다. 그래야만 API로 글작성이 가능해 집니다.

https://www.tistory.com/oauth/authorize?client_id={app_id}&redirect_uri={서비스URL}&response_type=code

위 URL 에 App ID와 서비스 URL 즉 티스토리 주소를 넣어주고 웹 브라우저에서 접속을 시도하면 됩니다.

그러면 위와 같이 앱의 접근 권한을 허가하라는 메시지가 뜹니다. “허가하기” 를 클릭합니다.

그러면 위와 같이 웹 브라우저의 주소창에 Code 값이 생성됩니다. 이제 마지막으로 Access Token 을 얻기만 하면 됩니다.

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
  • {client-id} : App ID
  • {client-secret} : 발급받은 Secret Key
  • {redirect-url} : 서비스 URL(티스토리 주소)
  • {code} : 직전 발급받은 code

위 형태로 웹 브라우저에 입력을 해주면 됩니다. 그런데 좀더 쉽게 하기 위해서 아래의 파이썬 코드를 활용하면 쉽게 얻어올 수 있습니다.

def get_access_token(code, app_id, secret_key, uri):
    get_url = 'https://www.tistory.com/oauth/access_token'
    
    params = { 'client_id' : app_id,
            'client_secret' : secret_key,
            'redirect_uri' : uri,
            'code' : code,
            'grant_type' : 'authorization_code' }

    res = requests.get(get_url, params=params)

    if res.status_code == 200:
        print(res.text.replace('access_token=','')) 
    else: 
        print(res) #access_token 최종 받기

얻어온 Access Token 을 잘 저장해 놨다가 API를 호출할 때 사용하면 되겠습니다.

티스토리 API로 테스트 및 글쓰기

자 그럼 티스토리 API를 파이썬으로 호출하여 확인 및 글을 써볼까요?

먼저 아래 코드로 내 티스토리의 정보를 확인해 보겠습니다.

from time import sleep
import requests
import json
from bs4 import BeautifulSoup

def get_api_test(blog_id, token):
    url = 'https://www.tistory.com/apis/category/list'
    params = { 'access_token': token,
                'output' : 'json',
                'blogName' : blog_id
    }

    res = requests.get(url, params=params)

    if res.status_code == 200:
        res_json = res.json()
        print(res_json)
    else:
        res_json = res.json()
        print(res_json)

위 함수는 티스토리 API 를 호출하여 API를 사용하는 티스토리의 URL 정보를 호출해 주는 기능을 합니다. 함수의 blog_id 는 내 티스토리 계정의 ID 이고 token 은 위에서 설명한 액세스 토큰 값입니다. 위 함수를 호출한 결과는 다음과 같습니다.

200 OK 가 뜨면서 내 티스토리의 URL과 Second URL 이 뜨게 됩니다. 여기까지 정상적으로 진행이 됐으면 티스토리 API로 글을 쓸 준비가 된 것입니다.

그럼 이제 실질적으로 티스토리 API로 글을 써볼까요?

def write_post(blog_id, token, title, content):
    tistory_url = 'https://www.tistory.com/apis/post/write?'

    parameters = {
        'access_token':token,
        'output':'json',
        'blogName': blog_id,
        'title': title,
        'content':content,
        'visibility':'0',
        'category':'',
        'tag':'',
        'acceptComment':'1'
    }

    #requests.post(tistory_url,params=parameters)

    result = requests.post(tistory_url, params=parameters)
    result = BeautifulSoup(result.text)
    print(result.prettify())

위의 함수는 내 티스토리에 API를 호출하여 포스트 글을 작성하는 함수입니다.

  • blog_id : 내 티스토리 ID
  • token : 액세스 토큰
  • title : 티스토리 글 제목
  • content : 티스토리 본문 내용

그럼 위 함수를 이용하여 제 티스토리에 글을 예시로 써보겠습니다.

위 함수를 호출하여 글을 올렸습니다. 결과가 위와 같이 나오네요. 200 으로 나온거 보면 성공한거 같은데 실제 글을 보겠습니다.

실제로 확인해 보니 내 티스토리에 글이 올라간 것을 확인할 수 있었습니다. 성공이네요^^

참고로 위 write_post( ) 의 API 파라미터 값을 설명을 드리겠습니다.

  • access_token : 액세스 토큰
  • output : 전송 방식. 여기서는 json
  • blogName : 내 블로그 ID
  • title : 글 제목
  • content : 글 본문 내용
  • visibility : 글 발생 상태. 0은 비공개, 1은 보호글 3은 발행
  • category : 카테고리 ID
  • tag : 태그(여러개는 , 로 구분)
  • acceptComment : 댓글 권한 설정. 0은 비허용 1은 허용

write_post( ) 에서 visibility 와 category, tag, acceptComment 는 함수의 인자로 사용하지 않았는데 본인의 목적에 맞게 변경하여 사용하면 되겠습니다.