호주에서도 중고나라 같은 gumtree.com.au라는 웹사이트가 있다. 출퇴근을 자전거로 해보고 싶어서 저렴한 자전거를 찾고 있는데 괜찮은 딜은 검트리에 올라오는 족족 팔리기 때문에 수시로 모니터링 하지 않는 한 저렴한 물건을 구하기가 쉽지 않다.
주말 아침에 일어나서 검트리 페이지를 새로고침 하는 내 모습이 처량해서 이 작업을 자동화 하는 코드를 작성하게 되었다.
- 지역, 키워드로 검색 페이지를 긁어온다
- 각 판매글을 적절하게 파싱한다
- 이전에 긁어온 글과 비교해서 새 글을 뽑는다
- 새 글이 있으면 알림을 보낸다
- 다음 비교를 위해 저장한다
- 스케줄로 반복한다
요즘 파이썬을 계속 보고 있지만 내 서버 인스턴스에 이미 설정이 있는 node로 작성하기로 결정했다. 데이터는 그리 크지 않고 단순히 비교용으로 사용하기 때문에 json 파일로 저장하기로 했다. 알림은 메일로 보낼까 하다가 이전부터 익히 들어온 텔레그램 API를 활용하기로 했다.
어떤 라이브러리를 사용할지 찾아봤다.
- cherrio node에서 사용할 수 있는 jQuery 구현
- lodash 데이터 조작을 위한 유틸리티
- request-promise 이름대로 request에 promise를 끼얹은 라이브러리
텔레그램 API도 node-telegram-bot-api 같은 라이브러리가 있는데 작성할 때는 별 생각이 없어서 주소를 문서에서 가져다가 직접 호출했다. 추후에는 이 라이브러리로 변경해야겠다.
스케쥴은 간단하게 crontab에서 5분 간격으로 호출하게 했다. 매 5분마다 페이지를 받아 JSON으로 파싱하고 비교한다.
텔레그램은 몇 안되지만 html 태그를 포함해 메시지를 보내는 것을 지원한다. 그래서 이미지와 링크를 포함해서 다음 이미지처럼 메시지가 온다.
코드를 다 작성하고 느낀 점은,
- 텔레그램은 처음 사용해봤는데 개발에 활용하기 정말 좋게 문서도 잘 정리되어 있고 기능도 깔끔했음. 나중에 또 기회를 만들어 더 사용해볼 것.
- 패키지처럼 만드는데 익숙하지 않아서 코드가 많이 너저분. 깔끔하게 만드는 방법을 찾아보고 정리.
- 파일 입출력에는 동기적으로 동작하는 함수를 사용. 아직 파일 입출력을 비동기적으로 처리하는 것이 익숙하지 않은데 살펴보고 정리할 것.
- 판매글 비교하기 위한 lodash 코드를 작성하는데 문서를 꽤 오래 봐야 했었음. 문서를 좀 더 보고 유용한 함수를 정리.
게으름 부려서 작성한 코드가 날 공부하게 한다. 얼마나 좋은 게으름인가! 부지런히 찾아보고 정리해야겠다. 코드는 github에서 확인할 수 있다.