예전에 아주 잠깐 Windows Live Writer 라는 것을 사용했던 적이 있다. 편리해서 사용했다기 보다는 티스토리 웹에서 글을 작성하는 것이 너무 힘들어서였다. 다른 블로그를 보면 글 내용 뿐만 아니라 편집(구성?? 이라고 해야하나.. 디자인??은 좀 좁은 의미 같고..)이 잘되어 있어 읽기도 편한데.. 웹에서 글을 작성해서 어려운건가.... 하는 생각으로 사용해 보았었다. 도구의 문제는 아니었던것 같다. 웹으로 하나 WLW 로 하나 마찬가지였다. 어쨌든 그 때 WLW 를 사용하기 위해서는 티스토리 블로그 관리자 페이지에서 뭔가 설정을 해 주어야 했었는데, 지금은 뭔가 바뀐 것 같다. 더욱이 공식 가이드(https://www.tistory.com/guide/api/index) 를 보니 access_token 이라는 것을 먼저 얻어온 후에야 뭔가 할 수 있는 것 같다.
아래 제시된 코드는 공식적으로 지원되는 방법을 이용한 것이 아니다. 하지만 access_token 을 얻기 위한 꽤나 불편한 점이 있는것 같은데, 이를 회피하기 위한 것이다.
아이디(tistory_id), 비밀번호(tistory_pw), 클라이언트아이디(client_id), 콜백경로(redirect_uri) 등 4가지 정보가 필요하다. 아이디와 비밀번호는 기존 알고 있는 것을 사용하면 되고 클라이언트아이디와 콜백경로는 이곳(https://www.tistory.com/guide/api/manage/register) 에서 '클라이언트 등록' 이라는 것을 하면 얻을 수 있다.
'클라이언트 등록' 페이지에서 입력되어야 하는 항목 중 'CallBack 경로' 는 여기서 제시하는 방법을 사용한다면 중요하지 않는 항목이므로 적당히 입력하면 된다. (예를들어 http://localhost 와 같이 입력)
import re
import requests
class Tistory:
base_url = 'https://www.tistory.com'
def __init__(self, tistory_id, tistory_pw, client_id, redirect_uri):
self.access_token = None
login_url = '{}/auth/login'.format(self.base_url)
login_data = {
'loginId': tistory_id,
'password': tistory_pw,
'redirectUrl': '{}/oauth/authorize?client_id={}&redirect_uri={}&response_type=token'.format(
self.base_url,
client_id,
redirect_uri
),
}
try:
requests.post(login_url, login_data)
except Exception as e:
match = re.match('(.*?)access_token=(?P<access_token>.*?)&state=', e.request.url)
gd = match.groupdict()
self.access_token = gd['access_token']
ts = Tistory(
tistory_id='????',
tistory_pw='????',
client_id='????',
redirect_uri='????',
)
print(ts.access_token)
4 가지의 정보 적절히 입력되면 access_token을 출력한다. 공식적인 방법이 아니므로 언제 막힐지 알 수 없다. 안정성이 필요한 곳에는 사용하면 안되겠다.