目的
後々にスクレイピングで分析用のレース情報取得する処理を作る為の前処理。
もっとエレガントな方法がある気がしているが、現段階では以下のルールで実装している。
- 基本的に土日開催
- 年末年始のみ特別ルール(金杯の日とホープフル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)