/auto-lotto-gitaction

2023.06) Buying the lottery automatically through GitHub Actions (only kr)

Primary LanguagePythonMIT LicenseMIT

Lotto Buy Bot (로또 구매봇)

Check The Result Of Lotto (로또 결과봇)

Buying the lottery automatically through GitHub Actions

매주 토요일 KST 08:50 에 동행 복권 로또 구매
> 매주 토요일 KST 21:50 에 동행 복권 로또 결과 slack hooking

  • https://dhlottery.co.kr/ 동행복권 홈페이지
  • https://velog.io/@king/githubactions-lotto 원작자분 벨로그입니다!
    • 해당 레포는 원작 소스 코드 기반으로 (1)public 하게 사용할 수 있게,
    • (2) slack hook (optional)
    • (3) 결과 check
    • (4) 기타 편의 기능
    • 정도 추가 되었습니다.
  • public 으로 공유할 수 있게 모든 민감 정보 action secrets 값으로 관리
  • slack bot을 통해 slack noti (hook) 전달함
  • 예치금 필요합니다.

UPDATE LOG

  • 발표난 당첨 번호와 자동 비교 work flow 추가 [23.06.03]
  • 랜덤으로 구매한 복권 번호, 우선 최대 5개 까지만, 번호 noti work flow 추가 [23.06.25]
  • 구매한 복권 당첨 여부 가져오기 [23.07.09]
  • result parsing issue 에서 retry 추가 [24.02.24]
  • 특정 이슈는 slack을 통해서 빠르게 핸들링 할 수 있게 템플릿 [24.02.24]
  • 구매한 번호 체크하는 페이지 변동, POST 로 API 스펙이 바뀜, 대응 개발 [24.05.11]
  • 보너스 번호를 일반 번호와 같게 판단하는 경우 처리

GETTING START

1. fork를 한다!

2. fork한 repo를 git clone 한다.

3. slack bot 세팅은 아래 글 참조, 사용하지 않는다면 그냥 주석처리해도 된다.

4. action.yml 파일을 보면 gitaction 시크릿값을 python run 인자로 넘길때 사용하고 있다. 즉 시크릿값만 세팅하면 된다.

5. 시크릿값은 아래 사진 참고

  • SLACK_BOT_TOKENxoxb 로 시작하는, bot OAuth token값이다.
  • SLACK_CHANNEL 값은 추가한 slack bot을 초대한 그 채널값이 필요하다. 이게 채널ID 값이거나 채널이름 (#이 안붙은) 값이면 된다.
  • BUY_COUNT 가 구매할 복권 수 세팅 값이다.
  • 그 외 user값은 https://dhlottery.co.kr/common.do?method=main 여기 회원가입한 정보를 넣자. 절대 절대 절대 노출 안되게 조심

6. 위 세팅 완료 후 test를 위해 action.yml 에서 on: [push] 로 바꾸고 push를 해보자

  • 러닝할 때 구매가능 여부 부터 체크 해야한다! 구매 가능한 시간대가 아니라면 Timeout error가 날 수 있다.

7. action-result.yml 은 이제 발표된 추첨 번호를 slack을 통해 전달해준다. 20시 35분경 발표가 나는 점, 업데이트가 나중에 되는점을 참작해 21시 50분경에 러닝하게 했다.

  • 당첨 하이라이팅을 제대로 하고 싶으나, 당첨 히스토리가 없어서 만들지 못하고 있다..

To develop something more in the local

  1. 가상환경 구성을 추천한다. 편한대로 구성하면 된다, ex. python3 -m venv .venv
  2. requirements.txt file을 install 한다.
  3. playwright install 를 해준다. 기본 준비 끝 - https://playwright.dev/
  4. 디버깅 모드 셀레니움이 익숙한 사람은 그렇게 사용해도 무방하다.

STACK

  • python
    • python 3.8+
    • Playwright & selenium (chrome driver)
    • requests
  • lint: flask8 & black
  • github action (action.yml)

LOG & ISSUE

  • 23.08.12 대박,, 5등 당첨! 감격!