본문 바로가기
Python

Python&티스토리 api로 kbo 경기 기록 자동 포스팅하기(5)

by _sweep 2021. 6. 17.

글 작성하기

티스토리 api의 gitbook을 살펴보면 글 작성하는 api는 다음과 같다.

 

POST 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}
  &published={published}
  &slogan={slogan}
  &tag={tag}
  &acceptComment={acceptComment}
  &password={password}
  • blogName: 블로그명(필수)
  • title: 글 제목 (필수)
  • content: 글 내용
  • visibility: 발행상태 (0: 비공개 - 기본값, 1: 보호, 3: 발행)
  • category: 카테고리 아이디 (기본값: 0)
  • published: 발행시간 (TIMESTAMP 이며 미래의 시간을 넣을 경우 예약. 기본값: 현재시간)
  • slogan: 문자 주소
  • tag: 태그 (',' 로 구분)
  • acceptComment: 댓글 허용 (0, 1 - 기본값)
  • password: 보호글 비밀번호

 

즉, 'https://www.tistory.com/apis/post/write?'라는 주소에 각 파라미터들을 넣어 post 요청을 보내는 것이다.

 

1. 카테고리명 확인하기

 

나는 '야구 기록'이라는 카테고리 안에 글을 자동으로 작성할 것이기 때문에 이 카테고리의 아이디가 필요하다.

카테고리 목록 api를 이용해서 카테고리의 아이디를 알아낼 수 있다.

 

https://www.tistory.com/apis/category/list?
  access_token={access-token}
  &output={output-type}
  &blogName={blog-name}
  • access-token : 발급받은 access-token
  • output : output type (ex. json)
  • blogName : 블로그명

 

각 파라미터를 넣은 후 주소창에 해당 주소를 입력하면 다음과 같은 결과물을 얻을 수 있다.

 

여기서 id 값이 해당 카테고리의 id값이 된다.

 

2. content 작성

 

이제는 각 파라미터들을 채워가는 일만 남았다.

 

def autoPosting():
    url = 'https://www.tistory.com/apis/post/write?'
    global keyEnter 
    keyEnter = '<h3 data-ke-size="size23">&nbsp;</h3>'
    
    title = '{}의 야구 기록'.format(date)

    content = '<p style="text-align: right;" data-ke-size="size16">이 글은 python 프로그램에 의해 자동으로 업로드된 글입니다.</p>'
    content += keyEnter + keyEnter

    content += postingResult()
    content += postingGraph()
    content += postingPlayerRecord()
    

 

content를 작성하는 방법은 html 태그를 이용해 작성하고 싶은 내용을 붙여나가면 된다.

 

어떻게 작성해야 할지 감이 잡히지 않을 때는 직접 티스토리 글쓰기에서 원하는 내용을 써본 후 html 모드로 바꿔 태그들을 확인하면 된다.

 

01
글쓰기 상단의 html 모드를 누르면 다음 사진처럼 바뀐다

 

3. POST 요청 보내기

content를 모두 작성했다면 각 파라미터들을 넣고 requests 모듈을 이용해 post 요청을 보내면 된다.

 

import requests
import json

def autoPosting():
    url = 'https://www.tistory.com/apis/post/write?'
    global keyEnter 
    keyEnter = '<h3 data-ke-size="size23">&nbsp;</h3>'
    
    title = '{}의 야구 기록'.format(date)

    content = '<p style="text-align: right;" data-ke-size="size16">이 글은 python 프로그램에 의해 자동으로 업로드된 글입니다.</p>'
    content += keyEnter + keyEnter

    content += postingResult()
    content += postingGraph()
    content += postingPlayerRecord()
    
    parameters = {
        'access_token': access_token,
        'output': 'json',
        'blogName': blogName,
        'title': title,
        'content': content,
        'visibility': '3',
        'category': categoryId,
        'tag': '한화이글스',
    }

    rq = requests.post(url, params=parameters)
    posting = json.loads(rq.text)["tistory"]

    if(posting['status'] == '200'):
        # 정상 작동 확인
        print("Posting... status", posting["status"])
    else:
        print("Posting Error : ", posting["error_message"])

 

나는 사진 업로드와 사진과 관련된 글을 입력하는 것은 따로 함수를 두었다.

 

그리고 파라미터를 줄 때 output을 json 형식으로 받아 이 내용을 posting이라는 변수에 저장했다.

즉, posting 안에 응답 내용이 들어있는 것이다.

status가 200이라면 정상적으로 글이 업로드되었다는 문구를 출력하도록 했고 status가 200이 아니라면(오류가 있다면) 에러메세지를 출력하도록 했다.

 

+) 나는 깃헙에 커밋할 예정이었기 때문에 다른 파이썬 파일을 하나 만들어 그 안에 access token, blogName, categoryID 등을 저장한 후 .gitignore에 적어두었다.

따로 어디 올리지 않을 예정이라면 파라미터에 바로 적어도 문제는 없지만 개인정보이니 다른 파일에 적고 import 하는 것을 추천한다.

 

자세한 내용은 다음 페이지에서 확인할 수 있다.

https://tistory.github.io/document-tistory-apis/apis/v1/post/write.html

 

글 작성 · GitBook

No results matching ""

tistory.github.io

 

댓글