구글스프레드시트 앱스크립트를 이용한 ‘키워드 스크랩 메일링’ 코드 공유 Sharing code for ‘Keyword scrap mailing’ using Google Spreadsheet plugin ‘apps script’

1. 준비물 : 구글스프레드시트 확장 프로그램 ‘앱스 스크립트’와 자신감
Supplies: Google Spreadsheet Extension Program ‘Apps Script’ and Confidence

회사와 투자에 관련된 ‘키워드’가 들어간 뉴스를 시간마다 자동으로 메일로 받아보고 싶었다. 유튜브 채널과 ChatGPT와 몇 시간을 씨름 한 끝에 ‘키워드 스크랩’ 코드를 완성했다.
뉴스는 Google 뉴스를 이용하며, 네이버나 다른 뉴스API를 이용하려면 복잡한 절차가 필요하다고 해서 패스. 같은 이유로 본문에 들어간 키워드를 찾는 것도 복잡해져서 패스

현재 내 개인 메일로 6시간마다 ‘교육부’와 대학교 명이 들어간 최신 메일이 자동 발송된다. ChatGPT와 대화를 통해 본문 내용이나 표의 형식을 바꿀 수도 있지만 자칫 잘못하면 코드에 오류가 생긴다. (실제로 3시간 동안 오류가 나서 ChatGPT와 대화를 다시 시작해서 성공했다.)

혹시나 형태를 그대로 활용해서 메일링 서비스를 이용하고 싶은 분이 있을까봐 코드를 공유한다. 수정하는 부분에 ‘키워드/받을메일주소/뉴스개수’ 등을 수정해주면 약간의 변형은 가능하다.


2. ‘키워드 스크랩’ 실행법 How to execute ‘keyword scrap’

(1) 구글스프레드 시트-확장 프로그램-Apps Script-새 프로젝트 클릭
Click ‘Google sheets’ – ‘New Project’ – ‘Application’ – ‘Apps Script’ – ‘New Project’


(2) 새프로젝트에 아래의 코드를 복사 붙여넣기하고 ‘저장’-‘실행’ 버튼 클릭
Copy and paste the code below into the new project and click the ‘Save’ – ‘Run’ button

아래의 코드를 붙여 넣고 파란 박스에 해당하는 내용을 본인에게 필요한 내용으로 수정하면 된다.(이때 작은 따옴표를 삭제하지 않게 조심하자)
예시) var keyword = ‘코스피‘; // 스크랩할 키워드 입력
  var maxResults = 10; // 가져올 최대 결과 수
  var email = ‘스크랩 받을 메일 주소‘; // 결과를 받을 이메일 주소 입력
  • ‘구글스프레드시트-앱 스크립트’를 열고, 아래의 내용을 그대로 붙여 넣으면 된다. (굵게 표시된 키워드, 메일 주소를 본인에게 필요한 내용으로 바꾸면 된다.)
  • (↓ 빠트리지 않고 아래의 파란색 코드를 앱스크립트에 복사 붙여넣기 하십시오) (↓ Copy and paste the blue code below into the app script without missing it. You can change the bold keywords(키워드/10/email address) to the content you need.)

function scrapeNewsWithKeyword() {
  var keyword = ‘키워드‘; // 스크랩할 키워드 입력
  var maxResults = 10; // 가져올 최대 결과 수
  var email = ‘??????@naver.com‘; // 결과를 받을 이메일 주소 입력

  // Google News API URL을 생성합니다.
  var apiUrl = ‘https://news.google.com/rss/search?q=’ + encodeURIComponent(keyword) + ‘&hl=ko&gl=KR&ceid=KR:ko’;

  // RSS 피드를 가져옵니다.
  var response = UrlFetchApp.fetch(apiUrl);
  var xmlData = response.getContentText();
  var document = XmlService.parse(xmlData);
  var root = document.getRootElement();

  // 뉴스 아이템을 파싱합니다.
  var items = root.getChildren(‘channel’)[0].getChildren(‘item’);

  // 이메일에 보낼 테이블 형식의 HTML 메시지를 생성합니다.
  var subject = keyword + ‘ 관련 최신 뉴스’;
  var htmlMessage = ‘<table border=”1″>’;
  htmlMessage += ‘<tr><th>번호</th><th>제목</th><th>언론사</th><th>배포일</th></tr>’;

  for (var i = 0; i < Math.min(items.length, maxResults); i++) {
    var title = items[i].getChild(‘title’).getText();
    var link = items[i].getChild(‘link’).getText();
    var source = items[i].getChild(‘source’).getText();
    var pubDate = items[i].getChild(‘pubDate’).getText();

    // 테이블에 뉴스 정보를 추가합니다.
    htmlMessage += ‘<tr>’;
    htmlMessage += ‘<td>’ + (i + 1) + ‘</td>’;
    htmlMessage += ‘<td><a href=”‘ + link + ‘”>’ + title + ‘</a></td>’;
    htmlMessage += ‘<td>’ + source + ‘</td>’;
    htmlMessage += ‘<td>’ + pubDate + ‘</td>’;
    htmlMessage += ‘</tr>’;
  }

  htmlMessage += ‘</table>’;

  // 이메일을 전송합니다.
  MailApp.sendEmail({
    to: email,
    subject: subject,
    body: “HTML 메일을 보시려면 HTML 형식을 지원하는 이메일 클라이언트를 사용해주세요.”,
    htmlBody: htmlMessage
  });
}

(3) ‘키워드 스크랩’ 결과물 : 정상작동한다면 다음과 같이 메일을 받게 된다.
Keyword scrap results: If it works properly, you will receive an email as follows.


(4) 자동발송 설정하기 : ‘트리거’ 기능으로 원하는 조건에 발송 설정하기
Setting up automatic shipping: Setting up shipping under desired conditions with the ‘trigger’ function

코딩 작업을 마치면 왼쪽에 ‘트리거’를 클릭한다. 트리거는 특정 조건에 해당 코드가 작동하도록 만드는작업이다.
When you finish coding, click “Trigger” on the left. A trigger is an operation that causes the code to work under certain conditions.

트리거 탭에서 ‘트리거 추가’를 누르면 다음과 같이 조건을 설정할 수 있게 된다. 12시간마다 키워드가 들어간 뉴스를 자동으로 스크랩해서 날아오게 만들고 싶을 경우 위와 같이 지정하면 된다.
일단위도 가능하고 다른 조건도 설정할 수 있으니 그것은 스스로 살펴보면 직관적으로 이해할 수 있다.

If you press ‘Add Trigger’ on the Trigger tab, you can set the conditions as follows. If you want to automatically scrap news with keywords every 12 hours and make it fly, you can specify it as above. Once you look at it yourself, you can understand it intuitively because you can set up other conditions.


(5) 주의 사항 : 오류와 코드의 수정 등 돌발 변수는 스스로 탐구가 필요합니다. 🙂
Caution: Unexpected variables such as errors and code correction need to be explored on your own.

수정/저장을 반복하다보면 503error나 각종 에러를 마주하게 된다. 사실 코딩 전문가가 아니어서 오류메시지가 뜰때마다 ChatGPT에게 재학습 시켜서 여러차례 수정을 거쳐서 해당 코드를 완성한 상태라서 더 상세한 안내는 어려운 점을 양해 부탁드린다. 대신 해당 아이디어를 실행하는데 도움을 준 유튜브 영상 링크를 첨부한다.
If you repeat correction/saving, you will encounter 503 errors or various errors. I am not a coding expert, so whenever I get an error message, I have re-learned it to ChatGPT and have completed the code after several corrections. Please understand that more detailed guidance is difficult. Instead, I attach a YouTube video link that helped me execute the idea.

부디 많은 도움이 되길 바라며 소소하지만 유용한 꿀팁을 소개하도록 노력하겠습니다. 🙂
I hope it helps a lot and I will try to introduce small but useful tips. 🙂

Leave a Comment