Code Monkey home page Code Monkey logo

dhlottery-api's People

Contributors

an14700 avatar dhoon-dev avatar mikeds36 avatar rayleighko avatar rlatn1234 avatar roeniss avatar seunggabi avatar seungho0422 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

dhlottery-api's Issues

'*' 인자를 'x' 로 교체

  • 가 터미널에서 특수문자로 취급되어서 (zsh), "" 또는 ",,,,,*" 형태로 감싸줘야 하는데 불편하기 그지없다. 안전한 x 나 다른 문자로 교체하자

일부 의존성이 설치되지 않음

아 이게... 생각과 달리 몇몇 의존성이 잘 반영이 안된 것 같다.

완전 클린한 환경 (vm) 에서 설치해보고 누락된거 추가해야겠다. (ex. requests)

에러: "비정상적인 방법으로 접속하였습니다. 정상적인 PC 환경에서 접속하여 주시기 바랍니다."

[Lotto645 Buy Request]
Game A: []
Game B: []
Game C: []
Game D: []
Game E: []

❓ 위와 같이 구매하시겠습니까? [Y/n] yes
✅ --quiet 플래그가 주어져 자동으로 구매를 진행합니다.
2023-06-25 08:14:33 [error ] 🚨 에러가 발생했습니다: 구매에 실패했습니다: 비정상적인 방법으로 접속하였습니다. 정상적인 PC 환경에서 접속하여 주시기 바랍니다.
🚨 에러가 발생했습니다: 구매에 실패했습니다: 비정상적인 방법으로 접속하였습니다. 정상적인 PC 환경에서 접속하여 주시기 바랍니다.

이러한 메시지가 나오면서 안됩니다 ㅠㅠ 맥이나 우분투 둘다 시도했는데 동일합니다. 1.4.0버전이고 1.3.5 버전에서도 유사한 에러가 나옵니다. 저번주까지는 되었는데 이번주에는 갑자기 안되네요 ㅠㅠ 어떻게 해결하면 될까요?

사용자 계정 정보 세팅 관련 문서내용 개선

현재 readme.md에는 사용자 계정 정보 입력 관련하여 다음과 같이 기재되어 있습니다.

~/.dhapi/credentials 파일에 username, password를 입력하면 자동으로 로그인합니다.
profile을 여러개 설정할 수 있습니다.

Note

TOML 문법을 사용합니다. 따라서 value 값은 쌍따옴표를 사용해야 합니다.

DHAPI_USERNAME=asdf
DHAPI_PASSWORD=****

mkdir -p ~/.dhapi
cd ~/.dhapi

echo "[default]" > credentials
echo username = "$DHAPI_USERNAME" >> credentials # username
echo password = "$DHAPI_PASSWORD" >> credentials # password (미리 복잡한 난수로 변경하시길 권장합니다)


문서에 기재된 스니펫 예시만 보고 입력했을 때, value 값에 쌍따옴표가 붙지 않기 때문에 tomli.TOMLDecodeError가 발생함을 확인할 수 있습니다. 비록 NOTE를 통해 value 값은 쌍따옴표를 사용해야 함을 알렸지만, 실제 사용자는 스니펫에 더욱 의존하며 진행할 가능성이 크기 때문에 다음과 같이 제안드립니다.

제안1 : 문서 개선

DHAPI_USERNAME=\"asdf\"
DHAPI_PASSWORD=\"****\"

mkdir -p ~/.dhapi
cd ~/.dhapi

echo "[default]" > credentials
echo username = "$DHAPI_USERNAME" >> credentials # username
echo password = "$DHAPI_PASSWORD" >> credentials # password (미리 복잡한 난수로 변경하시길 권장합니다)

위와 같이 \를 명시해줌으로써 쌍따옴표가 static하게 입력됨을 알려주면 좋을 듯 합니다.

제안2 : 리팩토링

credentials 파일에는 쌍따옴표 없이 들어오므로, arg_parser.py에서 이를 toml의 value값으로 인식되게끔 코드를 개선할 수 있습니다.

안녕하세요

안녕하세요
좋은 소스코드 볼수 있어서 정말 좋습니다

최근 동행 로또 로그인 부분이 스크립트로 변경이 된 듯합니다
정상적인 로그인이 되지 않는 듯 하여 ISSUE 남겨 봅니다

감사합니다

docs: 리드미 수정 (-q 옵션 언급)

dhapi buy_lotto645 -q # 프로필 파일을 이용해 계정 정보 입력 & 자동모드로 5장 구매

dhapi --help 쪽에 써둔것과 동일한 문구로 변경할 것. -q는 자동모드를 의미하는게 아니라 자동모드를 확인 프롬프트 없이 구매하는 것을 말한다.

이쁘게 설명하기가 어려운 부분이다..

[docs] crontab example

I suggest to add crontab -e example code on README.md.

crontab -e 

0 0,6-23 * * * PATH=$PATH:/opt/homebrew/bin && dhapi buy_lotto645 -q

default 파라미터 추가 의견

안녕하세요.
덕분에 커맨드 한 줄로 편하게 구입이 가능해서 좋네요. 기여 감사합니다.

그런데 대부분 고정인 파라미터들은 default값으로 넣는건 어떨까요?
대다수 사용자가 로또 구입이 목표일테니 현재 기준으로만 default를 설정해도 될 것 같아서요.
다만 어떤걸 사고 있는지 인지가 힘들 수 있으니 password 받기 전에 현재 구입하는 복권 타입들을 출력해줘도 좋고요.
그럼 아래처럼 id, 개수만으로 실행할 수 있을 것 같습니다.
dhapi -U $YOUR_ID -C 5

의견이니 참고만 해주세요. 다시 한번 감사합니다!

user 옵션 관련 문의

혹시 -u 옵션에서 passwd 묻지 않고 옵션으로 받을 수 있는 기능이 있나요?

없으면 구현하실 예정이 있으신가요?

python 3.11 에서 실행 불가

응급처치법

pyenv 등을 사용해서 3.8 버전으로 실행

에러로그

Traceback (most recent call last):
  File "/opt/homebrew/bin/dhapi", line 8, in <module>
    sys.exit(main())
             ^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/dhapi/main.py", line 5, in main
    entrypoint()
  File "/opt/homebrew/lib/python3.11/site-packages/dhapi/router/router.py", line 7, in entrypoint
    arg_parser = ArgParser()
                 ^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/dhapi/router/arg_parser.py", line 25, in __init__
    installed_version, _ = get_versions()
                           ^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/dhapi/router/version_checker.py", line 20, in get_versions
    dist = JohnnyDist(PACKAGE_NAME)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/johnnydep/lib.py", line 81, in __init__
    self.import_names, self.metadata = _get_info(
                                       ^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/cachetools/__init__.py", line 702, in wrapper
    v = func(*args, **kwargs)
        ^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/johnnydep/lib.py", line 477, in _get_info
    data = pipper.get(
           ^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/cachetools/__init__.py", line 737, in wrapper
    v = func(*args, **kwargs)
        ^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/johnnydep/pipper.py", line 236, in get
    target, _headers = _download_dist(url, scratch_file, index_url, extra_index_url)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/johnnydep/pipper.py", line 105, in _download_dist
    target, _headers = urlretrieve(url, scratch_file, auth=auth)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/lib/python3.11/site-packages/johnnydep/compat.py", line 38, in urlretrieve
    res = opener.open(url, data=data)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/[email protected]/3.11.4/Frameworks/Python.framework/Versions/3.11/lib/python3.11/urllib/request.py", line 503, in open
    req = Request(fullurl, data)
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/[email protected]/3.11.4/Frameworks/Python.framework/Versions/3.11/lib/python3.11/urllib/request.py", line 322, in __init__
    self.full_url = url
    ^^^^^^^^^^^^^
  File "/opt/homebrew/Cellar/[email protected]/3.11.4/Frameworks/Python.framework/Versions/3.11/lib/python3.11/urllib/request.py", line 348, in full_url
    self._parse()
  File "/opt/homebrew/Cellar/[email protected]/3.11.4/Frameworks/Python.framework/Versions/3.11/lib/python3.11/urllib/request.py", line 377, in _parse
    raise ValueError("unknown url type: %r" % self.full_url)
ValueError: unknown url type: 'dhapi-2.0.0-py3-none-any.whl.metadata'

매주 자동 구매하는 깃헙액션 만들기

reference : https://github.com/techinpark/lottery-bot/tree/main/.github/workflows

개인적으로, 저는 "최소한의 손맛"을 느끼기 위해, 매주 수동으로 스크립트를 실행해 구매하는 편에 만족하고 있습니다.

그러나 어떤 분은 위 레퍼런스처럼, 자동구매하는 Github Actions 를 하나 추가하는 쪽을 선호하실 것 같습니다.

만약 그런 분이 계시다면 주저없이 기여해주세요! 필요하시다면 서포트하겠습니다.

예치금 충전 기능 추가

Screenshot 2023-05-21 at 15 27 21 by seonghyeok

반드시 "입금액 선택" 단계가 있어야 한다. 그렇지 않으면 해당 계좌가 돈을 먹지 않고 튕겨낸다 (호오..).

수동구매

현재 버전에서 수동구매 가능한가요?

예치금 조회 기능 오류

dhapi show-balance 명령어로 예치금을 조회하면 다음과 같이 오류가 발생합니다.
tomli.TOMLDecodeError: Invalid value (at line 2, column 12)

trace 로그를 보면 구매불가능금액을 처리하던 중 오류가 발생한 것 같습니다.
Traceback (most recent call last): File "/Users/name/WorkSpace/PythonProjects/lottery/.venv/lib/python3.12/site-packages/dhapi/port/lottery_client.py", line 186, in show_balance 구매불가능금액 = self._parse_digit(elem.select("td.ta_right")[6].contents[0]) # (예약구매금액 + 출금신청중금액)

버전은 4.0.2 버전을 사용했습니다.

좋은 기능 만들어주셔서 매주 잘 사용하고 있습니다.
감사합니다.

결과창이 이상하게 나와요

구매 결과 끝에 3 붙어서 나옵니다

실제 구매 번호
A 자동 24 26 29 36 37 45
B 자동 1 5 17 21 39 45
C 자동 5 18 32 40 42 43
D 자동 12 14 28 33 39 45
E 자동 1 7 20 40 41 42

cli 결과
Numbers:
A|24|26|29|36|37|453
B|01|05|17|21|39|453
C|05|18|32|40|42|433
D|12|14|28|33|39|453
E|01|07|20|40|41|423

dhapi: error: argument -C/--count: invalid int value: 'lotto645'

M2 맥에서 실행 시 아래와 같이 나옵니다

~/work ❯ dhapi -u ## -p ## -C lotto645 -t buy -c 5 -m auto
Password:
usage: dhapi [-h] -U USERNAME -P -K {lotto645} -T {buy} -C COUNT -M {auto}
dhapi: error: argument -C/--count: invalid int value: 'lotto645'

global error handling

적당히 raise XXXError("asdasd") 로 에러 처리 하고 있었는데, 이 메시지("asdasd")만 잘 나오게 글로벌 인터셉트 붙이고 싶음. (not whole stacktrace)

dependency 설치 안되고 있음

setup.py을 잘못 작성했나보다. 디펜던시 없다는 오류를 만남.

현재는 수동으로 의존성 (bs4 등)을 다 깔아주어야 하는 상황임

동행복권 사이트 시스템 점검 중일 때 코맨드를 실행하면 적절한 에러 표시하기

Screenshot 2023-04-04 at 00 12 02

현재는 아래와 같은 에러가 발생합니다.

Traceback (most recent call last):
  File "/opt/homebrew/bin/dhapi", line 8, in <module>
    sys.exit(main())
  File "/opt/homebrew/lib/python3.9/site-packages/dhapi/main.py", line 5, in main
    entrypoint()
  File "/opt/homebrew/lib/python3.9/site-packages/dhapi/router/router.py", line 9, in entrypoint
    ctrl = Lotto645Controller(arg_parser.get_user_id(), arg_parser.get_user_pw())
  File "/opt/homebrew/lib/python3.9/site-packages/dhapi/purchase/lotto645_controller.py", line 7, in __init__
    self.client = LotteryClient()
  File "/opt/homebrew/lib/python3.9/site-packages/dhapi/client/lottery_client.py", line 34, in __init__
    self._set_default_session()
  File "/opt/homebrew/lib/python3.9/site-packages/dhapi/client/lottery_client.py", line 46, in _set_default_session
    raise KeyError("JSESSIONID cookie is not set in response")
KeyError: 'JSESSIONID cookie is not set in response'

에러 코드를 정의해서 출력하면 좋을 것 같습니다.

점검 중 여부 확인은 점검 중에 동행복권 사이트에 접속을 시도하면,
307 Temporary Redirect 상태 코드를 반환하며,
https://dhlottery.co.kr/index_check.html로 redirect 되고있는 behavior를 활용하면 될 것 같습니다.

[credentials] multiple

I suggest to use multiple account. (like aws credentials.)

# cat ~/.dhapi/credentials

[default]
id = asdf
pw = 1234

[sg]
id = qwer
pw = 5678

...

cmd

dhapi buy_lotto645 -q # default
dhapi buy_lotto645 -q --profile sg # sg

I will make pr. thx

1장 구매 시 에러 발생

1장 구매 시 다음과 같은 에러가 발생합니다.

$ dhapi buy_lotto645 -g
Traceback (most recent call last):
  File "/Users/hapi/.pyenv/versions/3.8.18/bin/dhapi", line 8, in <module>
    sys.exit(main())
  File "/Users/hapi/.pyenv/versions/3.8.18/lib/python3.8/site-packages/dhapi/main.py", line 5, in main
    entrypoint()
  File "/Users/hapi/.pyenv/versions/3.8.18/lib/python3.8/site-packages/dhapi/router/router.py", line 7, in entrypoint
    arg_parser = ArgParser()
  File "/Users/hapi/.pyenv/versions/3.8.18/lib/python3.8/site-packages/dhapi/router/arg_parser.py", line 84, in __init__
    credentials = config_util.get(group="dhapi", context="credentials", profile=self._args.profile[0])
  File "/Users/hapi/.pyenv/versions/3.8.18/lib/python3.8/site-packages/seunggabi_core_python/util/config_util.py", line 36, in get
    return config._sections[profile]
KeyError: 'default'

CD: pypi 에 배포하는 github action 추가

  • 나 (roeniss) 만 실행 가능해야 한다.
  • 수동으로만 돌릴 수 있어야 한다.
  • version bump (버전업) 할 수 있어야 한다. 즉, major, minor, patch 중 하나를 골라서 그것만 업데이트 할 수 있어야 한다.
    e.g., v3.2.6 → v4.2.6 또는 v3.3.6 또는 v3.2.7 로 업그레이드 가능해야 함
  • 위 두 조건을 위해, jenkins 파이프라인에서 임의로 입력값을 받는 것 마냥 input 을 넣을 수 있어야 한다.
  • PyPI 와 연동이 되어야 한다. OIDC 지원을 하기 때문에 (토큰을 넣지 않아도) 쉽게 될 것으로 예상중.

신 버전이 나왔을 때 업데이트 제안하기

🌍WARN The running flyctl agent (v0.0.492) is older than the current flyctl (v0.0.503).

flyctl 쪽에선 구버전 cli 를 쓰면 위와 같이 업데이트 하라고 권유한다. 이러한 기능을 추가해보자.

신 버전이 있습니다. `pip install dhapi --upgrade` 로 최신버전을 받아보세요.

+) 혹은 나아가 Y 를 누르면 업데이트가 되도록?

Version 값 때문에 로컬에서 구동 실패

parser.add_argument("-v", "--version", action="version", version="%(prog)s " + installed_version)

이 라인을 주석치지 않으면 로컬에서 run 해볼 수 없는 상황이다.

바로 윗줄인 installed_version, _ = get_versions() 에서 정상적으로 값이 안넘어오는 것 같다.

출력에 잔액 정보 포함

from #6

또한 잔액이 확인 가능하면 일정수준 이하의 잔액이 남았을때 알려줄수 있을듯해서
남은 잔액 정보가 있다면 출력이 가능하실까요?

bug: global custom logger shows error twice

커스텀 로거가 제대로 설정이 안된 것 같다.

https://stackoverflow.com/a/7621965/8556340 의 조언을 따르는게 나을 것 같다.

현재 상태:

.venv ❯❯❯ PYTHONPATH=./src/  python3 src/dhapi/main.py buy_lotto645 -q     
[Lotto645 Buy Request]
Game A: ['x', 'x', 'x', 'x', 'x', 'x']
Game B: ['x', 'x', 'x', 'x', 'x', 'x']
Game C: ['x', 'x', 'x', 'x', 'x', 'x']
Game D: ['x', 'x', 'x', 'x', 'x', 'x']
Game E: ['x', 'x', 'x', 'x', 'x', 'x']
----------------------
❓ 위와 같이 구매하시겠습니까? [Y/n] yes
✅ --quiet 플래그가 주어져 자동으로 구매를 진행합니다.
2023-05-07 15:37:25 [error    ] 🚨 에러가 발생했습니다: 구매에 실패했습니다: 현재 시간은 판매시간이 아닙니다.
🚨 에러가 발생했습니다: 구매에 실패했습니다: 현재 시간은 판매시간이 아닙니다.

계정 정보 입력을 위한 커맨드 라인 기능 추가 요청

현재 사용자는 dhapi에 다음과 같이 사용자 정보를 입력합니다:

DHAPI_USERNAME=qwer
DHAPI_PASSWORD=5678

cd ~/.dhapi

echo "" >> credentials
echo "[qwer]" >> credentials
echo username = $DHAPI_USERNAME >> credentials
echo password = $DHAPI_PASSWORD >> credentials

이 방법은 일반 사용자에게 어려울 수 있고, 새로운 사용자에게 README.md 파일을 읽어야 한다는 불편함이 있습니다.
따라서, 아래와 같은 기능 추가를 제안합니다.


제안 1:

>>> dhapi buy_lotto645
계정 정보가 존재하지 않습니다. 계정 정보를 입력해주세요.
Username:
Password:

이 경우, Username을 입력하면 해당 사용자에 맞는 계정 정보가 생성되며, 파일에는 아래와 같이 저장되면 좋을 것 같습니다.

[default]
Username: (사용자 ID)
Password: (사용자 PW)

제안 2:

>>> dhapi buy_lotto645 -p asdf
프로필 명에 해당하는 계정 정보가 존재하지 않습니다. 계정 정보를 입력해주세요.
(위와 동일)

이 경우, 커맨드 라인에서 프로파일 명을 입력하였으므로, Username을 입력하였을 때 계정 정보가 생성되며, 파일에는 아래와 같이 저장되면 좋을 것 같습니다.

[asdf]
Username: (사용자 ID)
Password: (사용자 PW)

buy_lotto645를 제외한 향후 API 기능 추가 계획 문의

현재 API가 아래와 같이 작동하고 있는데, 이는 향후 기능 추가를 위해 남겨진 것인지, 아니면 아래와 같이 수정해도 되는지 궁금합니다.

현재
❯❯❯ dhapi buy_lotto645 -q

제안
❯❯❯ dhapi -q

'buy_lotto645'를 넘어서 다른 기능들을 추가할 계획이 있는지, 혹은 제안한 API의 변경사항이 향후 계획과 부합하는지 확인해주실 수 있나요?

수동 / 반자동 추가

빈 슬롯에 "*" 이 필요할거 같지 않습니다. 아래처럼 하면 될거 같아요..

manual mode:
-g 1,2,3,4,5,6

semi-auto mode: 6개 미만으로 입력하면 나머지 숫자는 자동으로 ...
-g 1,2,3

auto mode: 전체 자동
-g auto

위 내용까지 적용해서 실제 manual, semi-auto 도 동작하도록 PR 올렸습니다. #31

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.