티스토리 API를 이용 해 파이썬(python)으로 글을 작성해보겠습니다!
급하신 분은 맨 아래 코드만 참고 하시면 됩니다~
1. 아래 링크에서 앱 등록을 해주세요
2. 발급 받은 앱 아이디/키/CallBack URL 확인
3. 아래 링크에서 티스토리 오픈 API doc 확인
OAuth 2.0방식으로 인증하는데... 그냥 간단하게 등록 된 callback url로 인증하는 방식입니다
우리는 글 작성에 필요한 부분만 아래서 다루고 자세한 내용은 링크로 이동해서 둘러보세요
4. 글 작성에 필요한 인증하기(Access Token 발급)
순서는 Code받기 -> 리디렉션 처리 -> Access Token 받기 로 진행됩니다
아래 코드들은 전부 복사해서 한글로 된 부분만 따로 입력 후 실행만 해주시면 됩니다
# post.py
import requests
def getAuthorizationCode():
url = 'https://www.tistory.com/oauth/authorize?client_id={app_id}&redirect_uri={redirect_uri}&response_type=code'.format(
app_id="앱아이디",
redirect_uri="콜백주소",
response_type="json")
res = requests.get(url)
print(res.url)
if __name__ == "__main__":
getAuthorizationCode()
출력 된 res.url 의 주소로 이동해서 로그인이 되어있지 않다면 로그인 후 허가하기를 눌러주세요
이 후 입력했던 callback(콜백주소)로 이동하며 URL화면에 code값이 발급됩니다.
발급받은 code값은 1시간 동안 이용이 가능합니다. 여러 글을 쓸 수 있도록 변수에 넣어줍시다
# post.py
import reqeusts
def getAccessToken():
url = 'https://www.tistory.com/oauth/access_token?client_id={app_id}&client_secret={secret_key}&redirect_uri={redirect_uri}&code={code}&grant_type=authorization_code'.format(
app_id="앱아이디",
secret_key="앱시크릿키",
redirect_uri="콜백주소",
code=code
)
res = requests.get(url)
print(res.url)
code = "발급받은 코드"
def getAccessToken():
url = 'https://www.tistory.com/oauth/access_token?client_id={app_id}&client_secret={secret_key}&redirect_uri={redirect_uri}&code={code}&grant_type=authorization_code'.format(
app_id="앱아이디"
secret_key="앱시크릿키",
redirect_uri="콜백주소",
code=code
)
res = requests.get(url)
token = res.text.replace('access_token=', '')
print(token)
if __name__ == "__main__":
getAccessToken()
access token이 출력 됐습니다! 이제 글을 작성해볼까요?
5. 카테고리에 글작성 하기
순서는 카테고리 ID 가져오기 -> 글 작성하기 입니다
# post.py
import reqeusts
import json
def getAccessToken():
url = 'https://www.tistory.com/oauth/access_token?client_id={app_id}&client_secret={secret_key}&redirect_uri={redirect_uri}&code={code}&grant_type=authorization_code'.format(
app_id="앱아이디",
secret_key="앱시크릿키",
redirect_uri="콜백주소",
code=code
)
res = requests.get(url)
print(res.url)
code = "발급받은 코드"
def getAccessToken():
url = 'https://www.tistory.com/oauth/access_token?client_id={app_id}&client_secret={secret_key}&redirect_uri={redirect_uri}&code={code}&grant_type=authorization_code'.format(
app_id="앱아이디"
secret_key="앱시크릿키",
redirect_uri="콜백주소",
code=code
)
res = requests.get(url)
token = res.text.replace('access_token=', '')
print(token)
access_token = "엑세스토큰"
def getBlogCategoryInfo():
url = 'https://www.tistory.com/apis/category/list?access_token={access_token}&output={output_type}&blogName={blog_name}'.format(
access_token=access_token,
output_type="json",
blog_name="블로그이름"
)
res = requests.get(url)
print(res)
categories = res.json()['tistory']['item']['categories']
print(categories)
if __name__ == "__main__":
getBlogCategoryInfo()
블로그 이름은 보통 xxxxx.tistory.com의 xxxxx에 해당됩니다
예) 본인블로그 이름 "freeedom"
실행을 하시면 출력된 categories 리스트가 출력됩니다
(카테고리는 삭제되지 않는 한 계속해서 같은 ID를 가지니 리스트를 따로 보관해둬도 되겠죠?)
# post.py
import reqeusts
import json
code = "발급받은 코드"
access_token = "엑세스토큰"
def getAccessToken():
url = 'https://www.tistory.com/oauth/access_token?client_id={app_id}&client_secret={secret_key}&redirect_uri={redirect_uri}&code={code}&grant_type=authorization_code'.format(
app_id="앱아이디",
secret_key="앱시크릿키",
redirect_uri="콜백주소",
code=code
)
res = requests.get(url)
print(res.url)
def getAccessToken():
url = 'https://www.tistory.com/oauth/access_token?client_id={app_id}&client_secret={secret_key}&redirect_uri={redirect_uri}&code={code}&grant_type=authorization_code'.format(
app_id="앱아이디"
secret_key="앱시크릿키",
redirect_uri="콜백주소",
code=code
)
res = requests.get(url)
token = res.text.replace('access_token=', '')
print(token)
def getBlogCategoryInfo():
url = 'https://www.tistory.com/apis/category/list?access_token={access_token}&output={output_type}&blogName={blog_name}'.format(
access_token=access_token,
output_type="json",
blog_name="블로그이름"
)
res = requests.get(url)
print(res)
categories = res.json()['tistory']['item']['categories']
print(categories)
def postBlogContent():
url = 'https://www.tistory.com/apis/post/write'
params = {'access_token': access_token,
'output': "json",
'blogName': "블로그이름",
'title': "글제목",
'content': "글내용",
'visibility': 3,
'category': "카테고리id",
'slogan': '',
'tag': "글태그",
}
res = requests.post(url, data=params)
print(res.json())
if __name__ == "__main__":
postBlogContent()
- blogName: Blog Name (필수)
- title: 글 제목 (필수)
- content: 글 내용
- visibility: 발행상태 (0: 비공개 - 기본값, 1: 보호, 3: 발행)
- category: 카테고리 아이디 (기본값: 0)
- published: 발행시간 (TIMESTAMP 이며 미래의 시간을 넣을 경우 예약. 기본값: 현재시간)
- slogan: 문자 주소
- tag: 태그 (',' 로 구분)
- acceptComment: 댓글 허용 (0, 1 - 기본값)
- password: 보호글 비밀번호
코드아래 작성해 둔 매개변수 정보를 참고하여 값 입력 후 코드를 실행 해 주세요!
출력한 res.josn() 이 아래와 같나요?
# 응답 예
{
"tistory":{
"status":"200",
"postId":"74",
"url":"http://sampleUrl.tistory.com/74"
}
}
status 값이 200이라면 정상적으로 포스팅 되었습니다 확인해보세요!
이해를 돕기위해 파이썬 파일 하나에 위에서 아래로, 실행코드를 변경하며 작성했습니다
추가 기능이나 서비스 로직에 맞게 모듈화 하시면 됩니다ㅎㅎ
저는 티스토리 API 이용하여 글을 다량/자동화 작성하다 API 이용제한을 먹는 바람에ㅠㅠ 그에 대한 내용은 하지 않았습니다 하....
'괴발개발 > API' 카테고리의 다른 글
API를 사용해서 서비스는 어떤 걸 만들 수 있을까? (0) | 2023.03.10 |
---|---|
쿠팡 파트너스 API 인증 시 Specified signature is expired 문제 해결방법 (4) | 2021.01.30 |