화산재 예보를 알려주는 Telegram Bot + Google Static Map 활용하기

배경

요즘 제가 지내고 있는 곳의 화산 폭파로 인해 화산재 예보를 주시하고 있습니다.
그래서 비 정기적으로 몇시간에 한번씩 업데이트 되는 이 예보를 확인하고 싶었고 그 예보에 제가 있는 위치가 화산재 영향 지역인지 아닌지를 쉽게 확인하고 싶었습니다.

그래서 TelegramBot 을 만들어 봤습니다. 네 모두 javascript로만 만들어져 있습니다.

주요 기능은 다음과 같습니다.

  • 예보에 포함된 좌표 정보를 바탕으로 사용자의 위치가 포함되었는지를 판단하고
  • 5분마다 한번씩 예보 사이트를 크롤링해서 예보를 확인하고 새로운 예보가 있다면 알림을 받고자 하는 사용자에게 메시지를 보냅니다.

heroku를 이용하고 heroku에서 손쉽게 연결 가능한 redis를 사용하고 있습니다. 소스 코드는 github에 공개되어있습니다.

Google Static Map 으로 지도 이미지 생성하기

그리고 어제 추가한 기능이 쉽게 시각적으로 확인할 수 있도록 예보를 지도에 그려 넣었습니다. 이를 구현하는 과정에서 Google Static Map을 처음 이용해봤습니다. 단지 url만으로 지도 위에 폴리곤이나 마커등의 정보를 표시할 수 있고 지도 스틸이미지를 생성할 수 있습니다. 동적일 필요가 없는 경우 html이나 js코딩이 필요 없고 Telegram같은 앱에서는 image url을 바로 대화창에서 preview 해주기에 링크를 클릭하지 않아도 쉽게 확인이 가능해서 좋았습니다.

다음과 같은 주소가

http://maps.googleapis.com/maps/api/staticmap?center=Agung&zoom=10&size=640x640&scale=2&path=color:0xff0000ff|weight:4|-7.883333333333333,115.43333333333334|-8.1,115.16666666666667|-8.4,115.46666666666667|-8.366666666666667,115.58333333333333|-7.966666666666667,115.81666666666666|-7.883333333333333,115.43333333333334&path=color:0xff8c00ff|weight:4|-8.033333333333333,115.76666666666667|-7.9,115.4|-8.133333333333333,115.15|-8.383333333333333,115.48333333333333|-8.366666666666667,115.58333333333333|-8.033333333333333,115.76666666666667&path=color:0xffff00ff|weight:4|-8.05,115.83333333333333|-7.883333333333333,115.55|-8.083333333333334,115.23333333333333|-8.383333333333333,115.48333333333333|-8.383333333333333,115.58333333333333|-8.05,115.83333333333333&path=color:0x008000ff|weight:4|-7.916666666666667,115.56666666666666|-8.15,115.25|-8.433333333333334,115.43333333333334|-8.416666666666666,115.56666666666666|-8.1,115.91666666666667|-7.916666666666667,115.56666666666666&markers=color:red|label:U|-8.481046,115.250316

다음과 같은 이미지가 됩니다.

3개의 좋아요

그런데 heroku는 30분간 외부접속 없으면 인스턴스를 sleep 시켜버리지 않나요?
내부 프로세스에서 setInterval 돌려도 소용 없었던걸로 기억하는데요. 유지 되나요?

바로 아래 부분에서 서버 url로 request를 setInterval에서 날려주기에 죽지 않고 살아있어요.
SERVER_URL은 heroku 인스턴스의 url 입니다.(예: https://YOUR_APP_NAME.herokuapp.com)

1개의 좋아요