바쁘신 분들을 위해 결론부터 말씀드립니다!
- 핵심 설정: 내 블로그 ID 입력, 폴더 경로 복사, 포스팅 간격(초) 설정.
- 글 작성: 메모장 첫 줄은 '제목', 두 번째 줄부터는 '본문'입니다.
- 주의 사항: 저장할 때 반드시 인코딩을 'UTF-8'로 해야 한글이 깨지지 않습니다.
0. "어려운 코딩은 제가 다 해두었습니다!"
1편에서 구글 API 설정을 마치셨나요? 이제 배달부 역할을 할 blogger_bot.py 프로그램에 "우리 집(블로그) 주소는 여기고, 글은 이 폴더에 있어"라고 알려줄 차례입니다. 메모장만 다룰 줄 안다면 누구나 할 수 있으니 걱정 마세요!
아래의 프로그램을 다운로드 받으셔서 JSON파일과 함께 자동화 포스팅을 하기 위한 폴더에 넣어두시기 바랍니다.
파일의 내용은 아래와 같습니다.
import os
import pickle
import time
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
from googleapiclient.discovery import build
# ==========================================
# [사용자 설정 영역: 여기만 수정하세요]
# ==========================================
# 1. 내 블로그 ID (블로그 관리 주소창의 숫자)
BLOG_ID = "1457224213360648910"
# 2. 파일들이 들어있는 폴더 경로 (r을 꼭 붙여주세요)
INPUT_FOLDER = r'C:\Users\탑라이트 1층\Desktop\blogger_auto_system\post_ready'
COMPLETED_FOLDER = r'C:\Users\탑라이트 1층\Desktop\blogger_auto_system\post_end'
# 3. 포스팅 간격 설정 (3600초 = 1시간)
WAIT_SECONDS = 3600
# ==========================================
# 구글 블로그 접근 권한 설정
SCOPES = ['https://www.googleapis.com/auth/blogger']
def get_blogger_service():
"""구글 로그인 인증을 처리하는 함수"""
creds = None
# 이전에 로그인한 기록이 있다면 가져옴
if os.path.exists('token.pickle'):
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)
# 로그인 기록이 없으면 새로 로그인 진행
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(
'client_secret.json', SCOPES)
creds = flow.run_local_server(port=0)
# 로그인 정보 저장 (다음 실행 시 자동 로그인용)
with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)
return build('blogger', 'v3', credentials=creds)
def post_to_blogger(service, title, content):
"""블로그에 실제 글을 올리는 함수"""
body = {
"kind": "blogger#post",
"title": title,
"content": content
}
try:
posts = service.posts()
result = posts.insert(blogId=BLOG_ID, body=body, isDraft=False).execute()
print(f"✅ 발행 성공: {title}")
return True
except Exception as e:
print(f"❌ 발행 실패: {e}")
return False
def main():
"""전체 시스템을 가동하는 메인 함수"""
# 필요한 폴더가 없으면 자동으로 만듦
if not os.path.exists(INPUT_FOLDER): os.makedirs(INPUT_FOLDER)
if not os.path.exists(COMPLETED_FOLDER): os.makedirs(COMPLETED_FOLDER)
print("🤖 블로그스팟 자동 배달부 작동 시작...")
try:
service = get_blogger_service()
except Exception as e:
print(f"❌ 인증 에러: {e}\n'client_secret.json' 파일이 있는지 확인하세요.")
return
# 반복해서 파일 확인 및 포스팅
while True:
# post_ready 폴더에서 .txt 파일 목록 가져오기
files = [f for f in os.listdir(INPUT_FOLDER) if f.endswith('.txt')]
if not files:
print("📂 [알림] 준비된 TXT 파일이 없습니다. 새로운 파일을 기다립니다...")
# 파일이 없으면 10분마다 다시 확인
time.sleep(600)
continue
# 가장 오래된 파일 하나 선택
file_name = files[0]
file_path = os.path.join(INPUT_FOLDER, file_name)
try:
with open(file_path, 'r', encoding='utf-8') as f:
lines = f.readlines()
if not lines: continue
title = lines[0].strip() # 첫 줄은 제목
content_text = "".join(lines[1:]) # 나머지는 내용
# 텍스트의 엔터를 블로그용 줄바꿈(HTML)으로 변환
content_html = content_text.replace('\n', '<br>')
# 블로그에 올리기
if post_to_blogger(service, title, content_html):
# 성공하면 완료 폴더로 이동
dest_path = os.path.join(COMPLETED_FOLDER, file_name)
if os.path.exists(dest_path): os.remove(dest_path)
os.rename(file_path, dest_path)
print(f"💤 다음 배달까지 {WAIT_SECONDS}초(1시간) 동안 휴식합니다...")
time.sleep(WAIT_SECONDS)
except Exception as e:
print(f"⚠️ 오류 발생 ({file_name}): {e}")
time.sleep(60) # 오류 시 잠시 대기 후 다시 시도
if __name__ == '__main__':
main()
1. [주소 찾기] 내 블로그 ID 가져오기
블로그 ID는 구글이 내 블로그에 붙여준 '고유 번호'입니다. 주소창에서 쉽게 찾을 수 있습니다.
- 방법:
- 구글 블로그 관리자 페이지에 접속합니다.
- 주소창의 숫자를 확인하세요. 예:
https://www.blogger.com/blog/posts/1457224213360648910 - 맨 뒤에 있는 숫자 전체를 복사합니다.
- 입력 위치:
blogger_bot.py를 메모장으로 열고 아래 부분의 숫자만 갈아 끼우세요.# 1. 내 블로그 ID (따옴표 안에 숫자만 입력) BLOG_ID = "1457224213360648910"
[📸 이미지 삽입 가이드]
- 장면: 블로그 관리자 주소창에서 숫자가 강조된 화면
- 캡션: [그림 1: 주소창 맨 끝에 있는 숫자가 내 블로그 ID입니다]
- 파일명 제안: blogger-id-check.jpg
2. [위치 안내] 폴더 경로 설정 (내 컴퓨터 주소)
프로그램이 어디에서 글을 가져오고, 다 쓴 글은 어디로 치울지 알려줘야 합니다.
- 경로 복사: 만들어둔
post_ready폴더를 열고, 상단 주소창을 클릭하면 파란색으로 선택됩니다. 그대로 복사(Ctrl + C)하세요. - 입력 위치: 코드 안에 아래와 같이 붙여 넣으세요. (경로 앞의 소문자 r은 절대 지우지 마세요!)
# 경로 앞에 r을 붙여야 윈도우 경로 에러가 나지 않습니다. INPUT_FOLDER = r'C:\Users\Desktop\blogger_auto\post_ready' COMPLETED_FOLDER = r'C:\Users\Desktop\blogger_auto\post_end'
📌 에디터의 팁: 경로 앞에 붙는
r은 '이 주소를 있는 그대로 읽어줘'라는 뜻입니다. 이게 없으면 윈도우 특유의 역슬래시(\) 때문에 프로그램이 고장 날 수 있어요!
3. [시간 조절] 포스팅 시간 간격 설정
배달부가 다음 글을 올릴 때까지 얼마나 쉴지 정합니다. 단위는 초(Seconds)입니다.
| 목표 시간 | 설정값 (초) | 추천 용도 |
|---|---|---|
| 10분 | 600 |
빠른 테스트용 |
| 30분 | 1800 |
집중 포스팅 시 |
| 1시간 | 3600 |
일반적인 자동 포스팅 권장 |
- 설정 위치:
# 1시간 간격으로 설정하고 싶다면 3600 입력 WAIT_SECONDS = 3600
4. [글쓰기] 자동 포스팅용 TXT 파일 만들기
프로그램과의 약속입니다. 메모장을 열어 아래 형식으로 글을 쓰고 post_ready 폴더에 넣어주세요.
- 작성 약속: "첫 번째 줄은 제목, 두 번째 줄부터는 본문"
- 파일 예시:
매일 아침 사과 한 알이 몸에 좋은 이유 5가지 안녕하세요! 오늘은 '아침 사과'의 효능에 대해 알아보겠습니다. 사과는 식이섬유가 풍부하여 장 건강에 매우 좋습니다. (이하 본문 내용...) - ⚠️ 필수 주의사항 (매우 중요!):
파일을 저장할 때 하단의 [인코딩] 메뉴를 클릭하여 반드시 [UTF-8]로 선택하고 저장하세요. 그렇지 않으면 블로그에 글이 올라갔을 때 한글이 외계어처럼 깨져 보입니다.

💡 최종 확인: 설정이 완료된 코드의 모습
모든 설정을 마쳤다면 프로그램의 상단은 대략 이런 모습이 됩니다.
```python
[사용자 설정 영역]
BLOG_ID = "1234567890123456789" # 내 블로그 숫자 ID
INPUT_FOLDER = r'C:\Users\User\Desktop\blogger_auto\post_ready'
COMPLETED_FOLDER = r'C:\Users\User\Desktop\blogger_auto\post_end'
WAIT_SECONDS = 3600 # 1시간 대기
이제 post_ready 폴더에 예시처럼 작성한 TXT 파일들을 여러 개 넣어두고 프로그램을 실행하면, 1시간마다 하나씩 제목과 본문을 구분해서 멋지게 포스팅할 것입니다.
🔗 함께 보면 좋은 글
- 1편 컴퓨터와 구글 계정으로 블로그 스팟에 자동 포스팅하는 방법 1편(feat. 무료)
- 3편 컴퓨터와 구글 계정으로 블로그 스팟에 자동 포스팅하는 방법 3편(명령프롬프트로 자동화 실행하는 방법)