중고 사이트 게시물 모니터링 도구 작성 후기

호주에서도 중고나라 같은 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에서 확인할 수 있다.

김용균

안녕하세요, 김용균입니다. 문제를 해결하기 위해 작고 단단한 코드를 작성하는 일을 합니다. 웹의 자유로운 접근성을 좋아합니다. 프로그래밍 언어, 소프트웨어 아키텍처, 커뮤니티에 관심이 많습니다.

이 글 공유하기

이 글이 유익했다면 주변에도 알려주세요!

페이스북으로 공유하기트위터로 공유하기링크드인으로 공유하기Email 보내기

주제별 목록

같은 주제의 다른 글을 읽어보고 싶다면 아래 링크를 확인하세요.

February 02, 2016

VS Code에서 TypeScript 환경 꾸리기

Visual Studio Code에서 TypeScript을 사용하는 환경을 꾸리는 방법을 정리했다. vscode에 아직 기능이 많은 편은 아니지만 여러 편의 기능이 있어 환경을 구축하는데 활용했다. 물론 실무에서 사용할 땐 webpack이나 여타 t…

February 01, 2016

호주 생활/취업 메일 문답

블로그를 운영하면서 가장 꾸준하게 인기 있는 글은 단연 호주에서 일하는 이야기다. 이 글 덕분인지 이메일로 질문을 자주 받는 편인데 아무래도 질문에 공통점이 많은 편이다. 답장이 거의 비슷한데도 시간을 너무 많이 쓰게 되는 것 같아 이전에 보냈던 메…