diff --git a/lottery/__init__.py b/lottery/__init__.py index 5794335..d1974e0 100644 --- a/lottery/__init__.py +++ b/lottery/__init__.py @@ -8,6 +8,12 @@ from model.plw import PLW from model.sd import SD from model.klb import KLB from model.football_sfc import FootballSfc +from model.football_match import FootballMatch +from model.football_team import FootballTeam +from model.football_match_bf_odds import FootballMatchBfOdd +from model.football_match_bqc_odds import FootballMatchBqcOdd +from model.football_match_spf_odds import FootballMatchSpfOdd +from model.football_match_zjq_odds import FootballMatchZjqOdd class Lottery(object): """ @@ -117,3 +123,79 @@ class Lottery(object): else: print(f"{draw_issue}开奖结果已经写入数据库中...") return None + + + def insert_match(self, match_id, **kwargs): + """ + 插入比赛结果数据 + """ + result = self.db.query(FootballMatch).filter_by(match_id=match_id).first() + if result is not None: + print(f"{match_id}已经写入数据库中。。。") + return + team1 = self.db.query(FootballTeam).filter_by(team_id=kwargs["homeTeamId"]).first() + if team1 is None: + home_team = FootballTeam(team_id=kwargs["homeTeamId"], team_name=kwargs["homeTeam"], team_all_name=kwargs["allHomeTeam"]) + self.db.add(home_team) + self.db.commit() + team2 = self.db.query(FootballTeam).filter_by(team_id=kwargs["awayTeamId"]).first() + if team2 is None: + away_team = FootballTeam(team_id=kwargs["awayTeamId"], team_name=kwargs["awayTeam"], team_all_name=kwargs["allAwayTeam"]) + self.db.add(away_team) + self.db.commit() + football_match = FootballMatch(match_id=match_id) + football_match.match_num = kwargs["matchNum"] + football_match.match_num_str = kwargs["matchNumStr"] + football_match.match_date = kwargs["matchDate"] + football_match.league_id = kwargs["leagueId"] + football_match.league_name = kwargs["leagueNameAbbr"] + football_match.home_team_id = kwargs["homeTeamId"] + football_match.home_name = kwargs["homeTeam"] + football_match.away_team_id = kwargs["awayTeamId"] + football_match.away_name = kwargs["awayTeam"] + football_match.half_score = kwargs["sectionsNo1"] + football_match.score = kwargs["sectionsNo999"] + football_match.is_single = kwargs["bettingSingle"] + football_match.match_result_status = kwargs["matchResultStatus"] + if int(kwargs["matchResultStatus"]) != 0: # 0 代表比赛取消 + if kwargs["winFlag"] == "A": + football_match.result = 0 + elif kwargs["winFlag"] == "D": + football_match.result = 1 + elif kwargs["winFlag"] == "H": + football_match.result = 3 + else: + result = None + if kwargs["goalLine"] is not None: + football_match.rq_count = int(kwargs["goalLine"]) + else: + football_match.rq_count = None + if ":" in kwargs["sectionsNo1"]: + half_score = list(map(int, kwargs["sectionsNo1"].split(":"))) + if half_score[0] < half_score[1]: + football_match.bqc_result = f"0{football_match.result}" + elif half_score[0] == half_score[1]: + football_match.bqc_result = f"1{football_match.result}" + else: + football_match.bqc_result = f"3{football_match.result}" + if ":" in kwargs["sectionsNo999"]: + scores = list(map(int, kwargs["sectionsNo999"].split(":"))) + football_match.total_goal_count = sum(scores) + if scores[0] + int(kwargs["goalLine"]) < scores[1]: + football_match.rq_result = 0 + elif scores[0] + int(kwargs["goalLine"]) == scores[1]: + football_match.rq_result = 1 + else: + football_match.rq_result = 3 + else: + football_match.total_goal_count = None + football_match.rq_result = None + self.db.add(football_match) + self.db.commit() + print(f"{football_match.id}:{football_match.match_id}写入数据库完成。。。") + + + + + + \ No newline at end of file diff --git a/lottery/football/sporttery.py b/lottery/football/sporttery.py new file mode 100644 index 0000000..b7d4e44 --- /dev/null +++ b/lottery/football/sporttery.py @@ -0,0 +1,55 @@ +import sys +import os +sys.path.append(os.curdir) + +import pandas as pd +from requests_html import HTMLSession +from furl import furl + +from lottery import Lottery + +# from lottery.football import Foootball + +class Sporttery(object): + _base_url = "https://webapi.sporttery.cn/gateway/jc/football/" + + + def __init__(self, match_begin_date, match_end_date=None, match_page=1, page_no=1, page_size=30, is_fix=0, pc_or_wap=1): + self.match_begin_date = match_begin_date + if match_end_date is not None: + self.match_end_date = match_end_date + else: + self.match_end_date = match_begin_date + self.match_page = match_page + self.page_no = page_no + self.page_size = page_size + self.is_fix = is_fix + self.pc_or_wap = pc_or_wap + self.session = HTMLSession() + + + def get_match_data(self): + params = dict(matchBeginDate=self.match_begin_date, matchEndDate=self.match_end_date, matchPage=self.match_page, + pageSize=self.page_size, pageNo=self.page_no, isFix=self.is_fix, pcOrWap=self.pc_or_wap) + url = furl(f"{self._base_url}/getMatchResultV1.qry").add(params) + r = self.session.get(url) + data = r.json() + return data + + def get_odds_data(self, match_id): + params = dict(clientCode=3001, matchId=match_id) + url = furl(f"{self._base_url}/getFixedBonusV1.qry").add(params) + r = self.session.get(url) + data = r.json() + return data + +with Lottery() as lottery: + for date in pd.date_range('2015-02-07', '2023-05-22'): + for i in range(1, 4): + sporttery = Sporttery(date.strftime('%Y-%m-%d'), page_no=i) + data = sporttery.get_match_data() + match_result_list = data["value"]["matchResult"] + for match_result in match_result_list: + lottery.insert_match(match_result["matchId"], **match_result) + if i+1 > data["value"]["resultCount"]: + continue \ No newline at end of file diff --git a/lottery/pls.py b/lottery/pls.py index ad6abba..ce27d3c 100644 --- a/lottery/pls.py +++ b/lottery/pls.py @@ -44,7 +44,7 @@ for i in sum_group6_dict.keys(): f1 = lambda number: len([i for i in number if int(i) %2 == 0]) != 0 f2 = lambda number: len([i for i in number if int(i) %2 == 1]) != 0 f3 = lambda n: True if int(n[1]) - int(n[0]) == 1 or int(n[2]) - int(n[1]) == 1 else False - f4 = lambda number: True if '4' not in number and '6' not in number else False + f4 = lambda number: True if '3' in number else False f5 = lambda number: True if '2' in number or '5' in number or '7' in number else False f6 = lambda number: True if len(set('279').difference(number)) == 2 else False if i in [12, 13, 14, 15, 16, 17]: diff --git a/model/football_match.py b/model/football_match.py index ff257bb..196098b 100644 --- a/model/football_match.py +++ b/model/football_match.py @@ -1,5 +1,5 @@ # coding: utf-8 -from sqlalchemy import Column, DateTime, Integer, String, text +from sqlalchemy import Column, Date, DateTime, Integer, String, text from sqlalchemy.dialects.mysql import VARCHAR from sqlalchemy.ext.declarative import declarative_base @@ -12,20 +12,27 @@ class FootballMatch(Base): __table_args__ = {'comment': '足球比赛表'} id = Column(Integer, primary_key=True) - issue = Column(VARCHAR(255)) - match_date = Column(DateTime, comment='比赛时间') - buy_end_time = Column(DateTime, comment='购买截至时间') - league_name = Column(String(255, 'utf8mb4_general_ci'), comment='联赛名') - home_name = Column(VARCHAR(255), comment='主队') - away_name = Column(VARCHAR(255), comment='客队') - half_score = Column(String(10, 'utf8mb4_general_ci'), comment='半场比分') - score = Column(String(10, 'utf8mb4_general_ci'), comment='全场比分') + match_id = Column(Integer, nullable=False, comment='竞彩网的比赛id') + match_num = Column(VARCHAR(50)) + match_num_str = Column(VARCHAR(50)) + match_date = Column(Date, comment='比赛时间') + league_id = Column(Integer, comment='联赛id') + league_name = Column(VARCHAR(255), comment='联赛名') + home_team_id = Column(Integer, comment='主队id') + home_name = Column(VARCHAR(255), comment='主队名') + away_team_id = Column(Integer, comment='客队id') + away_name = Column(VARCHAR(255), comment='客队名') + half_score = Column(VARCHAR(10), comment='半场比分') + score = Column(VARCHAR(10), comment='全场比分') total_goal_count = Column(Integer, comment='总进球数') result = Column(Integer, comment='结果:0 负 1 平 3 胜') rq_count = Column(Integer, comment='让球数') rq_result = Column(Integer, comment='让球结果:0 负 1 平 3 胜') + bqc_result = Column(String(10, 'utf8mb4_general_ci'), comment='半全场结果') spf_odds_ranking = Column(Integer, comment='胜平负赔率排名') bf_odds_ranking = Column(Integer, comment='比分赔率排名') bqc_odds_ranking = Column(Integer, comment='半全场赔率排名') zjq_odds_ranking = Column(Integer, comment='总进球数赔率排名') + is_single = Column(Integer, server_default=text("'0'"), comment='是否单场') created_at = Column(DateTime, server_default=text("CURRENT_TIMESTAMP")) + match_result_status = Column(Integer, comment='比赛结果状态') diff --git a/model/football_team.py b/model/football_team.py new file mode 100644 index 0000000..20dbf1e --- /dev/null +++ b/model/football_team.py @@ -0,0 +1,17 @@ +# coding: utf-8 +from sqlalchemy import Column, DateTime, Integer, text +from sqlalchemy.dialects.mysql import VARCHAR +from sqlalchemy.ext.declarative import declarative_base + +Base = declarative_base() +metadata = Base.metadata + + +class FootballTeam(Base): + __tablename__ = 'football_team' + __table_args__ = {'comment': '足球球队信息表'} + + team_id = Column(Integer, primary_key=True, comment='球队id') + team_name = Column(VARCHAR(255), comment='球队名称') + team_all_name = Column(VARCHAR(255), comment='球队全称') + created_at = Column(DateTime, server_default=text("CURRENT_TIMESTAMP"))