HelloLottery / checker.py
wushidiguo2's picture
Upload 55 files
58e7ec3
import requests
from pathlib import Path
from utils import *
class Checker:
def __init__(
self,
url,
app_id,
app_secret,
timeout = 5
):
self.url = url
self.headers = {
"app_id" : app_id,
"app_secret" : app_secret
}
self.timeout = timeout
self.saved = {}
@classmethod
def from_file(
self,
filename,
timeout=5
):
p = Path(filename)
if not p.is_file():
raise FileNotFoundError(f"File {str(p.absolute())} not found.")
p = str(p.absolute())
with open(p, "r") as f:
contents = f.readlines()[: 3]
if len(contents) < 3:
raise MissingInfoException(f"File {p} is not complete.")
url, app_id, app_secret = [l.strip() for l in contents]
return Checker(url, app_id, app_secret, timeout)
def query(
self,
code,
issue
):
winning = self.saved.get((code, issue), None)
if not winning:
payload = {
"code" : code,
"expect" : issue
}
r = requests.get(self.url, params=payload, headers=self.headers, timeout=self.timeout)
if r.status_code != requests.codes.ok:
raise requests.RequestException(f"网络请求出错,code: {r.status_code},请检查网络连接。")
js = r.json()
if js["code"] != 1:
raise requests.RequestException(f"没有查询到期号为{issue}的彩票开奖信息,请确认是否已开奖。")
winning = js["data"]["openCode"]
if not winning:
raise MissingInfoException("接口返回数据中未解析到开奖号码。")
winning = winning_process(winning, code)
self.saved[(code, issue)] = winning
return winning
def __call__(
self,
code,
issue,
numbers
):
winning = self.query(code, issue)
hits = hit_check(numbers, winning)
return hits, winning