-
슬랙(Slack)으로 네이버 뉴스 알림 받기케이스 스터디 2024. 1. 26. 17:34

ChatGPT의 도움을 받으면 손쉽게 업무 자동화가 가능한 세상이 되었다.
코드에 대한 완벽한 지식 없이도 약간의 근성+이해력만 있으면 충분히 구현 가능한 자동화 알림. 아래를 참고하세요 ㅎㅎ
1. 내가 만들고 싶은 것: 네이버에서 '특정 키워드'가 들어간 기사가 발행되면 구글시트에 기록되고 슬랙 채널로 보내주기
2. 왜 필요한가: 매일 네이버에서 기사 검색하는게 귀찮음. 내가 원하는 키워드가 들어간 기사만 전달받고 모아놓을래.
[준비물]
1. 네이버 계정 2. 구글 계정 3. 슬랙 계정[구현 방법]
1. 네이버 개발자 사이트에 로그인 후 api를 신청한다.

Application 등록 버튼 선택 
등록 신청을 한다. 이름 설정하고, 검색 선택, Web 설정 선택, URL은 http://localhost로 기입 후 등록하기 버튼 누르기 
그럼 이렇게 api가 생성되는데, Client ID를 선택한다. 
ID와 Secret이 보이는데 이 값을 나중에 사용한다. 2. 슬랙에서 웹후크로 시작 -> 채널에 메세지 보내기 워크플로 빌더를 만든다.
만들 때 변수로 title과 link를 설정하고, 2번 항목의 링크는 나중에 써야하니 다른데 기록해놓자.

3. 구글 시트를 1개 생성한다.
4. 구글 Apps Script를 연다. (상단바 확장 프로그램에서 선택, 없으면 부가기능에서 설치하면 됩니다!)

5. 편집기가 열리면 아래 코드를 붙여넣는다.
// Slack Webhook URL var slackWebhookUrl = "슬랙 웹훅 주소"; // Google Sheets 스프레드시트 정보 설정 var spreadsheetId = "시트 고유 주소"; var sheetName = "시트 탭 이름"; // 네이버 API 설정 var naverClientId = "네이버 API ID"; var naverClientSecret = "네이버 API Secret"; var naverKeywords = ["키워드1", "키워드2", "키워드3"]; // 여러 키워드를 배열로 저장 // 이전에 처리한 뉴스의 제목을 저장하는 프로퍼티 키 var processedNewsTitleKey = "processedNewsTitle"; function sendSlackNotification(title, link) { // 슬랙으로 알림 보내기 var slackMessage = { text: "제목: " + title + "\n링크: " + link }; var options = { method: "post", contentType: "application/json", payload: JSON.stringify(slackMessage) }; UrlFetchApp.fetch(slackWebhookUrl, options); } function checkNewNews() { // 여러 키워드로 뉴스 검색 for (var k = 0; k < naverKeywords.length; k++) { var currentKeyword = naverKeywords[k]; var apiUrl = "https://openapi.naver.com/v1/search/news.json?query=" + encodeURIComponent(currentKeyword) + "&display=5&dsc=1"; var headers = { "X-Naver-Client-Id": naverClientId, "X-Naver-Client-Secret": naverClientSecret }; var response = UrlFetchApp.fetch(apiUrl, { headers: headers }); var result = JSON.parse(response.getContentText()); // 이전에 처리한 뉴스의 제목과 URL 가져오기 var processedNewsData = PropertiesService.getUserProperties().getProperty(processedNewsTitleKey); processedNewsData = processedNewsData ? JSON.parse(processedNewsData) : []; // 새로운 뉴스가 있으면 처리 for (var i = 0; i < result.items.length; i++) { var newsTitle = result.items[i].title; var newsLink = result.items[i].link; // 이미 처리한 뉴스인지 및 중복된 URL인지 확인 if (processedNewsData.some(news => news.title === newsTitle && news.link === newsLink)) { continue; // 이미 처리한 뉴스면 건너뜀 } // 중복 URL이 시트에 등록되어 있는지 확인 var sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName); var lastRow = sheet.getLastRow(); var urls = sheet.getRange(1, 2, lastRow, 1).getValues().flat(); // assuming URLs are in column B if (urls.includes(newsLink)) { continue; // 중복 URL이면 건너뜀 } // Google Sheets 스프레드시트에 기록 sheet.appendRow([newsTitle, newsLink]); // 슬랙으로 알림 보내기 sendSlackNotification(newsTitle, newsLink); // 처리한 뉴스의 제목과 URL 저장 processedNewsData.push({ title: newsTitle, link: newsLink }); } // 프로퍼티에 저장 PropertiesService.getUserProperties().setProperty(processedNewsTitleKey, JSON.stringify(processedNewsData)); } } // 5분 간격으로 실행 function run() { checkNewNews(); Utilities.sleep(5 * 60 * 1000); run(); }6. 코드 중 아래 빨간 글씨 부분만 수정한다.
// Slack Webhook URL
var slackWebhookUrl = "슬랙 웹훅 주소(웹훅에서 딴 주소를 그대로 집어넣기)";
// Google Sheets 스프레드시트 정보 설정
var spreadsheetId = "시트 고유 주소(스프레드시트 URL에서 d/여기 부분/edit만 복사해서 넣기)";
var sheetName = "시트 탭 이름(처음 생성하면 시트 1이라고 되어있어요)";
// 네이버 API 설정
var naverClientId = "네이버 API Client ID(네이버 api에서 확인 가능)";
var naverClientSecret = "네이버 API Secret(위와 동일)";
var naverKeywords = ["키워드1", "키워드2", "키워드3"]; <-만약 키워드를 더 넣고싶으면 ,"키워드"로 추가하시고 빼고싶음 빼세요.7. 함수를 run으로 변경한다.

7. 좌측 사이드바에서 트리거 페이지로 이동하여 트리거 추가를 한다.

트리거 추가 버튼 선택 
함수는 run 선택, 소스는 시간 기반으로 원하는 분으로 선택 (나는 코드도 5분이라 5분 단위로 선택했다) 8. 코드를 배포한다. (배포 유형은 웹앱)

9. 끝! 이제 컴퓨터를 끄셔도 키워드가 들어간 기사가 슬랙 알림으로 오고, 시트에도 리스트가 자동으로 쌓입니다.
결과물은 다음과 같아요.

신약 개발 관련 키워드로 설정해놓음 [주의할 점]
시트에 다시 들어가는건 괜찮은데 구글 app scripts 문서에 재접속하면 함수가 run이 아닌 다른 함수로 자동 변경된다.(즉 자동화가 꺼진다) 코드를 수정하러 들어갔을 땐 꼭 함수가 run인지 확인하고 배포하자.
[여담]
처음에 appscrpits가 아니라 google Colab에서 파이썬으로 구현했는데 Colab은 브라우저가 띄워져있을때만 런이 돌아간다고 했다. 그래서 백그라운드에서도 작업이 돌아가도록 시트에 데이터를 쌓고 쌓인게 5분마다 웹훅으로 호출되도록 방식을 변경함.
처음에 뭔가 연결이 잘못되었는지 한번 왔던 기사가 알림이 또 와서 url 기준으로 시트에 이미 있는 기사는 수집하지 않도록 변경함.
네이버 중복기사 비율이 참 높다. 일정하게 오는지 확인을 위해 트래픽 큰 키워드(삼성전자)로 테스트 했는데 정말 똑같은 기사가 5개씩 다른 언론사에서 발행됨 ㅎㅎ
'케이스 스터디' 카테고리의 다른 글
물리적 거리를 줄여 UX 사용성 높이기 (0) 2024.04.10 고객이 더 쉽게 결제하게 만들기 (국내) (0) 2024.03.19 UX Writing 실패에서 배우기 (0) 2024.03.12 전자서명으로 UX 개선하기 (0) 2024.03.11 메일침프(mailchimp)로 5시간만에 랜딩페이지 구현하기 (1) 2024.03.07