[서비스] AI 요리 블로거 챗종원 개발기 -6

2023. 10. 27. 18:40WEB

지난 포스팅에서 이미지를 GCS에서 공개 호스팅하는 것을 마지막으로 블로그 포스팅에 필요한 모든 데이터를 완성했습니다.

이번 시간에는 티스토리 API를 이용해 글을 작성하고, 이러한 작업을 Google Scheduler를 통해 자동화할 수 있도록 설정해 보겠습니다.

 

티스토리 API

앞부분에서 다루었던 티스토리의 Access Token이 필요합니다.

앞에서 인증하고 저장해 두었던 토큰이 여기서 활용되는데, 이로써 수미상관의 구조가 완성되었습니다.

 

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

 

글 작성 · GitBook

No results matching ""

tistory.github.io

글 작성을 위한 티스토리 공식 문서입니다.

 

읽다가 어? 싶은 부분이 하나 있었습니다.

요청의 메소드가 POST로 되어있는데 글 작성을 위한 컨텐츠가 body가 아닌 Query 파라미터로 입력됩니다.

body가 아닌 쿼리 파라미터로 글 내용을 받습니다.

심지어 content에 들어갈 내용은 HTML이라 원문보다 내용이 훨씬 길어질 수가 있습니다.

웹 서버의 설정에 따라 얼마든지 문제가 생길 수 있는 부분이기 때문에, 제가 해당 기능 구현 전에 가장 우려했던 부분이고 여러 번의 길이 테스트와 저장된 이미지의 공개 URL을 url 단축기로 줄이는 과정을 거치게 했습니다만, 아직 컨텐츠의 길이 때문에 문제가 생긴 적은 없습니다.

혹시나 414 Status Code와 관련해 문제가 생긴다면 해당 부분을 확인해 보시기 바랍니다.

 

https://developer.mozilla.org/ko/docs/Web/HTTP/Status/414

 

414 URI Too Long - HTTP | MDN

HTTP 414 URI Too Long 응답 코드는 클라이언트가 요청한 URI가 서버가 해석가능한 URI보다 더 길다는 것을 나타냅니다.

developer.mozilla.org


다시 본론으로 넘어와 포스팅을 위한 Content를 생성해야 합니다.

우선적으로 \n으로 나누어진 원문을 <p> 태그를 이용해 치환해 줍니다.

안녕하세요\n반갑습니다\n행복하세요

이 텍스트를

<p>안녕하세요</p>
<p>반갑습니다</p>
<p>행복하세요</p>

만들어둔 이미지 링크도 html 태그로 만들어줍니다.

html_content +=  "<img src='{}' style='width: 100%;' />".format(image_url)

이제 포스팅에 필요한 정보를 채울 차례입니다.

공통
공통적인 값으로 초기화

BLOG_NAME에 들어갈 값은 포스팅될 블로그의 도메인에 적힌 블로그명이 됩니다.

category를 확인하기 위해 작성하려 하는 카테고리, 주제로 설정한 테스트 글을 작성하고

카테고리 API

해당 API를 통해 확인했습니다.

 

전송 데이터 완성

이제 요청을 보내고 200 OK를 받으면 포스팅 완료!


지금까지 각 서비스에서 데이터가 흘러가는 모습을 시각화해 보면 다음과 같습니다.

메소드 체이닝
파이프-필터 패턴

 

트리거 요청을 기점으로 데이터가 파이프를 거치며, 각각의 필터 컴포넌트에서 처리되고 다음 컴포넌트로 넘어가게 됩니다.

이러한 설계를 통해 재사용성을 높여서, 추후 요리 블로거가 아닌 다양한 주제로도 이용할 수 있는데요.

 

이 부분에 대해서는 다음 완결 포스팅에서 더욱 심도 있게 다루어 보도록 하고, 이제 그림의 Trigger Request를 일정 시간마다 실행시켜 주는 기능을 만들어보도록 하겠습니다.


Cloud Scheduler

주기적으로 특정 작업을 반복할 때 Cron이라는 기능을 사용합니다.

Google Cloud에서 제공하는 Cron이 바로 Cloud Scheduler입니다.

주기적으로 특정 이벤트를 발생시키는 역할을 하는데, 바로 적용해 보도록 하겠습니다.

 

cloud scheduler 탭
cloud Scheduler 탭

스케쥴을 만들기를 눌러 스케쥴을 생성해 줍니다.

Unix Cron 문법 사용

빈도에 해당하는 입력 값은 UNIX Cron 문법과 일치합니다.

다른 방식으로 주기를 설정하고 싶으신 분들은 아래 문서를 참고하시기 바랍니다.

https://www.ibm.com/docs/en/db2/11.5?topic=task-unix-cron-format

 

UNIX cron format

The UNIX cron format is used to specify time in the schedule parameter of the ADMIN_TASK_ADD and ADMIN_TASK_UPDATE procedures. The cron format has five time and date fields separated by at least one blank. There can be no blank within a field value. Schedu

www.ibm.com

 

빈도를 설정했다면, 실행할 작업을 설정합니다.

트리거 요청을 수행할 함수의 endpoint를 입력합니다.

이제 스케쥴러가 등록되었다면 잘 동작하는지 실행을 해봅시다.

강제 실행
실행될 동작을 미리 실행해봅시다.

성공적으로 실행된 모습입니다.

성공


여기까지 주기적으로 주제를 정하고,

컨텐츠를 제작해,

외부에 포스팅하는 AI 요리 블로거 챗종원의 개발기였습니다.

 

쉽쥬?
어렵지 않쥬?

다음 포스팅에서는 현재 동작의 문제점이나, 개선점 등에 대해 복기해 보는 포스팅으로 돌아오겠습니다.

혹시 궁금한 게 있다면 댓글로 남겨주세요.

무물보

반응형