예제 #1
0
def lambda_handler(event, context):
    try:
        # パラム取得
        dated = event["queryStringParameters"]["dated"]

        # 本日のレース場取得
        db_client = dbaccess.Dbaccess()
        l_d_place = db_client.execute_select(sql.Sql.select_W_PLACE_by_dated,
                                             [dated])

        # 0件だった場合、スクレイピング → INSERT
        # 成功した場合、画面表示用にレース場を再セット
        if len(l_d_place) == 0:
            flg_scraped_insert = scraped_insert(db_client, dated)
            if flg_scraped_insert:
                l_d_place = db_client.execute_select(
                    sql.Sql.select_W_PLACE_by_dated, [dated])

        # 0件だった場合、エラー
        if len(l_d_place) == 0:
            err_msg = message.Message.err5
            raise Exception(err_msg)

        db_client.commit()

        # レスポンス
        return {
            "headers": {
                "Access-Control-Allow-Origin": "*",
                "Access-Control-Allow-Credentials": "true"
            },
            'statusCode': 200,
            'body': json.dumps({"place": l_d_place})
        }

    except Exception as e:
        print(str(e))
        # レスポンス
        return {
            "headers": {
                "Access-Control-Allow-Origin": "*",
                "Access-Control-Allow-Credentials": "true"
            },
            'statusCode': 400,
            'body': json.dumps(str(e))
        }

    finally:
        del db_client
예제 #2
0
def lambda_handler(event, context):
    try:

        db_client = dbaccess.Dbaccess()

        # 月次処理ログテーブルから対象レース取得
        l_d_target = db_client.execute_select(sql.Sql.select_T_MONTHLY_LOG2,
                                              [])

        for d_target in l_d_target:

            l_race_key = [d_target["開催日"], d_target["レース場"], d_target["ラウンド"]]

            # 予測レース情報取得
            l_d_race_head = db_client.execute_select(
                sql.Sql.select_T_RACE_HEAD, l_race_key)
            l_d_race_info = db_client.execute_select(
                sql.Sql.select_T_RACE_INFO, l_race_key)

            # 分析方法をDBから取得
            l_d_anaylize_model = db_client.execute_select(
                sql.Sql.select_M_ANAYLIZE_MODEL, [])

            # 分析実行
            try:
                for d_anaylize_model in l_d_anaylize_model:
                    anaylize_rule2(d_anaylize_model, db_client, l_d_race_head,
                                   l_d_race_info, l_race_key)

            except Exception as e:
                print(str(e))

            # 月次処理ログテーブルを更新
            l_param = [2, None] + l_race_key
            db_client.execute_update(sql.Sql.update_T_MONTHLY_LOG, l_param)

            db_client.commit()

        # レスポンス
        return {'statusCode': 200, 'body': json.dumps("ok")}

    except Exception as e:
        print(str(e))
        # レスポンス
        return {'statusCode': 400, 'body': json.dumps("ng")}

    finally:
        del db_client
예제 #3
0
def lambda_handler(event, context):
    try:

        # テーブルデータ再作成
        db_client = dbaccess.Dbaccess()
        db_client.execute_delete(sql.Sql.delete_W_MONTHLY_RACER, [])
        db_client.execute_insert(sql.Sql.insert_W_MONTHLY_RACER, [])
        db_client.commit()

        # レスポンス
        return {'statusCode': 200, 'body': json.dumps("ok")}

    except Exception as e:
        print(str(e))
        # レスポンス
        return {'statusCode': 400, 'body': json.dumps("ng")}

    finally:
        del db_client
예제 #4
0
def lambda_handler(event, context):
    try:
        ## 先月の全部の日付を配列に格納する
        l_dated = []
        # 今日を取得
        today = datetime.datetime.today()
        # 当月1日の値を出す
        thismonth = datetime.datetime(today.year, today.month, 1)
        # 前月末日の値を出す
        lastmonth = thismonth + datetime.timedelta(days=-1)
        # 配列に格納
        yyyymm = lastmonth.strftime("%Y-%m-")
        dd = lastmonth.strftime("%d")
        for i in range(int(dd)):
            l_dated.append(yyyymm + ("0"+str(i+1))[-2:])

        # 先月の全部の日付をスクレイピング → 開催していたらINSERT
        db_client = dbaccess.Dbaccess()
        for dated in l_dated:
            scraped_insert(db_client, dated)

        db_client.commit()

        # レスポンス
        return {
            'statusCode': 200,
            'body': json.dumps("ok")
        }

    except Exception as e:
        print(str(e))
        # レスポンス
        return {
            'statusCode': 400,
            'body': json.dumps("ng")
        }

    finally:
        del db_client
예제 #5
0
def lambda_handler(event, context):
    try:
        # 月次処理対象を取得
        db_client = dbaccess.Dbaccess()
        l_d_target = db_client.execute_select(sql.Sql.select_T_MONTHLY_LOG, [])

        # 処理対象分ループ
        for d_target in l_d_target:
            l_race_key = [d_target["開催日"], d_target["レース場"], d_target["ラウンド"]]
            print(l_race_key)
            # スクレイピング → INSERTをし、エラーメッセージ取得
            err_msg = scraped_insert_info(db_client, l_race_key)
            if err_msg == "":
                err_msg = scraped_insert_result(db_client, l_race_key)
                if err_msg == "":
                    l_param = [1, None] + l_race_key
                else:
                    db_client.rollback()
                    l_param = [92, err_msg] + l_race_key
            else:
                db_client.rollback()
                l_param = [91, err_msg] + l_race_key

            db_client.execute_update(sql.Sql.update_T_MONTHLY_LOG, l_param)
            # 1処理ずつコミットする
            db_client.commit()

        # レスポンス
        return {'statusCode': 200, 'body': json.dumps("ok")}

    except Exception as e:
        print(str(e))
        # レスポンス
        return {'statusCode': 400, 'body': json.dumps("ng")}

    finally:
        del db_client
예제 #6
0
def lambda_handler(event, context):
    try:
        # パラム取得
        dated = event["queryStringParameters"]["dated"]
        place = event["queryStringParameters"]["place"]
        round = event["queryStringParameters"]["round"]
        l_race_key = [dated, place, round]

        # レース情報取得(レース当日の情報取得のため、作業用テーブルを検索する)
        db_client = dbaccess.Dbaccess()
        l_d_race_head = db_client.execute_select(
            sql.Sql.select_W_RACE_HEAD_for_view, l_race_key)
        l_d_race_info = db_client.execute_select(
            sql.Sql.select_W_RACE_INFO_for_view, l_race_key)

        # 0件だった場合、試走タイムが出ていなかった場合、DELETE → スクレイピング → INSERT
        # 成功した場合、画面表示用にレース情報を再セット
        if check_exist_data(l_d_race_head, l_d_race_info) == False:
            db_client.execute_delete(sql.Sql.delete_W_RACE_HEAD_by_racekey,
                                     l_race_key)
            db_client.execute_delete(sql.Sql.delete_W_RACE_INFO_by_racekey,
                                     l_race_key)
            flg_scraped_insert = scraped_insert(db_client, l_race_key)
            if flg_scraped_insert:
                l_d_race_head = db_client.execute_select(
                    sql.Sql.select_W_RACE_HEAD_for_view, l_race_key)
                l_d_race_info = db_client.execute_select(
                    sql.Sql.select_W_RACE_INFO_for_view, l_race_key)
            else:
                err_msg = message.Message.err2.format(place, round)
                raise Exception(err_msg)

        # 0件だった場合、試走タイムが出ていなかった場合、エラー
        if check_exist_data(l_d_race_head, l_d_race_info) == False:
            err_msg = message.Message.err3
            raise Exception(err_msg)

        # スクレイピング完了後いったんコミット
        db_client.commit()

        # 分析済みレースか確認
        l_d_anaylize_result = db_client.execute_select(
            sql.Sql.select_W_ANAYLIZE_RESULT_RANK_for_view, l_race_key)
        l_d_anaylize_result_detail = db_client.execute_select(
            sql.Sql.select_W_ANAYLIZE_RESULT_VALUE_for_view, l_race_key)
        if len(l_d_anaylize_result) == 0:
            # 分析方法をDBから取得
            l_d_anaylize_model = db_client.execute_select(
                sql.Sql.select_M_ANAYLIZE_MODEL, [])
            # 分析実行
            try:
                for d_anaylize_model in l_d_anaylize_model:
                    if d_anaylize_model["アルゴリズム"] == "Union":
                        anaylize_rule1(d_anaylize_model, db_client,
                                       l_d_race_head, l_d_race_info,
                                       l_race_key)
                    else:
                        anaylize_rule2(d_anaylize_model, db_client,
                                       l_d_race_head, l_d_race_info,
                                       l_race_key)
                # 画面表示用に再セット
                l_d_anaylize_result = db_client.execute_select(
                    sql.Sql.select_W_ANAYLIZE_RESULT_RANK_for_view, l_race_key)
                l_d_anaylize_result_detail = db_client.execute_select(
                    sql.Sql.select_W_ANAYLIZE_RESULT_VALUE_for_view,
                    l_race_key)
            except Exception as e:
                print(str(e))
                # 該当する訓練データが存在しないことが原因のExceptionはここで
                if str(e) == "'競争タイム'":
                    err_msg = message.Message.err8
                else:
                    err_msg = message.Message.err4
                raise Exception(err_msg)

        db_client.commit()

        # レスポンス
        return {
            "headers": {
                "Access-Control-Allow-Origin": "*",
                "Access-Control-Allow-Credentials": "true"
            },
            'statusCode':
            200,
            'body':
            json.dumps({
                "race_head": l_d_race_head,
                "race_info": l_d_race_info,
                "anaylize": l_d_anaylize_result,
                "anaylize_detail": l_d_anaylize_result_detail
            })
        }

    except Exception as e:
        print(str(e))
        # レスポンス
        return {
            "headers": {
                "Access-Control-Allow-Origin": "*",
                "Access-Control-Allow-Credentials": "true"
            },
            'statusCode': 400,
            'body': json.dumps(str(e))
        }

    finally:
        del db_client
예제 #7
0
def lambda_handler(event, context):
    try:
        # パラム取得
        dated = event["queryStringParameters"]["dated"]
        place = event["queryStringParameters"]["place"]
        round = event["queryStringParameters"]["round"]
        l_race_key = [dated, place, round]

        # レース情報取得(レース当日の情報取得のため、作業用テーブルを検索する)
        db_client = dbaccess.Dbaccess()
        l_d_race_head = db_client.execute_select(
            sql.Sql.select_W_RACE_HEAD_for_view, l_race_key)
        l_d_race_info = db_client.execute_select(
            sql.Sql.select_W_RACE_INFO_for_view, l_race_key)

        # 0件だった場合、試走タイムが出ていなかった場合、DELETE → スクレイピング → INSERT
        # 成功した場合、画面表示用にレース情報を再セット
        if check_exist_data(l_d_race_head, l_d_race_info) == False:
            db_client.execute_delete(sql.Sql.delete_W_RACE_HEAD_by_racekey,
                                     l_race_key)
            db_client.execute_delete(sql.Sql.delete_W_RACE_INFO_by_racekey,
                                     l_race_key)
            flg_scraped_insert = scraped_insert(db_client, l_race_key)
            if flg_scraped_insert:
                l_d_race_head = db_client.execute_select(
                    sql.Sql.select_W_RACE_HEAD_for_view, l_race_key)
                l_d_race_info = db_client.execute_select(
                    sql.Sql.select_W_RACE_INFO_for_view, l_race_key)

        # 0件だった場合、エラー(ここでは試走タイム等の情報がなくてもOK)
        if len(l_d_race_head) == 0 or len(l_d_race_info) == 0:
            err_msg = message.Message.err2.format(place, round)
            raise Exception(err_msg)

        db_client.commit()

        # レスポンス
        return {
            "headers": {
                "Access-Control-Allow-Origin": "*",
                "Access-Control-Allow-Credentials": "true"
            },
            'statusCode':
            200,
            'body':
            json.dumps({
                "race_head": l_d_race_head,
                "race_info": l_d_race_info
            })
        }

    except Exception as e:
        print(str(e))
        # レスポンス
        return {
            "headers": {
                "Access-Control-Allow-Origin": "*",
                "Access-Control-Allow-Credentials": "true"
            },
            'statusCode': 400,
            'body': json.dumps(str(e))
        }

    finally:
        del db_client