조회 수 1056 추천 수 0 댓글 7
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 게시글 수정 내역 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 게시글 수정 내역 댓글로 가기 인쇄 첨부



티스토리에 자동으로 글을 쓰고 싶어서 예제를 찾아봤는데, 제대로된 예제를 찾아보기 힘들었습니다.

티스토리 자체의 api 설명도 부족하구요.

 

일단 access token을 발급 받는 것 부터가 생소했는데, 1차로 인증 코드를 발급 받고, 2차로 access token 을 발급 받는 형식으로 전개 됩니다.

 

또 api 필드의 이름이 변경되었는데, 설명서와 api 등록 사이트의 필드 네임이 다른 경우가 있었습니다.

client id = app id 는 같은 의미이고, client secret = secret key와 같은 의미입니다.

저처럼 헷갈리는 분들은 참고하세요.

 

 

모든 조건이 맞았는데 오류가 날 때는 콜백 주소에서 마지막에 /를 빼고 시도해보길 바랍니다.

일반적으로 그냥 티스토리 주소를 넣으면 됩니다.

 

screenshot-www.tistory.com-2019.12.png

 

 

# coding=utf-8
import requests
import webbrowser

#client_id  == app_id
client_id = ""
#client_secret = Secret_Key
Secret_Key = ""
#code는 access_token을 받기 위한 중간 인증코드, 나중에 사용하지 않음.
code = ""
#access_token는 이후에 모든 인증에서 사용하는 최종 키임.
access_token = ""

#티스토리 주소의 아이디나 전체주소
blog_name = ""

#콜백주소는 자신의 티스토리 주소를 사용해도 되고, 끝에 /는 넣지 않는다.
redirect_uri = ""
state_param = ""
output_type = "json"

requests_headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
}

# 먼저 코드를 생성하고,
if not code:
auth_url = f'https://www.tistory.com/oauth/authorize?client_id={client_id}&redirect_uri={redirect_uri}&response_type=code&state={state_param}'
webbrowser.open(auth_url)
print('주소창에서 코드 값을 복사하세요. ?code= 이하')

# 이후에 액세스 토큰을 받아야 한다. 이게 좀 귀찮고 낮설다.
if not access_token:
token_url = f'https://www.tistory.com/oauth/access_token?client_id={client_id}&client_secret={Secret_Key}&redirect_uri={redirect_uri}&code={code}&grant_type=authorization_code'
webbrowser.open(token_url)
r = requests.get(token_url)
print(r.text)


# 이제 실제 사용할 액세스 코드를 가지고 호출을 할 수 있다.

def get_info():
info_url = f'https://www.tistory.com/apis/blog/info?access_token={access_token}&output={output_type}'
r =requests.get(info_url, headers=requests_headers)
return r.text

def get_list(page_number):
url = f'https://www.tistory.com/apis/post/list?access_token={access_token}&output={output_type}&blogName={blog_name}&page={page_number}'
r = requests.get(url, headers=requests_headers)
return r.text


def get_category():
url = f'https://www.tistory.com/apis/category/list?access_token={access_token}&output={output_type}&blogName={blog_name}'
r = requests.get(url, headers=requests_headers)
r = r.json()['tistory']['item']['categories']
for i in r:
print(f'{i["name"]} ({i["id"]})')
return r


def get_write():
title = "테스트" #제목 (필수)
content = "글 내용" #글내용(필수)
visibility = "3" #발행상태 0비공개-기본, 1보고,3발행
category_id = "0" #카테고리 아이디 기본값 0
slogan = "" #문자주소
tag = "" #태그 ,로 구분
acceptComment = "" #댓글 허용 (0, 1 - 기본값)
password = "" #보호글 비밀번호
url = f'https://www.tistory.com/apis/post/write?access_token={access_token}&output={output_type}&blogName={blog_name}&title={title}&content={content}&visibility={visibility}&category={category_id}&slogan={slogan}&tag={tag}&acceptComment={acceptComment}&password={password}'
r = requests.post(url)
print(r, r.text)

# https://iamaman.tistory.com/2084
def file_upload():
files = {'uploadedfile': open(filepath, 'rb')}
params = {'access_token': token, 'blogName': blogName, 'targetUrl': blogName, 'output': 'json'}
rd = requests.post('https://www.tistory.com/apis/post/attach', params=params, files=files)

try:
item = json.loads(rd.text)
print(json.dumps(item, indent=4))
print("----------------------------------------------")
print(item["tistory"]["replacer"])
print(item["tistory"]["url"])
print(item["tistory"]["status"])
except:
print("Failed")


get_category()

 

2020.6.15일 변경사항

 

400에러가 발생하면서 "access_token 이 유효하지 않습니다."라는 에러가 발생하는 경우에 대한 패치

 

원인, request로 처리하는 과정에서 해더 정보를 새롭게 체크하는 것 같습니다.

해당 해더 정보를 추가하면 됩니다.

 

requests_headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
}

 

requests.get(url, headers=requests_headers)

 



  • ?
    주사랑 2019.12.23 12:49 SECRET

    "비밀글입니다."

  • profile
    운영자 2019.12.31 17:25 SECRET

    "비밀글입니다."

  • ?
    주사랑 2020.01.15 00:49 SECRET

    "비밀글입니다."

  • ?
    주사랑 2020.06.15 01:05
    안녕하세요, 여기 있던 예제로 티스토리를 잘 사용하고 있었습니다. 그런데 12일부턴가 파이썬에서 이 코드가 실행이 안되더군요. 계속 400 에러가 뜨던데... 엑세스 토큰이 맞음에도 불구하고 계속 오류가 납니다.
    포스트맨이나 자바로 테스트 할 때는 문제가 없었는데 혹시 최근에 테스트해본적 있으신지요? 12일 이후로... 테스트 가능하실지 ㅠㅠ
  • profile
    운영자 2020.06.15 09:22
    안녕하세요.

    requests.get() 함수 사용시 headers=requests_headers 옵션을 추가하시면 됩니다.
    소스에 반영하였습니다.
  • ?
    주사랑 2020.06.15 11:24
    아... 운영자님 정말 감사합니다. 여기서 도움 정말 많이 받습니다... ㅠㅠ
    한가지 더 말씀드릴건, post 로 보낼 때도 헤더가 필요하더군요. 파일업로드 소스도 헤더 없이는 동작을 안합니다. 이 부분도 수정이 필요할듯합니다.

    그런데, 이 헤더의 역할이 어떤건지 알 수 있을까요? 기존에 안되던 것이 저걸 추가해서 되는게 이해가 잘 안가네요. 그리고 다른 API 의 경우에도 헤더가 필요하다면 똑같이 저 헤더를 넣으면 될까요? 아직 파이썬에 대해 모르는 부분이 너무 많습니다. ㅠ
  • profile
    운영자 2020.06.15 14:49
    안녕하세요.
    도움이 되셨다니 저도 기쁘네요.

    헤더는 서버에서 신호를 확인하는 이름표같은 건데, 그동안 토큰만 확인하고 헤더값을 확인하지 않다가 최근에 확인하도록 수정된 거 같습니다.
    모든 통신에 헤더값이 들어가야 정상이고, 말씀하신 파일처리 부분도 적용시키시는게 맞습니다.
    파이썬으로 requests를 사용하시다가 보면 헤더 처리하는 부분이 자연스럽게 익혀지실거에요.

List of Articles
번호 분류 제목 날짜 조회 수 글쓴이
14483 정보&강의 삼성 RF410 윈도우10 설치 불가 현상 해결방법 1 2020.01.15 374 운영자
14482 질문글 문자메시지 자동 발송 파이선 소스 요청 2020.01.13 159 늘처음처럼
14481 정보&강의 윈도우10 사용자 휴대폰, 컴퓨터에서 문자 확인하고 보내기 2018년 10월 윈도우10 업데이트로 사용자 휴대폰 기능이 새롭게 추가됐다. 이제 윈도우10이 설치된 컴퓨터가 있으면 문자 메시지를 보내거나 휴대폰에 저장된 사... file 2020.01.11 2378 운영자
14480 정보&강의 그리스 헬라어 동사의 모든 것 그리스 헬라어에는 다른 언어와 똑같이 동사에 시상(tense)과 태(voice)와 법(mood)이 있다. 시상에는 기본시상(또는 제 1시상)과 제 2시상이 있으며, 기본시상에... file 2020.01.08 444 운영자
14479 정보&강의 그리스 헬라어 동사의 형태 (수동태, 능동태, 중간태) 2020.01.08 408 운영자
14478 정보&강의 히브리어 동사 7어간 형태 (칼형, 니팔형, 피엘형, 푸알형, 히필형, 호팔형, 히트파엘형) 히브리어 동사는 7개의 어간 형태(칼형, 니팔형, 피엘형, 푸알형, 히필형, 호팔형, 히트파엘형)가 있습니다. 칼 : 단순 능동, 능동태 ( 그가 다스렸다. ) 니팔 : ... 1 file 2020.01.08 2023 운영자
14477 정보&강의 Google OTP 인증번호를 구하는 파이썬 소스 2020.01.04 398 운영자
14476 자유글 요즘 가끔 보는 뉴스기사인데 슬프네요 정치에 관심이 있는건 아니지만 이런 기사가 올라오다니.. 2 file 2019.12.30 468 so
14475 정보&강의 캠코더에서 녹화된 여러개의 MTS 파일을 CMD 명령어 하나로, 단일 파일로 병합하는 방법 소니 캠코더로 영상을 찍으면 위와같이 MTS로 파일로 영상이 분할 저장되어 있습니다. 이때 이걸 손쉽게 하나의 파일로 만들어야할 필요가 있습니다. 별도의 인코... 1 file 2019.12.24 458 운영자
14474 가입인사 가입인사 드립니다. 2019.12.21 152 숲길
14473 자유글 외국 IT 사이트를 번역하여 포스팅 계획에 관해.. 2019.12.12 208 운영자
14472 UCC/영상 목회자가 반드시 알아야 할 민식이법 이해 2019.12.10 267 운영자
14471 UCC/영상 베트남 대 인도네시아 U22 남자축구 결승 생방송 영상 2019.12.10 162 운영자
14470 정보&강의 네이버 카페 오픈 API 토큰 발급 파이썬 소스 예제 네이버 개발자 카페 https://developers.naver.com/products/cafe/ 네이버 카페 오픈 API 이용신청 https://developers.naver.com/apps/#/register?api=cafe acce... file 2019.12.09 716 운영자
14469 정보&강의 네이버 밴드 오픈 API 토큰 발급 소스 2019.12.08 418 운영자
14468 정보&강의 32기가 램을 부착한 서버 mariadb, nginx, php-fpm 설정하기 Nignx, MariaDB, PHP-FPM, PHP 를 이용한 서버 운영시, PHP-FPM에서 child process가 부족하여 lock이 걸리는다는 에러가 발생하였고, 이를 해결하기 위해 일단 ... file 2019.12.08 278 운영자
14467 질문글 호크마.cdb 파일을 구하고 싶습니다 2019.12.07 301 하샨떠
» 정보&강의 파이썬 티스토리 API를 이용하기 위한 access_token 발급과 사용 예제 소스 티스토리에 자동으로 글을 쓰고 싶어서 예제를 찾아봤는데, 제대로된 예제를 찾아보기 힘들었습니다. 티스토리 자체의 api 설명도 부족하구요. 일단 access token... 7 file 2019.12.05 1056 운영자
14465 정보&강의 엑셀 파일로 읍면동 주소를 만드는 파이썬 소스 2019.12.05 193 운영자
14464 정보&강의 전국 읍면동 주소 데이터 만들기 지인의 부탁으로 전국읍면동 주소록 데이터를 찾아봤는데, 쓸만한게 없어서 새로 엑셀 파일로 만들었습니다. 주소지는 매달 바뀌기 때문에 만드는 과정을 기록에 ... file 2019.12.05 242 운영자
Board Pagination Prev 1 ... 5 6 7 8 9 10 11 12 13 14 ... 734 Next
/ 734