안녕하세요.
11기 사무자동화반에 참여하고 있는 셔니입니다.
3주차에 Zapier를 활용하여 뉴스 요약 자동화를 진행했습니다.
(지난주 링크 : https://www.gpters.org/nocode/post/summarize-news-send-email-5sskqTe88Fcve8z)
지난 토요일 SNS 자동화 발표에서 영감을 얻어 아이디어를 발전시켜 보았 습니다 ☺️
(참고 링크 : https://www.gpters.org/sns/post/11th-sns-automation-mass-cHAWxUlMfI1375c)
이번주에는 Make.com를 활용하여 뉴스 요약 + SNS 포스팅으로 확장하여 진행해보았습니다.
🖇 과정
구글스프레드 시트에서 키워드 불러오기
키워드로 뉴스를 검색하기
Claude를 이용하여 뉴스 요약하기
DALL-E를 이용하여 관련 이미지 생성하기
요약된 뉴스를 메일 전송하기
뉴스 요약 내용 검토하기
확인된 뉴스 요약을 SNS(instagram, facebook)에 포스팅하기
🔎 상세과정
Step1. 구글스프레드 시트에서 키워드 불러오기
구글 스프레드 시트에 키워드를 입력해둡니다.
구글 스프레드 시트 id를 가져옵니다
url 중에 /d/ 뒤에서 다음 /까지가 해당 스프레드 시트의 id 입니다.google sheets의 ‘Enter manullay’옵션을 선택하시면 스프레트 시트 id를 입력할 수 있습니다.
저 는 우선 키워드가 있는 하나의 셀을 지정하여 불러왔습니다.
Step2. 키워드로 뉴스를 검색하기
make.com은 0CodeKit을 통해 python을 실행할 수 있습니다.
news api를 이용하여 최근 30일 간의 관련 뉴스를 추출하도록 하였습니다.
클로드와 대화를 통해 코드를 쉽게 얻을 수 있습니다.
zapier에서 사용할 코드는 거의 한번에 뚝딱 만들어줬는데,
아직 make.com에서 0CodeKit을 사용방법을 어려워 하는 것 같아요 😂
오류가 나긴 했지만, 조금씩 고쳐가면서 코드를 완성하였습니다.
✅ 0CodeKit 사용시 주의사항
1달에 25번 실행 제한
output 은 ‘result’ 라는 변수에 딕셔너리 형태로 넣거나, return 문에 딕셔너리 넣어야 인식
ex) result = { ‘data’ : yourresult}
return {‘data’ : yourresult}
✅ api_key 얻는 곳
사용한 코드는 아래와 같습니다.
import requests
import sys
from requests.exceptions import RequestException
import json
from datetime import datetime, timedelta
def get_news(api_key, keyword, max_results):
url = 'https://newsapi.org/v2/everything'
end_date = datetime.now().date()
start_date = end_date - timedelta(days=30)
params = {
'q': keyword,
'apiKey': api_key,
'language': 'ko',
'pageSize': max_results,
'from': start_date.isoformat(),
'to': end_date.isoformat(),
'sortBy': 'publishedAt'
}
try:
response = requests.get(url, params=params, timeout=10)
response.raise_for_status()
data = response.json()
articles = data.get('articles', [])
results = {}
for i, article in enumerate(articles, start=1):
results[f'article{i}'] = {
'title': article.get('title', 'No title'),
'description': article.get('description', 'No description'),
'url': article.get('url', 'No URL'),
'publishedAt': article.get('publishedAt', 'No date')
}
return 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)}'}
def main(api_key, keyword, max_results):
if not api_key:
return {'error': 'API 키가 필요합니다.'}
if not keyword:
return {'error': '검색 키워드가 필요합니다.'}
try:
max_results = int(max_results)
if max_results < 1 or max_results > 100:
return {'error': '최대 결과 수는 1에서 100 사이의 정수여야 합니다.'}
except ValueError:
return {'error': '최대 결과 수는 정수여야 합니다.'}
return get_news(api_key, keyword, max_results)
# 사용자 입력값
api_key = '{api_key}' # 본인의 news api key를 입력합니다.
keyword = '{{29.value}}' # 동적변수로, 앞에 스프레드 시트에서 받아온 키워드를 선택합니다.
max_results = 5 # 원하시는 뉴스의 개수를 입력합니다.
# 메인 함수 실행 및 결과 출력
output = main(api_key, keyword, max_results)
result = json.dumps(output, ensure_ascii=False)
실제 화면
코드 안에 본인의 api key와 앞에서 받은 스프레드시트의 키워드, 검색할 뉴스의 개수를 지정해주면 됩니다.
문자인 경우는 꼭 앞 뒤에 ‘ 를 붙여주세요!
코드 실행 결과
article에 대한 title, description, url, publishedAt을 얻은 것을 확인 할 수 있습니다.
Step3. Claude를 이용하여 뉴스 요약하기
지난주 몽주님의 의견을 받아, 얻은 뉴스 정보를 따로 쪼개지 않고 그대로 사용해도 Claude가 알아서 잘 인식하더라구요 ㅎㅎ
해당 프롬프트도 클로드와 대화를 통해 프롬프트를 뽑았습니다.
최종 프롬프트는 영어로 사용하고, 마지막에 한국어로 응답해달라고 작성하였습니다 ~
[사용한 최종 프롬프트]
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 2-3 main topics.
* Include each news article in the most relevant topic.
* If there are 2 topics, allocate more articles to the more important or 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 and encouraging reader engagement.
3. Tweet Writing Guidelines:
* Each tweet should not exceed 280 characters.
* Use emojis appropriately to enhance readability.
* Use concise and clear language, considering the characteristics of Korean.
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
• Add "Key points:" text
• 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 (use shortened URLs if possible)
5. Language and Tone:
* Use concise and clear language.
* Maintain an objective tone while using expressions that capture the reader's interest.
* Use appropriate language for a Korean-speaking audience.
6. Hashtags:
* Include relevant 3-5 hashtags only in the closing tweet.
* Use a mix of Korean, English hashtags.
7. Topic Separation:
* Insert a blank line between each set of 3 tweets per topic to clearly distinguish between topics.
8. Final Check:
* Ensure all important information is included.
* Verify that the overall flow is logical and easy to understand.
* Review for correct Korean grammar and spelling.
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.
All responses should be provided in Korean.
## User Input:
[Keyword]: '{keyword}'
[Articles]: '{article result}'
[한국어 버전]
다음 5개의 뉴스 기사를 분석하고 다음 지침에 따라 트위터 형식으로 요약해주세요. 각 뉴스 기사에 대해 제목, 내용 요약, URL이 제공될 것입니다.
1. 뉴스 분석 및 그룹화:
* 5개의 기사를 분석하고 2-3개의 주요 주제로 그룹화하세요.
* 각 뉴스 기사를 가장 관련 있는 주제에 포함시키세요.
* 주제가 2개인 경우, 더 중요하거나 관련성이 높은 주제에 더 많은 기사를 할당하세요.
2. 요약 구조:
* 첫 번째 트윗: '{keyword}'로 찾은 오늘의 뉴스 요약 시작을 알리는 트윗을 작성하세요.
* 주제별 트윗: 각 주제에 대해 3개의 연결된 트윗을 작성하세요.
* 마지막 트윗: 요약을 마무리하고 독자의 참여를 독려하는 트윗을 작성하세요.
3. 트윗 작성 지침:
* 각 트윗은 280자를 초과하지 않아야 합니다.
* 가독성을 높이기 위해 이모지를 적절히 사용하세요.
* 한국어의 특성을 고려하여 간결하고 명확한 언어를 사용하세요.
4. 주제별 내용 구조:
* 첫 번째 트윗:
• 주제 번호 이모지로 시작 (1️⃣, 2️⃣, 3️⃣)
• 주제 제목과 관련 해시태그
• 주제에 대한 간략한 설명 (1-2문장)
* 두 번째 트윗:
• 💡 이모지로 시작
• "주요 포인트:" 텍스트 추가
• 주요 포인트(2-3개)를 글머리 기호로 나열
* 세 번째 트윗:
• 🔗 이모지로 시작
• "관련 기사:" 텍스트 추가
• 해당 주제와 관련된 뉴스 URL 나열 (가능한 경우 단축 URL 사용)
5. 언어와 톤:
* 간결하고 명확한 언어를 사용하세요.
* 객관적인 톤을 유지하면서 독자의 관심을 끄는 표현을 사용하세요.
* 한국어 사용자에게 적합한 언어를 사용하세요.
6. 해시태그:
* 관련 있는 3-5개의 해시태그를 마지막 트윗에만 포함하세요.
* 한국어와 영어 해시태그를 혼합하여 사용하세요.
7. 주제 구분:
* 각 주제별 3개의 트윗 세트 사이에 빈 줄을 삽입하여 주제 간 구분을 명확히 하세요.
8. 최종 확인:
* 모든 중요한 정보가 포함되었는지 확인하세요.
* 전체적인 흐름이 논리적이고 이해하기 쉬운지 확인하세요.
* 한국어 문법과 맞춤법이 정확한지 검토하세요.
제공된 5개의 뉴스 기사를 이 지침에 따라 요약해주세요. 전체 트윗 수는 시작 트윗, 각 주제별 3개의 트윗, 그리고 마무리 트윗으로 구성되어야 합니다.
모든 응답은 한국어로 제공해주세요.
## 사용자 입력:
[Keyword]: '{keyword}'
[Articles]: '{article result}'
실행 결과
🌟 오늘의 NVIDIA 관련 뉴스 요약을 시작합니다! 🎉 최신 기술과 프로모션 소식을 전해드리겠습니다. 👀
1️⃣ NVIDIA 그래픽카드 프로모션 #MSI #지포스RTX40SUPER
💡 주요 내용:
• MSI, 지포스 RTX 40 SUPER 시리즈 구매 후 사용기 작성 시 최대 3만원 네이버 페이 포인트 증정
• 강력한 게이밍과 크리에이티브 경험을 선사하는 그래픽카드
🔗 관련 기사:
• https://kbench.com/?q=node/257606
2️⃣ 엔비디아 옴니버스 마이크로서비스 발표 #자율주행 #센서시뮬레이션
💡 주요 내용:
• 엔비디아, 옴니버스 클라우드 센서 RTX 마이크로서비스 세트 발표
• 물리적으로 정확한 센서 시뮬레이션으로 자율 머신 개발 가속화
• 자율 주행 차량, 휴머노이드, 산업용 매니퓰레이터 등에 활용
🔗 관련 기사:
• https://kbench.com/?q=node/257577
3️⃣ 기가바이트 노트북 프로모션 #어로스 #G시리즈 #네이버강세일
💡 주요 내용:
• 기가바이트, 네이버 강세일 프로모션 진행 (7/1~7/7)
• 인기 게이밍 노트북 어로스 16X, G5, G6X 등 할인 판매
• 최신 인텔 프로세서와 NVIDIA 지포스 RTX 그래픽 탑재
🔗 관련 기사:
• https://kbench.com/?q=node/257588
• https://kbench.com/?q=node/257626
• https://kbench.com/?q=node/257548
이상으로 오늘의 NVIDIA 관련 뉴스 요약을 마칩니다. 🙌 최신 기술 트렌드와 다양한 프로모션 소식이 도움이 되셨기를 바랍니다. 앞으로도 흥미로운 소식으로 찾아뵙겠습니다! 🎈 #NVIDIA #그래픽카드 #게이밍노트북 #자율주행 #기술혁신
Step4. DALL-E를 이용하여 관련 이미지 생성하기
인스타그램에 뉴스요약과 함께 포스팅할 이미지를 2개 생성하였습니다.
‘keyword’에 대한 3D 아이콘
‘keyword’ 회사 앞에서 ‘keyword’가 적힌 종이를 들고 있는 직원의 모습
Image1
A high-quality, 3D icon of {keyword}, isometric, including names, 1:1
Image2
A smiling employee standing in front of {keyword} headquarters, holding a paper with {keyword}, 1:1
Step5. 요약된 뉴스를 전송하기
뉴스를 요약하고, 이미지를 생성했지만, 결과를 보지 않고 포스팅한다고 생각하니 걱정이 조금 되었습니다.
요약된 뉴스가 포스팅할만 내용인지 검토를 하고 싶었습니다.
google connection이 까다롭지만, 캠프 때 파트너님과 함께 1번 세팅한 후로 쉽게 사용이 가능했습니다.
실제 output는 줄바꿈이 잘 되어있는데, 메일은 줄바꿈이 사라진 상태로 보내지더라구요..ㅎ
zapier에서는 보기 좋게 잘 보내졌었는데, 이 부분은 좀 더 알아봐야할 것 같아요~
추가로, 사진 첨부 기능은 fileName과 data 값을 넣으라는 에러가 나서 실패했습니다.
BundleValidationError
Validation failed for 4 parameter(s).
* Missing value of required parameter 'fileName'.
* Missing value of required parameter 'data'.
* Missing value of required parameter 'fileName'.
* Missing value of required parameter 'data'.
제가 만든 이미지는 DALL-E로 만들어서 image의 url밖에 존재하지 않았습니다.
fileName과 data를 만드는 방법을 아시는 분은 알려주시면 감사하겠습니다 😊
Step6. 뉴스 요약 내용 검토하기
그래서 Sleep을 120초 주고, 120초 후에 ‘#Approve’ 답장을 보냈는지 확인합니다.
만약 제가 120초 안에 '#Approve' 가 포함된 답장을 했다면, 확인이 되었다고 인식할 수 있습니다.
하지만 주기적으로 실행된다고하면, 항상 그 시간에 2분안에 메일을 확인해야하는 번거로움이 있어
향후 좀 더 효율적인 방법으로 변경할 예정입니다.
Step7. 확인된 뉴스 요약을 SNS(instagram, facebook)에 포스팅하기
포스팅 할 내용을 확인했다는 답장을 받은 후, SNS에 포스팅하기 시작합니다.
instagram, facebook 업로드 성공하였습니다!
Claude한테 연결 방법을 물어봤더니, 비지니스 계정을 등록하는 방법을 상세하게 잘 알려주었습니다.
포스팅 결과
🛠 개선이 필요한 사항
검토 프로세스 자동화: 매일 특정 시간에 수동 검토가 필요한 현재 방식 개선
- 아이디어 : (시나리오 분리, 에러 핸들링 추가, 자동 정량 평가)이미지 첨부 파일 문제 해결: DALL-E로 생성된 이미지를 첨부 파일로 추가하는 방법 찾기
기업 선정 자동화: ChatGPT를 활용하여 관심도 높은 기업 10개를 자동 선정하고, 이를 바탕으로 순차적 자동화 진행
개선이 필요한 부분을 개선해서 더욱 완성도 높은 자동화 시나리오를 만들 예정입니다. ㅎㅎ
Make.com은 Zapier보다 조금 어려워 python 실행, 사진 첨부에 많은 시행착오를 겪었습니다.
더 효율적인 방법이나 아이디어가 있다면 언제든 공유해 주시기 바랍니다. ✋
감사합니다.
#11기사무자동화