Github Action으로 매일마다 브리핑 받기!

jwn4492·2020년 3월 23일
60
post-thumbnail

매일마다 아침 날씨 뉴스 등을 찾아보는 것이 귀찮지 않은가?

난 웹훅 ( 디스코드, 슬랙 ) 으로 매일마다 브리핑을 해주는 봇이 있으면 좋겠다고 생각했다.
이 글에서 그 개발 과정과 삽질을 공유해보겠다

Google App Script 로 개발...!

구글 앱 스크립트는 간단한 응용 프로그램 개발을 위해 Google에서 개발한 스크립팅 플랫폼이다.
앱 스크립트는 문법이 자바스크립트이고 거의 무료여서 사용하기 편하다고 생각해서 사용하게 되었다.

어...? 최신 자바스크립트 문법을 사용할 수 없었다

어쩔 수 없이 옛날 버전으로 개발을 하고 npm 모듈 또한 사용을 하지못하였다.
그렇게 어쩌다보니 ? 개발을 다 완료하고 트리거로 매일 8시에 알람이 오게 하였다.

그러던 어느날에는 오류가 떳다. ㅏ.. 오류를 찾을려고 했지만 앱 스크립트 특성상 다른 플랫폼에서 실행되어서 오류를 찾는게 매우 힘들었다.
그래서 어쩔수 없이 다른 대안을 찾아봐야겠다고 생각했다.

Github Action 을 쓰자!

이후 앱 스크립트를 버린 후 람다, Firebase 등 여러 선택지에서 고민하기 시작했다.

그러던 중 이 이 글을 보고 처음 Github Action을 알게되었다.

자신이 원하는 프로그래밍 언어로 크론 등 을 할 수 있다는 게 매력적이게 느껴졌다.
그렇게 앱 스크립트를 버리고 Github Action을 사용하는김에 코드를 다 최신 문법으로 바꾸고 타입스크립트를 적용시켰다.

1. 웹 파싱을 하자

봇은 날씨, 온도, 뉴스 등을 보내주기 위해서는 데이터를 파싱해야했다.
날씨와 온도는 Weather Api 를 사용해서 가져오기로 했다. 다만 Wetaher Api에는 한가지 문제점이 있는데 결과값이 영어라는 점이다.
그래서 날씨 코드를 이용해서 한글로 변환해주어한다 그래서 json 파일로 저장 후 날씨 코드를 이용해서 한글로 된 날씨 데이터로 가공하였다.

그 다음은 뉴스를 파싱해야했다. 네이버 뉴스, 다음 뉴스, 구글 뉴스 등이 있었는데
나는 그 중 구글 뉴스를 파싱했다.
https://news.google.com/rss?hl=ko&gl=KR&ceid=KR:ko
해당 사이트에서 axios를 사용하여 가져온 후 cheerio를 사용하여 제목과 url을 파싱했다.

2. 웹훅으로 전송

일단 웹훅으로 전송하기 위해서는 웹훅 url이 필요했는데 이 url을 저장할 방법이 고민이었다.
웹훅 url은 공개되면 안 되는 정보였으므로 비밀스럽게 보관해야 했다.


방법을 찾는 도중에 깃헙 secrets에 보관이 가능하다는 것을 알고 설정을 하고 nodejs.yml에 추가해주었더니
process.env로 바로 가져올 수 있었다 :)

그렇게 파싱한 정보를 매일 아침 8시에 웹훅으로 보내게 하였다.

결과

디스코드 웹훅

슬랙 웹훅

이렇게 Github Action으로 편지봇을 만들어 보았다.
Github Action을 처음 사용해보았는데 매우 좋았고 사용할 기회가 있으면 사용할 것 이다.

또한 Github Action을 활용한다면 여러가지 작업을 할 수 있다 ( 배포, 테스트 등)

모든 소스코드는 여기서 확인 가능해요.
또는 봇을 사용하고 싶으시면 README.MD를 참고해주세요

https://github.com/cjaewon/letterbot

긴글 읽어주셔서 감사합니다!

profile
🔥

9개의 댓글

comment-user-thumbnail
2020년 3월 24일

좋은 내용 감사합니다!

1개의 답글
comment-user-thumbnail
2020년 4월 3일

좋은 글 감사합니다!
저도 Github Action 써봐야겠네요 : )

1개의 답글
comment-user-thumbnail
2020년 4월 4일

리얼타임으로 읽어오는 봇이나 서버는 필요없고, 아침 정도에 긁어오는 봇이 필요했는데 그대로 필요한 내용이 적혀있네요. 좋은 글 감사드립니다.

1개의 답글
comment-user-thumbnail
2020년 5월 21일

velog 백업 도구 만든거 글 왜 삭제하셨나요??

2개의 답글