«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

기술은 감각이다, 밀론 블로그

n8n, Ai를 이용한 블로그 자동화 프로그램 만들기 .with python 본문

프로그래밍

n8n, Ai를 이용한 블로그 자동화 프로그램 만들기 .with python

milron 2025. 1. 7. 08:50
반응형

포스팅 안 한지 엄청 오래됐습니다.

거의 2달 만이네요.

 

블로그 운영을 잠시 멈춘 이유가 있습니다!

 

다양한 일을 하고 있었죠.

취준, 영어공부, 코딩, 취미 등등...

 

그. 러. 나! 오늘 돌아왔습니다.

 

블로그 자동화하는 프로그램 제작이라는 개인적인 프로젝트를 진행해보고자 했습니다.

 

사실 이미 몇 주전부터 이 프로젝트를 진행하고 있었습니다.

 

이제 그 리뷰를 포스팅하려고 합니다!

 

앞으로 영어 공부에 대한 글도 쓸 겁니다. 사실 이게 제일 힘들었습니다...

블로그 자동화시키기라는 프로젝트는 재밌었는데 말이죠...


아래는 최근에 작성하기 시작한 위 프로젝트의 개발일지입니다.

 

프로젝트를 진행하면서 거의 모든 과정을 gpt chat과 함께했습니다.

 

# 개발일지

### 날짜: 2024-12-31

### 오늘의 목표
- [O] openAi API env 문서화
- [X] openAi API env 문서화 후 연동
- [X] openAi API env 연동 후 글쓰기 제목, 본문 ai 이용하여 삽입

### 진행한 작업
- api key를 발급받고 프로젝트 파일에 넣어 문서화 성공.
- 12월 10일? 에서부터 python을 이용한 블로그 포스팅 자동화 프로젝트 진행 중...

### 이슈 및 해결 방법
- 이슈 1: 원래는 n8n을 토대로 각 블로그 api를 이용한 자동화 포스팅 프로젝트를 기획.
그러나 ai 자동화에 대한 우려로 인한 블로그들의 방어적 태도 때문인지 블로그 api 서비스가 줄줄히 종료되기 시작했음. 워드프레스는 api를 유지중이기는 하지만 유료.
투자비용이 너무 큼에 따라 워드프레스 api 이용 계획은 폐기. 따라서 api를 이용한 자동화 프로젝트는 폐기.
  - 해결 방법: openAi api 이용이 불가능하여 selenium 프레임워크 이용하여 웹 자동화 진행.
- 이슈 2: 그러나 api 연동 실패. 이유 : api key를 잘 뽑아놨음에도 불구하고 사용 권한, 존재 하지않는 모델 등의 오류가 계속해서 발생.
  - 해결 방법: n8n에서 open ai를 이용해 다시 python으로 연동시키는 방법을 이용가능할 것으로 보임.
  - 해결 방법: 다시 key를 발급받고 시도.


### 배운 것 혹은 오늘 개발한 내용
- api 사용 지식 증가.
- python 이해도 점진적 증가.(class, def 구문 등등의 이해도 증가.)
- 현재까지는 티스토리 로그인 후 글쓰기 버튼을 클락하고 제목과 본문에 글을 삽입할 수 있는 정도까지 가능.

### 내일의 목표
- [ ] openAi api를 n8n에 연동한 후 파이썬 프로젝트 파일과 연동
- [ ] 웹 포스팅 글쓰기 완료 자동화
- [ ] 티스토리 양식 테스트

### 회고
- 잘한 점: 제목과 본문까지 삽입하기까지 프로그래밍 성공한 점.
- 개선할 점: 코딩에 대한 지식이 부족하였기에 gpt와 오래 대화하여 시간 낭비가 있었던 점과 파일도 가시성 좋게 정리할 필요성 느낀 점.

###새로 배운 내용 정리
-class 구문, 패키지 모듈화, n8n 및 파이썬 등을 비롯한 ai 관련 지식 습득.
-Ai를 이용하면 자동화 개발을 그리 어렵지 않게 할 수 있을 듯 하다.

###참고할만한 래퍼런스들
-

###아이디어
-금융 리포트 수집하여 요약하는 자동화.
-비트코인 투자 자동화.

 


n8n :  AI 기반의 워크플로 자동화 도구 (이미지 클릭시 사이트 방문)

 

 

n8n은 아주 다양한 노드(node)를 통해 반복적인 업무의 자동화가 가능하게 해주는 플랫폼입니다.

 

코드를 작성 과정은 거의 전무하고 쉽습니다.

 

 


처음 계획은 아래와 같았습니다.

plan.1 순수 100%로만 n8n을 이용하여 블로그 자동화하기.

 

이 계획은 매우 심플하고도 명료합니다.

 

그러나 plan.1 은 사실상 불가능했습니다.

 

왜냐하면,

 

1. 블로그 API 서비스


필자가 알던 블로그들의 api 제공 서비스는 거의 다 종료되었기 때문입니다.

 

이 찬란한 계획을 실행시키기 위한 정보 수집이라는 이유로 유튜브를 돌려본 결과,

거의 모든 영상들이 블로그 api를 기반으로 만든 자동화 프로젝트였습니다.

 

그래서 거의 하루를 api 사용 가능 여부에 대해서 찾아다녔습니다.

티스토리의 경우 서비스 종료한 지 꽤 최근이었고 네이버 역시 서비스 제공을 중단한 지 오래였습니다.

 

그나마 워드프레스의 경우, api가 존재했으나 유료였기에 투자 비용에 비해 얻을 수 있는 게 없을 것 같아 이 역시 포기했습니다.

 

그래서 다른 방법을 모색하기로 했습니다.

 

2. 파이썬


 

'셀레미늄(selenium)'

이라는 모듈은 웹 자동화를 가능하게 해주는 라이브러리입니다.

 

웹 브라우저를 직접 실행하고 스스로 작동하죠.

 

티스토리 로그인 자동화 코드 예시

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
import time
from config import chrome_driver_path

chrome_options = Options()
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
chrome_options.add_argument("--start-maximized")
service = Service(chrome_driver_path)
driver = webdriver.Chrome(service=service, options=chrome_options)

def login_to_tistory(email, password):

    try:
        print("1.1 티스토리 로그인 페이지 접속")
        driver.get("https://www.tistory.com/auth/login")

        # '카카오 계정으로 로그인' 버튼 클릭
        print("1.2 '카카오 계정으로 로그인' 버튼 클릭 대기")
        wait = WebDriverWait(driver, 20)
        kakao_login_button = wait.until(
            EC.element_to_be_clickable((By.CSS_SELECTOR, "a.btn_login.link_kakao_id"))
        )
        kakao_login_button.click()

        # 이메일 및 비밀번호 입력
        email_input = wait.until(EC.presence_of_element_located((By.ID, "loginId--1")))
        email_input.send_keys(email)
        password_input = wait.until(EC.presence_of_element_located((By.ID, "password--2")))
        password_input.send_keys(password)
        login_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.btn_g.highlight.submit")))
        login_button.click()
        print("1.4 로그인 성공")
    except Exception as e:
        print(f"로그인 실패: {e}")
        driver.quit()
        return None

    return driver

 

거의 코드 읽기만 가능한 수준이었던 저는 Ai가 짜주는 코드 틀을 검토하고 수정만 하는 역할을 맡았습니다. 작업 중에 자연스럽게 코드 사용법과 응용에 대한 개념이 학습이 되어 뇌에 박히기는 했으나 여전히 판단하고 방향만 잡는 느낌이 주가 되었습니다.

 

단계는 이러했습니다.

크롬 브라우저 실행 → 카카오톡 로그인 → 티스토리 글쓰기 버튼 클릭

 

보여드린 위 코드는 빨간 부분까지의 과정만을 담당합니다.

 

이 단계까진 몇 번의 시행착오 만으로도 무난하게 가능합니다.

 

그러나 이제 제목, 본문 텍스트 입력 후 포스팅까지 작업이 남아있었죠.

거기다 콘텐츠를 잘 손보는 Ai 공정작업도 거쳐야 합니다.

이미지도 삽입해야 하며 글 양식도 짜야하죠.

 

특히나 Ai 관련 코드 작성 과정에서 몇 번이나 코드 전체를 갈아엎으면서 짰습니다... 처음부터 다시 시작해야 하는 순간들은 항상 프로젝트를 진행할 의지를 사라질 뻔하게 만들었죠.

현타가 오면서 바로 침대 위로 드러눕거나 롤 만하면서 하루를 그대로 날렸습니다.

 

 

모듈화.

 

제 수많은 실패는 이 망할 파이썬의 모듈화, 패키지를 잘못해서 그랬습니다.

 

왼쪽의 사진을 보시면 꽤나 많은 파일들이 보이실 겁니다.

정리가 개판입니다.

 

이 파일들은 서로 연관되어 있는데 구분이 뚜렷하지가 않습니다.

 

지금은 몇 개의 파일만으로도 충분히 잘 작동하게 만들었습니다.

 

모듈화의 중요성을 뼈저리게 알게 되었던 경험이었습니다.

 

웹 자동으로 들어가기 코드와

ai 관련 코드,

테스트 코드,

메인 파일 등등

 

서로가 섞여있었죠.

 

3. openAi api의 먹통.


거의 작업의 30%를 openAi api를 제 코드와 연동하는 방법에 대한 탐색에 투자했습니다.

 

chat gpt 이놈 골치 아픈 놈이에요.

 

api까지는 쉽게 구했습니다.

그런데 사용이 안 되는 겁니다.

 

open ai api 연동코드

이 코드도 사실상 잘못 짜인 코드이니 예시로만 봐주세요.

 

어쨌든, 보안을 위해. env파일에 api key 정보를 넣어놨고,

 

잘 짜인 코드를 실행해 보면

이런 식으로 오류가 뜹니다.

어쩔 땐 Error Code 429가 떴었죠.

 

가볍게 정보를 찾아본 결과 '자주 요청 혹은 많은 요청 시 제한을 준다'라는 의미의 오류였습니다.

한 번도 요청한 적이 없는데 이게 무슨...?이라 생각했죠.

 

그래서 다른 ai 서비스를 이용했습니다.

 

어쩌면 새 계정을 만들어 api key를 얻었다면 정상 구동되었을지도 몰랐습니다.

하지만, 저는 그런 생각을 못했죠.

 

스트레스가 등잔 밑 그림자를 보지 못하게 했습니다.

 

 

이 정도가 첫 개발일지의 마무리 정리가 되겠네요.


필자의 개발일지의 기록 내용들이 조금 비정확하고 알아듣기 힘들다고 생각합니다.

기록을 거의 대충 하고 기술에 집중했기 때문입니다.

 

새벽까지 시간을 투자했고 자기 직전에 개발일지에 기록을 했었죠.

그래서 더욱 엉망인 겁니다. ㅎㅎㅎ;;;

 

할 일과 내일 할 일을 미리 개발일지에 적어두고 일을 진행했어야 했는데, 그러지 못했습니다.

 

 

긴 글 봐주셔서 감사합니다.

반응형