2025년 12월 2일 화요일
[2025년 완전 자동화] ganatoday.kr 블로그스팟 글 올리면 → X 쓰레드 + 팟캐스트 자동 생성 & 업로드
By 가나톡ganaTOK12월 02, 2025
[2025년 완전 자동화] ganatoday.kr 블로그스팟 글 올리면 → X 쓰레드 + 팟캐스트 자동 생성 & 업로드(n8n으로 30분 만에 구축, 하루 콘텐츠 생산 5배 UP)n8n이 뭔가요? 왜 써야 하나요?n8n(엔에이트엔)은 노코드 오픈소스 자동화 툴로, Zapier나 Make처럼 앱들을 자유롭게 연결합니다.
→ Blogger RSS처럼 블로그 새 글을 감지해 AI로 X 쓰레드(스레드)와 팟캐스트를 자동 생성
→ 셀프호스팅으로 실행 무제한 + 무료 (또는 Railway 월 7천 원)
→ OpenAI, ElevenLabs 등 AI 통합으로 콘텐츠 품질 ↑, 당신은 글만 쓰면 끝!이 워크플로로 ganatoday.kr에 새 포스트 올리면:
테스트 후 "X 쓰레드 안 올라가"처럼 문제 말하면 바로 디버깅 도와줄게요. → Blogger RSS처럼 블로그 새 글을 감지해 AI로 X 쓰레드(스레드)와 팟캐스트를 자동 생성
→ 셀프호스팅으로 실행 무제한 + 무료 (또는 Railway 월 7천 원)
→ OpenAI, ElevenLabs 등 AI 통합으로 콘텐츠 품질 ↑, 당신은 글만 쓰면 끝!이 워크플로로 ganatoday.kr에 새 포스트 올리면:
- RSS가 감지 → OpenAI가 요약/쓰레드 스크립트 생성
- X에 5~10개 트윗 쓰레드 자동 포스팅 (링크 포함)
- ElevenLabs로 팟캐스트 오디오 생성 → Spotify/Apple Podcasts RSS 업데이트
→ 매일 1개 글 = 1개 쓰레드 + 1개 에피소드 자동 생산, SEO/팔로워 폭발!
- n8n 서버: 이전 대화처럼 로컬 Docker나 Railway 셀프호스팅 (이미 있으면 스킵)
- OpenAI API 키: https://platform.openai.com/api-keys → 생성 (무료 $5 크레딧)
- ElevenLabs 계정: https://elevenlabs.io → 무료 가입, API 키 + Voice ID (목소리 선택, e.g., "Adam" ID: 21m00Tcm4TlvDq8ikWAM)
- X (Twitter) Developer: https://developer.twitter.com → 앱 생성, API Key/Secret, Access Token/Secret (v2 OAuth 필요)
- 팟캐스트 호스팅: Buzzsprout나 Podbean 무료 계정 (RSS 피드 발급, 또는 Google Drive 업로드)
- Blogger RSS URL: ganatoday.kr/rss.xml (새 글 감지용)
- n8n 대시보드 → Workflows → Import from JSON → 아래 코드 전체 복사/붙여넣기 → Import
- (n8n.io/workflows/5084 기반 커스텀: RSS → OpenAI → X Thread → ElevenLabs Podcast)
json
{
"name": "★ ganatoday.kr 새 글 → X 쓰레드 + 팟캐스트 자동 생성 (2025 최신)",
"nodes": [
{
"parameters": {
"url": "https://ganatoday.kr/rss.xml",
"options": {
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
}
}
},
"name": "RSS Trigger (Blogger 새 글 감지)",
"type": "n8n-nodes-base.rssFeedTrigger",
"typeVersion": 1,
"position": [240, 300],
"notes": "ganatoday.kr RSS로 새 포스트 자동 트리거"
},
{
"parameters": {
"method": "GET",
"url": "={{ $json['link'] }}",
"options": {}
},
"name": "블로그 글 전체 내용 가져오기",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [460, 300]
},
{
"parameters": {
"model": "gpt-4o-2024-11-20",
"prompt": "다음 블로그 글을 X(트위터) 쓰레드(5~8개 트윗)로 변환해. 첫 트윗: 후크 제목 + 요약. 나머지: 핵심 포인트 + ganatoday.kr 링크. 한국어로, 해시태그 3개 추가. 형식: [Tweet 1]\n내용\n\n[Tweet 2]\n내용\n... \n\n[끝 트윗]\n링크 + CTA\n\n그리고 팟캐스트 스크립트: 5분 분량 자연스러운 대화체 요약 (인트로/본문/아웃트로 포함).\n\n글 내용: {{ $('블로그 글 전체 내용 가져오기').first().json.body }}",
"options": {
"temperature": 0.7,
"maxTokens": 2000
}
},
"name": "OpenAI: 쓰레드 + 팟캐스트 스크립트 생성",
"type": "n8n-nodes-base.openAi",
"typeVersion": 1.1,
"position": [680, 300],
"credentials": {
"openAiApi": {
"id": "1",
"name": "OpenAI"
}
}
},
{
"parameters": {
"jsCode": "// 쓰레드 트윗 분리\nconst thread = $('OpenAI: 쓰레드 + 팟캐스트 스크립트 생성').first().json.choices[0].message.content;\nconst tweets = thread.split('\\n\\n').filter(t => t.startsWith('[Tweet'));\nreturn [{ json: { tweets: tweets.map(t => t.replace(/\\[Tweet \\d+\\]/, '').trim()) } }];"
},
"name": "쓰레드 트윗 배열로 분리",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [900, 200]
},
{
"parameters": {
"resource": "tweet",
"operation": "create",
"text": "={{ $json.tweets[0] }}", // 첫 트윗
"additionalFields": {
"inReplyToTweetId": "={{ $vars.lastThreadId || null }}"
}
},
"name": "X 첫 트윗 포스팅",
"type": "n8n-nodes-base.twitter",
"typeVersion": 1,
"position": [1120, 200],
"credentials": {
"twitterOAuth1Api": {
"id": "2",
"name": "X (Twitter)"
}
}
},
{
"parameters": {
"resource": "tweet",
"operation": "create",
"text": "={{ $json.tweets[$runIndex + 1] }}", // 후속 트윗 (Loop 필요)
"additionalFields": {
"inReplyToTweetId": "={{ $node['X 첫 트윗 포스팅'].json.id }}"
}
},
"name": "X 후속 트윗 (쓰레드 연결)",
"type": "n8n-nodes-base.twitter",
"typeVersion": 1,
"position": [1120, 300],
"credentials": {
"twitterOAuth1Api": {
"id": "2",
"name": "X (Twitter)"
}
}
},
{
"parameters": {
"url": "https://api.elevenlabs.io/v1/text-to-speech/{{ $credentials.elevenlabsApi.voiceId }}",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "elevenLabsApi",
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "text",
"value": "={{ $('OpenAI: 쓰레드 + 팟캐스트 스크립트 생성').first().json.choices[0].message.content.split('[끝 트윗]')[1].trim() || '팟캐스트 스크립트' }}" // 팟캐스트 부분 추출
},
{
"name": "model_id",
"value": "eleven_monolingual_v1"
},
{
"name": "voice_settings",
"value": "{\"stability\":0.5,\"similarity_boost\":0.5}"
}
]
},
"options": {
"responseFormat": "file",
"output": "file"
}
},
"name": "ElevenLabs: 팟캐스트 오디오 생성",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [900, 500],
"credentials": {
"elevenLabsApi": {
"id": "3",
"name": "ElevenLabs"
}
}
},
{
"parameters": {
"operation": "upload",
"fileName": "={{ $json.title }}.mp3",
"binaryData": true,
"binaryPropertyName": "data" // 오디오 파일
},
"name": "팟캐스트 파일 업로드 (Buzzsprout 등)",
"type": "n8n-nodes-base.buzzsprout",
"typeVersion": 1,
"position": [1120, 500],
"credentials": {
"buzzsproutApi": {
"id": "4",
"name": "Buzzsprout (또는 Podbean)"
}
}
},
{
"parameters": {
"channelId": "#자동화-완료",
"text": "🎉 새 글 자동화 완료!\nX 쓰레드: {{ $('X 후속 트윗').last().json.id }}\n팟캐스트: {{ $('팟캐스트 파일 업로드').json.url }}"
},
"name": "슬랙 알림 (선택)",
"type": "n8n-nodes-base.slack",
"typeVersion": 2.2,
"position": [1340, 400],
"credentials": {
"slackApi": {
"id": "5",
"name": "Slack"
}
}
}
],
"connections": {
"RSS Trigger (Blogger 새 글 감지)": {
"main": [
[
{
"node": "블로그 글 전체 내용 가져오기",
"type": "main",
"index": 0
}
]
]
},
"블로그 글 전체 내용 가져오기": {
"main": [
[
{
"node": "OpenAI: 쓰레드 + 팟캐스트 스크립트 생성",
"type": "main",
"index": 0
}
]
]
},
"OpenAI: 쓰레드 + 팟캐스트 스크립트 생성": {
"main": [
[
{
"node": "쓰레드 트윗 배열로 분리",
"type": "main",
"index": 0
},
{
"node": "ElevenLabs: 팟캐스트 오디오 생성",
"type": "main",
"index": 0
}
]
]
},
"쓰레드 트윗 배열로 분리": {
"main": [
[
{
"node": "X 첫 트윗 포스팅",
"type": "main",
"index": 0
}
]
]
},
"X 첫 트윗 포스팅": {
"main": [
[
{
"node": "X 후속 트윗 (쓰레드 연결)",
"type": "main",
"index": 0
}
]
]
},
"ElevenLabs: 팟캐스트 오디오 생성": {
"main": [
[
{
"node": "팟캐스트 파일 업로드 (Buzzsprout 등)",
"type": "main",
"index": 0
}
]
]
},
"X 후속 트윗 (쓰레드 연결)": {
"main": [
[
{
"node": "슬랙 알림 (선택)",
"type": "main",
"index": 0
}
]
]
},
"팟캐스트 파일 업로드 (Buzzsprout 등)": {
"main": [
[
{
"node": "슬랙 알림 (선택)",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
},
"tags": ["Blogger", "X Thread", "Podcast", "AI"]
}- 임포트 후 노드 연결 확인 (자동으로 연결됨, 안 되면 드래그로 연결)
- OpenAI
- Type: OpenAI API
- API Key: 당신 키 입력 → Save → 이름: OpenAI
- X (Twitter)
- Type: Twitter OAuth1 API
- API Key, API Secret, Access Token, Access Secret 입력 (Developer 앱에서 복사)
→ Connect 계정 → 이름: X (Twitter)
- ElevenLabs
- Type: ElevenLabs API
- API Key: elevenlabs.io에서 복사
- Voice ID: "21m00Tcm4TlvDq8ikWAM" (Adam 목소리, 변경 가능) → 이름: ElevenLabs
- Buzzsprout (팟캐스트)
- Type: Buzzsprout API (또는 HTTP Request로 Podbean)
- API Key: buzzsprout.com/settings/api → 입력 → 이름: Buzzsprout
(RSS 업데이트: 워크플로 끝에 HTTP 노드 추가로 RSS.xml 수정)
- RSS Trigger 노드 클릭 → URL: https://ganatoday.kr/rss.xml 확인 (폴링: 5분 간격 추천)
- OpenAI 노드 → Prompt에서 "ganatoday.kr" 언급으로 브랜딩 맞춤
- X 후속 트윗 노드 → Loop 노드 추가 (쓰레드 5개 이상: Code 노드에서 배열 루프)
- 테스트: Manual 실행 → 가짜 RSS 아이템으로 시뮬레이션 (새 포스트 작성 후 5분 대기)
- X: 새 쓰레드 확인 (@당신계정)
- 팟캐스트: MP3 다운로드 → Buzzsprout 대시보드 업로드 확인
- 활성화: 오른쪽 스위치 ON → 초록색 되면 끝! (자동 24/7 동작)
- 쓰레드 길이 조정: OpenAI Prompt에 "7개 트윗" 지정
- 팟캐스트 배포: Buzzsprout RSS를 Spotify/Apple에 제출 (한 번만)
- 오류 시: 로그 확인 → RSS 폴링 지연? (n8n 설정 → Poll Time 1분으로)
- 비용: OpenAI $0.01/글, ElevenLabs 무료 10분/월 → 월 30글 = 500원
- 이전 대화 연계: 당신의 카카오 구독 시스템과 연동? 새 포스트 알림에 이 워크플로 트리거 추가 가능





