티스토리 계정을 카카오 계정으로 전환했다면, 내가 알고 있는 지식으론 티스토리 Access Token은 자동으로 발급받을 수 없다는 결론을 내렸다. 그래서 티스토리 오픈API의 Access Token을 발급받으려면 App ID를 포함한 아래의 주소를 브라우저에 입력하도록 한다.
https://www.tistory.com/oauth/authorize?client_id=<App ID>&redirect_uri=https://memories.tistory.com&response_type=code
티스토리 오픈API에서 '앱 등록'을 완료하면 'App ID'과 'Secret Key'을 발급받을 수 있고, 위 주소의 client_id 값에 발급받은 'App ID' 입력하고 redirect_uri로 자신의 callback_url로 설정한 값을 브라우저 주소로 입력하면 아래의 이미지와 같은 결과를 볼 수 있다. 카카오 계정이 로그인되어 있는 상태가 아니면 로그인 화면을 먼저 출력될 것이다.
티스토리 사용자 계정을 'App ID'로 접근을 허용할 경우, 오른쪽 이미지와 같이 callback url로 리다이렉션되며 redirect url 파라미터로 전달된 'code' 및 이미 발급받은 'Secret Key'을 아래의 주소에 적용하여 브라우저에 입력하도록 한다.
https://www.tistory.com/oauth/access_token?client_id=<App ID>&client_secret=<Secret Key>&redirect_uri=https://memories.tistory.com&code=1d363ac44631e3d93505fe1739b382381eb6e3f35ac9f698f66ee59d79999d544e52bf0e&grant_type=authorization_code
이제 파이썬 PC 앱에서 티스토리 오픈API 사용할 수 있는 Access Token을 아래 이미지와 같이 발급 받을 수 있다. 자동으로 발급받을 수 있다면 이런 복잡한 과정은 필요없겠지만... 카카오 정책이니... ;;
이렇게 발급받은 Access Token으로 티스토리 오픈API를 사용하여 블로그 내용을 추가, 삭제 및 업데이트를 브라우저 접속없이 파이썬으로 처리를 할 수 있다.
티스토리 오픈API 문서를 참고하여 파이썬으로 티스토리 블로그 정보 및 글을 추가, 삭제 그리고 수정을 할 수 있다. 여기서는 간단히 내 계정에 등록된 블로그 목록과 기억저장소 글 목록을 가져오는 예제를 간단히 코딩하였다.
import requests
def tistory_api(api_name, **para):
method = 0 # 0:GET, 1:POST
params = {
'access_token': '<Your Access token>',
'output' : 'json'
}
if api_name == 'blog_info':
blog_api = 'https://www.tistory.com/apis/blog/info'
elif api_name == 'post_list':
blog_api = 'https://www.tistory.com/apis/post/list'
if not ('blog_name' in para.keys() and 'page' in para.keys()):
raise KeyError('post_list api must include blog_name and page parameter.')
params['blogName'] = para['blog_name']
params['page'] = para['page']
elif api_name == 'post_read':
blog_api = 'https://www.tistory.com/apis/post/read'
if not ('blog_name' in para.keys() and 'post_id' in para.keys()):
raise KeyError('post_list api must include blog_name and post_id parameter.')
params['blogName'] = para['blog_name']
params['postId'] = para['post_id']
# elif api_name == 'post_write':
# method = 1
# # todo
# elif api_name == 'post_modify':
# method = 1
# # todo
else:
raise ValueError('{} api does not exist'.format(api_name))
if method == 0:
res = requests.get(blog_api, params=params)
else:
res = requests.post()
if res.status_code == 200:
return res.json()
if __name__ == '__main__':
json_data = tistory_api('blog_info')
tistory_info = json_data.get('tistory')
item = tistory_info.get('item')
blog_list = item.get('blogs')
for blog in blog_list:
print('{:<10s} : {}'.format(blog.get('name'), blog.get('url')))
위 코드를 실행하면 아래 이미지와 같이 내 계정에 등록된 블로그 목록이 출력될 것이다.
글 목록을 가져오는 것도 블로그에 정리 하려고 하였으나, 졸려서 이만 줄여야겠다. 여기에 정리된 것을 바탕으로 티스토리 블로그를 백업할 수 있는 PC 앱을 토이프로젝트로 틈틈이 진행할 예정이다.