Python プログラミング 競馬

Pythonで中央競馬が開催される日付をリストで取得する

目的

後々にスクレイピングで分析用のレース情報取得する処理を作る為の前処理。
もっとエレガントな方法がある気がしているが、現段階では以下のルールで実装している。

  • 基本的に土日開催
  • 年末年始のみ特別ルール(金杯の日とホープフルSの日

ソースコード

#競馬開催 日付処理ライブラリ
import datetime

#定数 土日以外中央競馬開催日
WEEKDAY_RACE_DATE = ["20220105", "20221228"]
NO_RACE_DAY = ["1230", "1231", "0101", "0102"]


class lib_calendar:

    def __init__(self):

        """
        コンストラクタ 現在のところ処理無し

        Parameters
        ----------
        url: str
            netkeibaログインurl
        login_info: dict
            ログイン情報dict

        Returns
        -------
        """
        pass

    #指定した日付の範囲を返す関数、ループ処理用
    def date_range(self, start_date: datetime, end_date: datetime):
        diff = (end_date - start_date).days + 1
        return (start_date + datetime.timedelta(i) for i in range(diff))


    def get_race_event_date(self, sdate: datetime, edate: datetime) -> list:

        """
        中央競馬開催日リスト取得

        Parameters
        ----------
        sdate: datetime
            確認開始日付
        edate: datetime
            確認終了日付
        login_info: dict
            ログイン情報dict

        Returns
        -------
        開催日付(基本土日と定数で指定した日)
        "yyyymmdd"の文字列のリスト
        """

        ret_date_list = []
        range_date = self.date_range(sdate, edate)
        for atday in range_date:
            #年末年始の開催しない日は曜日関係無く除く
            chkday = atday.strftime("%m%d")
            if chkday in NO_RACE_DAY:
                continue

            nowstr = atday.strftime('%Y%m%d')
            #土日判定
            if atday.weekday() >= 5:
                ret_date_list.append(nowstr)

            #土日以外の特別開催日(定数指定。金杯とホープフルS)
            if nowstr in WEEKDAY_RACE_DATE:
                ret_date_list.append(nowstr)

        return ret_date_list




if __name__ == '__main__':
    #単体テスト用のコード (現在は処理メインはここに記載している)
    #生成するカレンダーの範囲
    sdate = datetime.date(2022, 1, 1)
    edate = datetime.date(2022, 12, 31)
    dobj = lib_calendar()
    ret = dobj.get_race_event_date(sdate, edate)
    print(ret)

-Python, プログラミング, 競馬
-,