def main(): """ メインルーチン """ # HTTPリクエスト数 http_req_num = 0 # LINEのメッセージサイズの上限 #line_max_message_size = 1000 # ファイル #path_html = 'temp_result.html' # 祝日の初期化 public_holiday = [ [], [], [], [], [], [], [], [], [], [], [], [], [] ] # 入力データの辞書の初期化 #input_data = {} # 空き予約の辞書の初期化 #reserve_name_list = {} #print(f'[reserve_name_list]') #print(f'{reserve_name_list}') #print(type(reserve_name_list)) #print(dir(reserve_name_list)) # 送信メッセージリストの初期化 message_bodies = [] # 処理の開始 # 空き予約を取得するためのURLリストの初期化 th_lock_url = ThreadLockUrlList() court_link_list = th_lock_url.court_link_list # 空き予約リストの初期化 #reserves_list = {} th_lock_list = ThreadLockReservesList() reserves_list = th_lock_list.reserves_list #print() #print(f'[reserves_list]') #print(f'{reserves_list}') #print(type(reserves_list)) #print(dir(reserves_list)) #exit() # 祝日設定ファイルを読み込んで、祝日リストを作成する reserve_tools.set_public_holiday('public_holiday.json', public_holiday) # 設定ファイルを読み込んで、設定パラメータをセットする cfg = reserve_tools.read_json_cfg('cfg2.json') # 検索リストを作成する target_months_list = reserve_tools.create_month_list(cfg) #datetime_list = create_datetime_list(target_months_list, public_holiday, cfg) date_list = reserve_tools.create_date_list(target_months_list, public_holiday, cfg) # 空き予約ページにアクセスし、cookieを取得する ( cookies, form_data ) = get_cookie(cfg) # 空き予約検索を開始する ## 指定年月日を指定して、空きコートのリンクを取得する (reserves_list, http_req_num ) = get_empty_reserves(cfg, date_list, reserves_list, court_link_list, cookies, http_req_num, th_lock_list, th_lock_url) # LINEにメッセージを送信する ## メッセージ本体を作成する reserve_tools.create_message_body(reserves_list, message_bodies, cfg) ## LINEに空き予約情報を送信する reserve_tools.send_line_notify(message_bodies, cfg) # デバッグ用(HTTPリクエスト回数を表示する) print(f'HTTP リクエスト数: {http_req_num} 回数') exit()
def main(): """ メインルーチン """ # 祝日の初期化 public_holiday = [[], [], [], [], [], [], [], [], [], [], [], [], []] # 入力データの辞書の初期化 input_data = {} # 空き予約の辞書の初期化 #reserves_list = {} threadsafe_list = ThreadSafeReservesList() # 送信メッセージリストの初期化 message_bodies = [] # WEBリクエストのヘッダー headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', } # HTTPリクエストデータ reqdata = [] # 処理の開始 # 祝日設定ファイルを読み込んで、祝日リストを作成する reserve_tools.set_public_holiday('public_holiday.json', public_holiday) # 設定ファイルを読み込んで、設定パラメータをセットする cfg = reserve_tools.read_json_cfg('cfg.json') # スレッド数を設定する threads_num = cfg['threads_num'] # 検索対象月を取得する target_months_list = reserve_tools.create_month_list(cfg) # 検索年月日時間を取得する datetime_list = create_datetime_list(target_months_list, public_holiday, cfg) # threadsに応じたcookieとフォームデータを取得する reqdata = multi_thread_prepareproc(cfg, reqdata, threads=threads_num) # threadsに応じたスレッド数で利用日時検索ページで空き予約を検索する threadsafe_list = multi_thread_datesearch(cfg, datetime_list, threadsafe_list, reqdata, threads=threads_num) # 1回目で取得できなかった空き予約検索を再実行する。再実行は1回のみに実施する ## 再試行リストが0以外なら実行する if len(retry_datetime_list) != 0: print( f'下記の検索年月日時分でシステムエラーが発生したため、再検索します。検索回数は {len(retry_datetime_list)} 回です' ) print(f'datetime list : {retry_datetime_list}') threadsafe_list = multi_thread_datesearch(cfg, retry_datetime_list, threadsafe_list, reqdata, threads=threads_num) else: print(f'システムエラーは発生しませんでした') # 送信メッセージを作成する message_bodies = reserve_tools.create_message_body( threadsafe_list.reserves_list, message_bodies, cfg) # LINEに送信する reserve_tools.send_line_notify(message_bodies, cfg)
def main(threads=5): """ メインルーチン """ # 祝日の初期化 public_holiday = [ [], [], [], [], [], [], [], [], [], [], [], [], [] ] # 入力データの辞書の初期化 input_data = {} # 空き予約の辞書の初期化 #reserves_list = {} threadsafe_list = ThreadSafeReservesList() # 送信メッセージリストの初期化 message_bodies = [] # WEBリクエストのヘッダー headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', } # HTTPリクエスト数 #http_req_num = 0 # HTTPリクエストデータ reqdata = [] # 処理の開始 # 祝日設定ファイルを読み込んで、祝日リストを作成する reserve_tools.set_public_holiday('public_holiday.json', public_holiday) # 設定ファイルを読み込んで、設定パラメータをセットする cfg = reserve_tools.read_json_cfg('cfg3.json') # 検索リストを作成する #page = 0 #is_empty = 'False' # 検索対象月を取得する target_months_list = reserve_tools.create_month_list(cfg) # 検索年月日時間を取得する datetime_list = create_datetime_list(target_months_list, public_holiday, cfg) # 予約希望日リストを取得する want_days_list = reserve_tools.create_want_date_list(target_months_list, public_holiday, cfg) exit() # cookieの取得 #( cookies, response ) = get_cookie_request(cfg) # 利用日時検索ページに移動する #response = go_to_search_date_menu(cfg, headers, cookies) # フォームデータを取得する #form_data = get_formdata(response) # 利用日時検索ページで空き予約を検索する #( reserves_list, http_req_num ) = search_empty_reserves_from_datesearch(cfg, cookies, form_data, datetime_list, reserves_list, http_req_num) # threadsに応じたcookieとフォームデータを取得する reqdata = multi_thread_prepareproc(cfg, reqdata, threads=5) threadsafe_list = multi_thread_datesearch(cfg, datetime_list, threadsafe_list, reqdata, threads=5) # 1回目で取得できなかった空き予約検索を再実行する ## 再試行リストが0以外なら実行する if len(retry_datetime_list) != 0: print(f'下記の検索年月日時分でシステムエラーが発生したため、再検索します。検索回数は {len(retry_datetime_list)} 回です') print(f'datetime list : {retry_datetime_list}') threadsafe_list = multi_thread_datesearch(cfg, retry_datetime_list, threadsafe_list, reqdata, threads=5) else: print(f'システムエラーは発生しませんでした') # 送信メッセージを作成する message_bodies = reserve_tools.create_message_body(threadsafe_list.reserves_list, message_bodies, cfg) # LINEに送信する reserve_tools.send_line_notify(message_bodies, cfg)
def main(): """ 空きコートを予約する """ """ メインルーチン """ # 祝日の初期化 public_holiday = [ [], [], [], [], [], [], [], [], [], [], [], [], [] ] # 空きコート予約の初期化 reserves_list = {} # 送信メッセージリストの初期化 message_bodies = [] # 処理の開始 # 祝日設定ファイルを読み込んで、祝日リストを作成する reserve_tools.set_public_holiday('public_holiday.json', public_holiday) # 設定ファイルを読み込んで、設定パラメータをセットする cfg = reserve_tools.read_json_cfg('cfg3.json') # 検索対象月を取得する target_months_list = reserve_tools.create_month_list(cfg) # 検索年月日時間を取得する #datetime_list = create_datetime_list(target_months_list, public_holiday, cfg) # 予約希望日リストを作成する want_date_list = reserve_tools.create_want_date_list(target_months_list, public_holiday, cfg) # ログイン前の事前準備する """ 空きコートを予約するためにログインなどの事前準備を行う 1. トップページにアクセスし、クッキーを取得する 2. トップページのフォームデータを取得する 3. ログインページにアクセスする 4. ログインページのフォームデータを取得する 5. ログインページで、ユーザーID、パスワードを入力して、マイページを表示する """ ( cookies, headers, response ) = prepare_reserve(cfg) # マイページから既存予約情報を取得する reserved_list = get_reserved_info(cfg, response) # 既存予約件数を取得する reserved_num = get_reserved_num(reserved_list) #exit() # 利用日時から探すをクリックして、検索画面に移動する response = go_to_search_date_menu_with_userid(cfg, cookies, headers) ## フォームデータを取得する form_data = get_formdata_rsvDateSearch(response) # 利用日時を入力して空きコート予約を検索する ( reserved_number, reserve ) = do_reserves_from_datesearch(cfg, cookies, form_data, "20210928", "12:00-14:00") # 予約できなかった場合はreturn を返す if reserved_number is None: print(f'could not do reseve: {reserve}') return None # 予約確定通知のメッセージを作成する message_bodies = create_reserved_message(reserved_number, reserve, message_bodies, cfg) # LINEに送信する reserve_tools.send_line_notify(message_bodies, cfg) # プログラムの終了 #exit() return None
def postproc(reserves_list): """ 空き予約リストを整形して、LINEにメッセージを送信する """ # 送信メッセージリストの初期化 message_bodies = [] # 送信メッセージを作成する message_bodies = reserve_tools.create_message_body(reserves_list, message_bodies, cfg) # LINEに送信する reserve_tools.send_line_notify(message_bodies, cfg) return None
def main(): """ メインルーチン """ # LINEのメッセージサイズの上限 line_max_message_size = 1000 # ファイル #path_html = 'temp_result.html' # 祝日の初期化 public_holiday = [[], [], [], [], [], [], [], [], [], [], [], [], []] # 空き予約リストの初期化 reserves_list = {} # 送信メッセージリストの初期化 message_bodies = [] # WEB request header headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko Chrome/85.0.4183.83 Safari/537.36' } # 処理の開始 # 祝日設定ファイルを読み込んで、祝日リストを作成する reserve_tools.set_public_holiday('public_holiday.json', public_holiday) # 設定ファイルを読み込んで、設定パラメータをセットする cfg = reserve_tools.read_json_cfg('cfg2.json') # 検索リストを作成する target_months_list = reserve_tools.create_month_list(cfg) #datetime_list = create_datetime_list(target_months_list, public_holiday, cfg) date_list = reserve_tools.create_date_list_hachioji( target_months_list, public_holiday, cfg) #print(date_list) # クローラーの初期化 (driver, mouse) = setup_driver(headers) # 空き予約ページにアクセスし、cookieを取得する #( cookies , response )= get_cookie(cfg) (cookies, response) = selenium_get_cookie(driver, cfg) # 空き状況を検索するページに移動する selenium_go_to_search_menu(driver, mouse, cfg, cookies) # 条件を指定して、空き予約を取得する reserves_list = selenium_post_conditions(driver, date_list, reserves_list, cfg) #print(type(reserves_list)) #print(dir(reserves_list)) print(reserves_list) # seleniumを終了する driver.quit() # LINEにメッセージを送信する ## メッセージ本体を作成する reserve_tools.create_message_body(reserves_list, message_bodies, cfg) ## LINEに空き予約情報を送信する reserve_tools.send_line_notify(message_bodies, cfg) exit()
def main(): """ メインルーチン """ # 変数の初期化 # 祝日の初期化 public_holiday = [ [], [], [], [], [], [], [], [], [], [], [], [], [] ] # 空きコート予約の初期化 reserves_list = {} # 送信メッセージリストの初期化 message_bodies = [] # 処理の開始 # 祝日設定ファイルを読み込んで、祝日リストを作成する reserve_tools.set_public_holiday('public_holiday.json', public_holiday) # 設定ファイルを読み込んで、設定パラメータをセットする cfg = reserve_tools.read_json_cfg('cfg3.json') # コートマップファイルを読み込む court_map = reserve_tools.read_json_cfg('court_map.json') # 検索対象月を取得する target_months_list = reserve_tools.create_month_list(cfg) #ヘッダー情報 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36' } # (TBD)予約処理の判定 ## 予約希望日リスト、希望時間帯、希望コートと空きコートリストの比較と処理の継続確認 ## 予約対象希望日+コートのリスト # 事前準備作業 ## 予約希望日を作成する ## トップページに接続 ## ログインする ## クッキーを取得する ## 既存予約リストと件数を取得する ( cookies, reserved_list, reserved_num ) = prepare_proc_for_reserve(cfg, headers) ## 予約処理の継続確認 if reserved_num >= cfg['reserved_limit']: return None # 空き予約をする ## -- forループ start ## 空き予約日+空きコート番号を指定して、コート別空き予約時間帯ページを表示する ## 予約カゴに入れる ## 予約を確定する #( reserved_number, reserve ) = do_reserve(cfg, court_map, cookies, date, time, court) ( reserved_number, reserve ) = do_reserve(cfg, court_map, cookies, 20210928, '06:00~08:00', '多摩東公園庭球場C(人工芝)') ## -- forループ: まとめて複数予約すると、1件が予約できないとその判定処理が必要で複雑になる ## LINEで通知する message_bodies = create_reserved_message(reserved_number, reserve, message_bodies, cfg) # LINEに送信する reserve_tools.send_line_notify(message_bodies, cfg) ## -- forループ end # 事後処理 return None
def main(): """ メインルーチン """ # 祝日の初期化 public_holiday = [[], [], [], [], [], [], [], [], [], [], [], [], []] # 入力データの辞書の初期化 input_data = {} # 空き予約の辞書の初期化 reserves_list = {} # 送信メッセージリストの初期化 message_bodies = [] # WEBリクエストのヘッダー headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', } # HTTPリクエスト数 #http_req_num = 0 # 処理の開始 # 祝日設定ファイルを読み込んで、祝日リストを作成する reserve_tools.set_public_holiday('public_holiday.json', public_holiday) # 設定ファイルを読み込んで、設定パラメータをセットする cfg = reserve_tools.read_json_cfg('cfg2.json') # 検索リストを作成する #page = 0 #is_empty = 'False' # 検索対象月を取得する target_months_list = reserve_tools.create_month_list(cfg) # 検索年月日時間を取得する datetime_list = create_datetime_list(target_months_list, public_holiday, cfg) #exit() # cookieの取得 (cookies, response) = get_cookie_request(cfg) # 利用日時検索ページに移動する response = go_to_search_date_menu(cfg, headers, cookies) # フォームデータを取得する form_data = get_formdata(response) # 利用日時検索ページで空き予約を検索する reserves_list = search_empty_reserves_from_datesearch( cfg, cookies, form_data, datetime_list, reserves_list) # 送信メッセージを作成する message_bodies = reserve_tools.create_message_body(reserves_list, message_bodies, cfg) # LINEに送信する reserve_tools.send_line_notify(message_bodies, cfg) # 評価用 return None
def main(): """ メインルーチン """ # LINEのメッセージサイズの上限 #line_max_message_size = 1000 # ファイル #path_html = 'temp_result.html' # 祝日の初期化 public_holiday = [ [], [], [], [], [], [], [], [], [], [], [], [], [] ] # 入力データの辞書の初期化 #input_data = {} # 空き予約の辞書の初期化 #reserve_name_list = {} # 送信メッセージリストの初期化 message_bodies = [] # 処理の開始 # 空き予約リストの初期化 reserves_list = {} # 祝日設定ファイルを読み込んで、祝日リストを作成する reserve_tools.set_public_holiday('public_holiday.json', public_holiday) # 設定ファイルを読み込んで、設定パラメータをセットする cfg = reserve_tools.read_json_cfg('cfg2.json') # 検索リストを作成する target_months_list = reserve_tools.create_month_list(cfg) #datetime_list = create_datetime_list(target_months_list, public_holiday, cfg) date_list = reserve_tools.create_date_list_chofu(target_months_list, public_holiday, cfg) target_year_month_list = reserve_tools.create_year_month_list(target_months_list) print(target_year_month_list) # 空き予約ページにアクセスし、cookieを取得する ( cookies , response )= get_cookie(cfg) # 検索方法選択ページ、施設リストページにアクセスする ( response, pre_url ) = go_to_search_menu(cfg, cookies, response) # 空き予約検索を開始する reserves_list = get_reserves(cfg, target_year_month_list, date_list, reserves_list, cookies, response, pre_url) #reserves_list = dict(reserves_list) #print(type(reserves_list)) #print(dir(reserves_list)) print(reserves_list) # LINEにメッセージを送信する ## メッセージ本体を作成する message_bodies = reserve_tools.create_message_body(reserves_list, message_bodies, cfg) ## LINEに空き予約情報を送信する reserve_tools.send_line_notify(message_bodies, cfg)
def main(): """ メインルーチン """ # LINEのメッセージサイズの上限 #line_max_message_size = 1000 # ファイル #path_html = 'temp_result.html' # 祝日の初期化 public_holiday = [[], [], [], [], [], [], [], [], [], [], [], [], []] # 入力データの辞書の初期化 #input_data = {} # 空き予約の辞書の初期化 #reserve_name_list = {} # 送信メッセージリストの初期化 message_bodies = [] # 処理の開始 # 空き予約リストの初期化 reserves_list = {} # 祝日設定ファイルを読み込んで、祝日リストを作成する reserve_tools.set_public_holiday('public_holiday.json', public_holiday) # 設定ファイルを読み込んで、設定パラメータをセットする cfg = reserve_tools.read_json_cfg('cfg2.json') # 検索リストを作成する target_months_list = reserve_tools.create_month_list(cfg) #datetime_list = create_datetime_list(target_months_list, public_holiday, cfg) date_list = reserve_tools.create_date_list(target_months_list, public_holiday, cfg) # 空き予約ページにアクセスし、cookieを取得する (cookies, form_data) = get_cookie(cfg) # 空き予約検索を開始する ## 指定年月日を指定して、空きコートのリンクを取得する reserves_list = get_empty_reserves(cfg, date_list, reserves_list, cookies) # LINEにメッセージを送信する ## メッセージ本体を作成する reserve_tools.create_message_body(reserves_list, message_bodies, cfg) ## LINEに空き予約情報を送信する reserve_tools.send_line_notify(message_bodies, cfg) exit()
def main(): """ メインルーチン """ # 祝日の初期化 public_holiday = [[], [], [], [], [], [], [], [], [], [], [], [], []] # 空き予約リストの初期化 #reserves_list = {} threadsafe_list = ThreadSafeReservesList() # 送信メッセージリストの初期化 message_bodies = [] # WEB request header headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko Chrome/85.0.4183.83 Safari/537.36' } # 処理の開始 # 祝日設定ファイルを読み込んで、祝日リストを作成する reserve_tools.set_public_holiday('public_holiday.json', public_holiday) # 設定ファイルを読み込んで、設定パラメータをセットする cfg = reserve_tools.read_json_cfg('cfg.json') # ロギングを設定する logger = reserve_tools.mylogger(cfg) # スレッド数を設定する threads_num = cfg['threads_num'] # 検索リストを作成する target_months_list = reserve_tools.create_month_list(cfg, logger=logger) logger.debug(f'target months: {target_months_list}') date_list = reserve_tools.create_date_list_hachioji(target_months_list, public_holiday, cfg, logger=logger) logger.debug(f'date list: {date_list}') # スレッド数に応じて、date_listを分割する date_list_threads = split_date_list(date_list, threads_num, logger=logger) logger.debug(f'splited date list: {date_list_threads}') #return logger # マルチスレッド化する ## ここから # クローラーの初期化 #( driver, mouse ) = setup_driver(headers) # 空き予約ページにアクセスし、cookieを取得する #( cookies , response )= get_cookie(cfg) #( cookies , response )= selenium_get_cookie(driver, cfg) # 空き状況を検索するページに移動する #selenium_go_to_search_menu(driver, mouse, cfg, cookies) # 条件を指定して、空き予約を取得する #reserves_list = selenium_post_conditions(driver, date_list, reserves_list, cfg) #logger.debug(type(reserves_list)) #logger.debug(dir(reserves_list)) # seleniumを終了する #driver.quit() ## ここまで # マルチスレッドで呼び出す threadsafe_list = multi_thread_datesearch(cfg, headers, date_list_threads, threadsafe_list, threads_num=threads_num, logger=logger) logger.info( json.dumps(threadsafe_list.reserves_list, indent=2, ensure_ascii=False)) #exit() # LINEにメッセージを送信する ## メッセージ本体を作成する reserve_tools.create_message_body(threadsafe_list.reserves_list, message_bodies, cfg, logger=logger) ## LINEに空き予約情報を送信する reserve_tools.send_line_notify(message_bodies, cfg, logger=logger) #exit() return logger
def lambda_handler(event, context): """ メインルーチン """ # 祝日の初期化 public_holiday = [[], [], [], [], [], [], [], [], [], [], [], [], []] # 入力データの辞書の初期化 input_data = {} # 空き予約名リストの初期化 court_empty_reserves_list = {} #selected_reserve_name_list = {} reserves_list = {} # 送信メッセージの初期化 message_bodies = [] # WEBリクエストのヘッダー headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36', } # 処理の開始 # /tmpファイルに設定ファイルがあるか確認し、なければS3からファイルをダウンロードする is_exist_files( 'nissy-jp-input', 'webscribe/tennis_reserve_search/martgd/cfg.json', 'webscribe/tennis_reserve_search/common/public_holiday.json') # 祝日設定ファイルを読み込んで、祝日リストを作成する reserve_tools.set_public_holiday('/tmp/public_holiday.json', public_holiday) # 設定ファイルを読み込んで、設定パラメータをセットする cfg = reserve_tools.read_json_cfg('/tmp/cfg.json') # ロギングを設定する logger = reserve_tools.mylogger(cfg) # 検索対象月のリストを作成する target_months_list = reserve_tools.create_month_list(cfg) # 検索対象の開始日と終了日のリストを作成する input_data_date = create_inputdate(target_months_list, logger=logger) # 検索データを作成する input_data = create_inputdata(cfg, input_data_date, logger=logger) # フィルターリストを作成する date_string_list = reserve_tools.create_date_list(target_months_list, public_holiday, cfg) #logger.info(date_string_list) # 空き予約ページのトップページにアクセスし、cookieを取得する (cookies, response) = get_cookie(cfg) # 検索データを入力して、空き予約を検索する court_empty_reserves_list = do_search_empty_reserve( cfg, cookies, response, input_data, court_empty_reserves_list, logger=logger) #logger.info(court_empty_reserves_list) # 空き予約名リストから希望曜日の希望時間帯のみを抽出したリストを作成する reserves_list = create_selected_reserve_list(court_empty_reserves_list, reserves_list, cfg, date_string_list, logger=logger) #logger.info(reserves_list) #exit() # 送信メッセージ本体を作成する message_bodies = reserve_tools.create_message_body(reserves_list, message_bodies, cfg, logger=logger) # LINE Notifyに空き予約情報のメッセージを送信する reserve_tools.send_line_notify(message_bodies, cfg, logger=logger) # 終了する #exit() return {'status': 200, 'body': 'Completed'}