블로그 자동 포스팅 제작기 (2)

코드를 하나씩 붙여보는 실전 편

by 황디

안녕하세요! 오늘은 지난 편에서 계획했던 내용을 실제로 하나씩 만들어보는 시간을 가져보겠습니다. 이 글은 “나도 해볼까?” 하는 분들이 따라 할 수 있도록 최대한 쉽게, IT 칼럼형으로 풀어쓴 튜토리얼입니다. 어려운 코드는 걱정하지 마세요. 한 줄 한 줄 차근차근 설명해드리겠습니다.




① RSS 피드에서 글 가져오기

먼저 Python에서 RSS 피드를 긁어오기 위해 feedparser라는 라이브러리를 씁니다. 설치는 간단합니다. pip install feedparser로 설치하고 아래 코드를 써보세요.

import feedparser

rss_url = 'https://techcrunch.com/feed/'
feed = feedparser.parse(rss_url)

for entry in feed.entries:
print(entry.title)
print(entry.link)
print(entry.published)

이렇게 하면 최신 글의 제목, 링크, 날짜를 불러올 수 있습니다. 여기까지 실행되면 “아, 됐다!” 하고 기뻐하셔도 됩니다.




② 중복 제거하기

다음 문제는 같은 글이 계속 반복되지 않게 막는 겁니다. 간단히는 글의 link나 guid(고유값)를 파일에 기록하고, 다음 실행에서 이 값이 있으면 건너뛰는 방식으로 해결합니다.

import json

try:
with open('processed.json', 'r') as f:
processed = json.load(f)
except FileNotFoundError:
processed = []

if entry.link not in processed:
# 처리할 코드
processed.append(entry.link)

with open('processed.json', 'w') as f:
json.dump(processed, f)

처음엔 어렵게 생각하지 말고 “그냥 리스트에 기록한다”라고 생각하세요.




③ 키워드로 필터링하기

내가 원하는 주제만 골라보죠. 예를 들어 ‘디자인 시스템’, ‘UX’, ‘AI’ 같은 키워드가 제목에 있으면 통과, 아니면 제외.

include_keywords = ['디자인 시스템', 'UX', 'AI']
exclude_keywords = ['광고', '이벤트']

def match_keywords(text):
if any(word in text for word in exclude_keywords):
return False
return any(word in text for word in include_keywords)

if match_keywords(entry.title):
print('선택된 글:', entry.title)

이제 내가 보고 싶은 글만 남습니다.




④ AI로 요약하기 (OpenAI API)

드디어 하이라이트! 긴 글을 AI로 300자 이내로 요약해봅시다. 우선 pip install openai로 설치하고, OpenAI에서 API 키를 받아주세요.

import openai

openai.api_key = '발급받은_API_키'

def summarize(text):
prompt = f"다음 내용을 한국어로 300자 이내로 요약해줘: {text}"
response = openai.ChatCompletion.create(
model="gpt-4-turbo",
messages=[{'role': 'user', 'content': prompt}]
)
return response['choices'][0]['message']['content']

실행해보면 처음엔 “와… 진짜 AI가 다 해주네” 싶을 거예요. 여기서 중요한 건, prompt(지시문)를 명확히 주는 겁니다. “대충 알아듣겠지”는 AI에겐 통하지 않습니다.




⑤ 워드프레스에 업로드하기

이제 요약된 내용을 블로그에 올려봅시다. 워드프레스는 REST API로 글 등록이 가능합니다. Application Password를 발급받고, requests 라이브러리로 업로드하면 됩니다.

import requests

def post_to_wordpress(title, content, username, app_password, site_url):
url = f"{site_url}/wp-json/wp/v2/posts"
auth = (username, app_password)
data = {'title': title, 'content': content, 'status': 'publish'}
response = requests.post(url, auth=auth, json=data)
print(response.status_code)

이 부분에서 인증이나 SSL 문제로 막히는 경우가 많습니다. 혹시 에러가 뜨면 천천히 원인을 하나씩 찾아보세요. (물론 저도 ChatGPT에게 물어보며 해결했습니다.)




⑥ 트위터에도 올리기 (선택)

짧은 요약이나 링크를 트위터에 올리고 싶다면 tweepy라는 라이브러리를 씁니다.

import tweepy

auth = tweepy.OAuth1UserHandler(api_key, api_secret, access_token, access_secret)
api = tweepy.API(auth)
api.update_status("방금 업로드한 글: " + entry.link)

280자 제한에 맞게 요약을 잘라내는 처리도 같이 넣어주면 더 좋습니다.




⑦ 작은 테스트를 반복하기

여기까지 왔다면 다 끝난 게 아닙니다. 가장 중요한 건 작게 작게 테스트입니다. RSS → 중복 제거 → 키워드 필터 → 요약 → 업로드. 각 단계가 잘 작동하는지 따로따로 실행해보세요. 무작정 한꺼번에 돌리면 어디서 막히는지 알 수 없습니다.




⑧ 시행착오 팁

처음엔 인코딩 문제, API 제한, 에러 메시지로 스트레스 받을 수 있어요. 하지만 하나하나 해결해가면서 배우는 게 이 사이드 프로젝트의 묘미입니다. 저도 몰랐던 것들을 수없이 검색하고 실험하면서 배웠습니다. 중요한 건 멈추지 않는 겁니다.




⑨ 오늘의 미션 정리

✅ RSS 긁어오기 테스트

✅ 중복 제거 테스트

✅ 키워드 필터 테스트

✅ AI 요약 테스트

✅ 블로그 업로드 테스트

하나라도 성공했다면 오늘은 충분히 큰 진전입니다.




⑩ 마무리

오늘은 실제로 코드를 붙여보고, 어떻게 기능들을 단계별로 완성해가는지 살펴봤습니다. 다음 편에서는 이걸 매일 자동으로 실행할 수 있게 GitHub Actions로 배포하고, 유지보수 팁까지 정리해보겠습니다. 어렵지 않아요. 이제 거의 다 왔습니다.

keyword
작가의 이전글블로그 자동 포스팅 제작기 (1)