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():
    """
    メインルーチン
    """
    # 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(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 = [[], [], [], [], [], [], [], [], [], [], [], [], []]
    # 入力データの辞書の初期化
    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)
Example #5
0
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()
Example #6
0
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():
    """
    メインルーチン
    """
    # 祝日の初期化
    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 create_reserved_message(reserved_number, reserve, message_bodies, cfg):
    """
    予約確定通知用のメッセージボディーを作成する
    """
    # メッセージ本文の文頭を作成する
    _body = f'\n予約が確定しました。マイページで確認してください。\n'
    _body = f'{_body}予約番号: {reserved_number}\n'
    # 予約リストを与えて、取得した予約情報を追記する
    message_bodies = reserve_tools.create_message_body(reserve, message_bodies, cfg)
    # message_bodiesリストの最初の要素が予約情報なので、これを文頭と結合する
    _reserve_info = message_bodies[0]
    _body = f'{_body}{_reserve_info}'
    # message_bodiesリストの最初の要素を書き換える
    message_bodies[0] = f'{_body}'
    return message_bodies
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():
    """
    メインルーチン
    """
    # 祝日の初期化
    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'}