n8n Claude API 연결로 뉴스 제목 자동 분류 시스템 만들기

RSS 피드에서 수집한 뉴스 제목들을 하나씩 읽어보면서 블로그 소재가 될지 판단하기 너무 번거롭지 않나요?

매일 쌓이는 뉴스들 때문에 시간만 버리고 있었거든요. 그래서 이번엔 n8n Claude API 연결을 통해 뉴스 제목을 자동으로 분류하는 시스템을 만들어봤어요.

오늘 목표

RSS로 수집한 SBS 뉴스 제목들을 Claude가 자동으로 판단해서 블로그 글감으로 사용 가능한 것만 따로 파일로 저장하기

준비물

  • Claude API 콘솔에서 발급받은 API 키
  • n8n 설치 완료
  • 지난번 만든 RSS 수집 워크플로우

Step 1: Windows 환경 설정하기

먼저 n8n Claude API 연결을 위해서는 환경 설정이 필요해요. Windows CMD를 관리자 권한으로 열고 다음 명령어를 입력합니다.

set NODE_FUNCTION_ALLOW_BUILTIN=* && set NODE_FUNCTION_ALLOW_EXTERNAL=* && n8n

이 설정을 해야 Code 노드에서 Node.js 내장 모듈을 사용할 수 있거든요. 아래 화면처럼 n8n이 정상 실행되면 됩니다.

n8n Claude API 연결

Step 2: 기본 워크플로우 구성하기

새 워크플로우를 만들고 다음 노드들을 순서대로 배치해보세요.

  1. Schedule Trigger: 매시간 실행
  2. HTTP Request: SBS RSS 피드 가져오기
  3. XML: RSS 데이터를 JSON으로 변환

HTTP Request 노드에서는 URL을 https://news.sbs.co.kr/news/SectionRssFeed.do?sectionId=01로 설정하면 됩니다. 다음과 같이 노드들이 연결된 화면이 나타납니다.

n8n Claude API 연결

Step 3: Claude API 연결 시행착오

처음엔 n8n의 Anthropic 노드를 써봤는데 “The resource you are requesting could not be found” 에러만 계속 나더라고요.

그래서 HTTP Request 노드로 직접 API를 호출해봤는데, 이번엔 JSON Body 파싱 오류가 반복됐어요. Code 노드에서 fetch나 axios도 시도했지만 모두 실패했습니다.

Step 4: Code 노드로 Claude API 호출하기

결국 Code 노드에서 Node.js 내장 모듈인 require('https') 방식으로 성공했어요. 새 Code 노드를 추가하고 다음 코드를 입력합니다. (저 같은 경우는 클로드에게 ‘어떻게 해?’ 라고 하니 순서대로 알려주더라고요. 그냥 복사 붙여넣기 했습니다.)

const https = require('https');
const querystring = require('querystring');

const titles = $input.all()[0].json.rss.channel.item.map(item => item.title);
const prompt = `다음 뉴스 제목들 중에서 블로그 글감으로 사용할 만한 것들만 골라서 "사용가능:" 뒤에 나열해주세요:\n${titles.join('\n')}`;

const data = JSON.stringify({
  model: "claude-3-haiku-20240307",
  max_tokens: 1000,
  messages: [{
    role: "user",
    content: prompt
  }]
});

const options = {
  hostname: 'api.anthropic.com',
  port: 443,
  path: '/v1/messages',
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'x-api-key': 'YOUR_API_KEY',
    'anthropic-version': '2023-06-01'
  }
};

return new Promise((resolve, reject) => {
  const req = https.request(options, (res) => {
    let body = '';
    res.on('data', (chunk) => body += chunk);
    res.on('end', () => {
      const result = JSON.parse(body);
      resolve([{json: {response: result.content[0].text}}]);
    });
  });
  req.write(data);
  req.end();
});

YOUR_API_KEY 부분에는 실제 Claude API 키를 입력하세요. 이런 화면으로 코드가 입력됩니다.

n8n Claude API 연결

Step 5: 파일 저장 기능 추가하기

Claude의 응답을 파일로 저장하기 위해 또 다른 Code 노드를 추가해요. 다음 코드로 blog_ideas.txt 파일에 결과를 저장할 수 있습니다.

const fs = require('fs');
const path = require('path');

const response = $input.all()[0].json.response;
const timestamp = new Date().toISOString().split('T')[0];
const content = `${timestamp}\n${response}\n\n`;

fs.appendFileSync('blog_ideas.txt', content);

return [{json: {saved: true, content: response}}];

파일 저장 노드까지 추가하면 아래 화면처럼 전체 워크플로우가 완성됩니다.

n8n Claude API 연결

실행 결과

  • SBS 뉴스 RSS에서 최신 뉴스 제목 10개 수집 완료
  • Claude가 “사용가능”과 “제외” 카테고리로 자동 분류
  • 블로그 글감으로 적합한 제목만 blog_ideas.txt에 저장
  • 매시간 자동 실행으로 지속적인 글감 수집 가능

n8n Claude API 연결 사용 소감

처음엔 n8n의 내장 노드들로 간단할 줄 알았는데 생각보다 복잡하더라고요. 특히 API 호출 부분에서 여러 번 막혔어요.

그래도 직접 시도해보면서 Code 노드의 활용법을 제대로 배운 것 같아요. 이제 다른 AI API도 비슷한 방식으로 연결할 수 있을 것 같습니다.

매일 뉴스를 일일이 확인하던 시간이 많이 줄어들 것 같네요.

썸네일 사진: Liam Charmer on Unsplash

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤