Zapier로 뉴스 요약하여 메일·문자 전송하기

안녕하세요.

11기 업무자동화반에 참여하고 있는 셔니입니다.

이번에 Zapier를 활용하여 뉴스 요약 자동화를 진행했습니다.


사람들은 매일 뉴스에 들어가서 관심있는 뉴스를 찾아보는데,

등록해둔 관심있는 키워드 관련 뉴스들을 자동으로 요약해주면 좋을 것 같다는 생각이 들어 진행하게 되었습니다.


🖇 과정

  1. 구글스프레드 시트에 등록한 키워드 불러오기

  2. 키워드로 뉴스를 검색

  3. 검색한 뉴스 제목, 내용, url 분리

  4. claude를 이용한 뉴스 요약

  5. 요약된 내용 메일, 문자로 보내기



🔎 상세과정

Step1. 구글스프레드 시트에 등록한 키워드 불러오기


  • ‘자동화_키워드’ 스프레드 시트에서 ‘키워드 입력’ 컬럼을 읽어옵니다.


Step2. 키워드로 뉴스를 검색

아쉽게도 news를 불러오는 action이 없어서, news api를 이용한 코드로 사용했습니다.

저는 ‘keyword’로 검색한 ‘n’개의 뉴스를 불러오도록 하였습니다.

다양한 옵션이 포함된 화면을 보여주는 스크린샷


이 부분도 cluade에게 물어봐서 쉽게 코드를 생성하였습니다.

수정이 필요한 부분도 얘기하면 바로바로 수정해주죠 ㅎㅎ

새로 생긴 아티팩트 기능이 아주 좋은 것 같아요~

한국어 문자 메시지 스크린샷


사용한 코드는 아래와 같습니다.

import requests
from requests.exceptions import RequestException
import json

def get_news(api_key, keyword, max_results):
    url = 'https://newsapi.org/v2/everything'
    params = {
        'q': keyword,
        'apiKey': api_key,
        'language': 'ko',
        'pageSize': max_results
    }
    
    try:
        response = requests.get(url, params=params, timeout=10)  # 10초 시간 제한 설정
        response.raise_for_status()  # HTTP 오류 발생 시 예외 발생
        data = response.json()
        
        articles = data.get('articles', [])
        
        results = []
        for article in articles:
            results.append({
                'title': article.get('title', 'No title'),
                'description': article.get('description', 'No description'),
                'url': article.get('url', 'No URL')
            })
        
        return {'articles': results}
    
    except RequestException as e:
        return {'error': f'API 요청 실패: {str(e)}'}
    except json.JSONDecodeError:
        return {'error': 'JSON 디코딩 실패'}
    except Exception as e:
        return {'error': f'예상치 못한 오류 발생: {str(e)}'}

# Zapier에서 제공하는 입력 데이터
api_key = input_data.get('api_key')
keyword = input_data.get('keyword')
max_results = input_data.get('max_results', 5)  # 기본값 5

# 입력값 검증
if not api_key:
    output = {'error': 'API 키가 필요합니다.'}
elif not keyword:
    output = {'error': '검색 키워드가 필요합니다.'}
else:
    try:
        max_results = int(max_results)
        if max_results < 1 or max_results > 100:
            output = {'error': '최대 결과 수는 1에서 100 사이의 정수여야 합니다.'}
        else:
            output = get_news(api_key, keyword, max_results)
    except ValueError:
        output = {'error': '최대 결과 수는 정수여야 합니다.'}

# Zapier로 출력
print(json.dumps(output))


테스트 해 본 결과, 뉴스의 title(제목), description(본문요약), url을 얻었습니다.

한국어가 포함된 Python 코드 편집기의 스크린샷


Step3. 검색한 뉴스 제목, 내용, url 분리

앞에서 불러온 뉴스의 제목, 내용, url 5개가 하나로 나오더라구요.

저는 따로 사용하고 싶어서 text_formatter를 이용해서 1개씩 분리하였습니다.

  • App & Event : Utilties, Action > Transform : Line-item to Text 선택


5개의 뉴스 title을 개별 item으로 분리되었습니다.

왼쪽 사진이 적용 전, 오른쪽 사진이 적용 후 입니다.

description, url도 동일하게 진행하였습니다.


Step4. claude를 이용한 뉴스 요약

cluade에서 뉴스 요약을 위한 프롬프트를 작성해달라고 요청했습니다.

이런식으로 반복하면서 프롬프트를 얻고,

수정할 부분이 있으면 따로 수정하였습니다.

한국어 메시지 스크린샷

최종적으로 나온 프롬프트는 토큰 비용을 절약하기 위해 영어로 바꾸고, 마지막에 한국어로 응답해달라고 작성였습니다 ~


[사용한 최종 프롬프트]

system

Please analyze and summarize the following 5 news articles in Twitter format according to these guidelines. For each news article, you will be provided with the title, content summary, and URL.

1. News Analysis and Grouping:
   - Analyze the 5 articles and group them into a maximum of 3 main topics.
   - Include each news article in the most relevant topic.

2. Summary Structure:
   - Opening tweet: Write a tweet announcing the start of today's news summary found with the 'keyword'. 
   - Topic tweets: Create 3 connected tweets for each topic.
   - Closing tweet: Write a tweet concluding the summary.

3. Tweet Writing Guidelines:
   - Each tweet should not exceed 280 characters.
   - Use emojis appropriately to enhance readability.

4. Topic Content Structure:
   - First tweet:
     • Start with a topic number emoji (1️⃣, 2️⃣, 3️⃣)
     • Topic title and related hashtags
     • Brief description of the topic (1-2 sentences)
   - Second tweet:
     • Start with 💡 emoji
     • List key points (2-3) as bullet points
   - Third tweet:
     • Start with 🔗 emoji
     • Add "Related articles:" text
     • List the news URLs related to the topic

5. Language and Tone:
   - Use concise and clear language.
   - Maintain an objective tone.

6. Hashtags:
   - Include relevant hashtags only in the closing tweet.
   - Use 3-5 hashtags that summarize the main topics and themes.

7. Final Check:
   - Ensure all important information is included.
   - Verify that the overall flow is logical and easy to understand.

## Input Format:
You will receive the following information for each news article:
[Keyword]:
News 1:
- [News Title]:
- [News Content Summary]:
- [News Article URL]:
...
News 5:
- [News Title]:
- [News Content Summary]:
- [News Article URL]:

Please summarize the provided 5 news articles according to these guidelines. The total number of tweets should consist of an opening tweet, 3 tweets for each topic, and a closing tweet.

[System : 한국어 버전]

다음 5개의 뉴스 기사를 다음 지침에 따라 트위터 형식으로 분석하고 요약해 주세요. 각 뉴스 기사에 대해 제목, 내용 요약, URL이 제공될 것입니다.

1. 뉴스 분석 및 그룹화:
   - 5개의 기사를 분석하고 최대 3개의 주요 주제로 그룹화하세요.
   - 각 뉴스 기사를 가장 관련성 높은 주제에 포함시키세요.

2. 요약 구조:
   - 시작 트윗: 오늘의 뉴스 요약을 '키워드'로 찾았다고 알리는 트윗을 작성하세요.
   - 주제 트윗: 각 주제에 대해 3개의 연결된 트윗을 작성하세요.
   - 마무리 트윗: 요약을 마무리하는 트윗을 작성하세요.

3. 트윗 작성 지침:
   - 각 트윗은 280자를 초과하지 않아야 합니다.
   - 가독성을 높이기 위해 적절하게 이모지를 사용하세요.

4. 주제 내용 구조:
   - 첫 번째 트윗:
     • 주제 번호 이모지로 시작 (1️⃣, 2️⃣, 3️⃣)
     • 주제 제목과 관련 해시태그
     • 주제에 대한 간단한 설명 (1-2문장)
   - 두 번째 트윗:
     • 💡 이모지로 시작
     • 주요 포인트(2-3개)를 글머리 기호로 나열
   - 세 번째 트윗:
     • 🔗 이모지로 시작
     • "관련 기사:" 텍스트 추가
     • 주제와 관련된 뉴스 URL 나열

5. 언어와 어조:
   - 간결하고 명확한 언어를 사용하세요.
   - 객관적인 어조를 유지하세요.

6. 해시태그:
   - 관련 해시태그는 마무리 트윗에만 포함하세요.
   - 주요 주제와 테마를 요약하는 3-5개의 해시태그를 사용하세요.

7. 최종 확인:
   - 모든 중요한 정보가 포함되었는지 확인하세요.
   - 전체적인 흐름이 논리적이고 이해하기 쉬운지 확인하세요.

## 입력 형식:
각 뉴스 기사에 대해 다음 정보를 받게 됩니다:
[키워드]:
뉴스 1:
- [뉴스 제목]:
- [뉴스 내용 요약]:
- [뉴스 기사 URL]:
...
뉴스 5:
- [뉴스 제목]:
- [뉴스 내용 요약]:
- [뉴스 기사 URL]:

이 지침에 따라 제공된 5개의 뉴스 기사를 요약해 주세요. 총 트윗 수는 시작 트윗, 각 주제에 대한 3개의 트윗, 그리고 마무리 트윗으로 구성되어야 합니다.


User


Step5. 요약된 내용 메일, 문자로 보내기

문자 전송은 solapi를 회원가입해서 로그인만 하면 사용이 가능하더라구요.

메일과 문자로 전송이 잘 되었네요 ☺️


[전송결과]



Zapier로 자동화해보니까 뿌듯하네요~

매일 정보를 얻기 위해 뉴스에 들어가서 검색을 해야했었는데,

요약을 자동으로 해주고 관련 Url도 찾아주니 너무 간편한 것 같아요~


제가 작성한 과정보다 효율적인 방법이 있다면 알려주세요 ✋

제목, 내용, url이 한꺼번에 분리가 되는지 혹은 분리하지 않고 프롬프트에 넣는 방법이 있는지 궁금하네요 ~

지금은 하나의 키워드로 진행했지만, 추후에는 여러 키워드가 순차적으로 실행되는 것도 구현해보고 싶네요.


감사합니다.


#11기사무자동화

15
5개의 답글

👉 이 게시글도 읽어보세요