-
Notifications
You must be signed in to change notification settings - Fork 0
/
apps.py
97 lines (77 loc) · 3.06 KB
/
apps.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import os
from flask import Blueprint, Flask, abort, jsonify, make_response, render_template, request
from flask_cors import CORS
from flask_restx import Api, Resource
import main
app = Flask(__name__)
app.config['JSON_SORT_KEYS'] = False
CORS(app)
api_bp = Blueprint("api2", __name__, url_prefix="/api2/")
description = "PredictStarNumber API\n" \
"GitHub : https://github.com/rakkyo150/PredictStarNumber\n" \
"Training Data : https://github.com/rakkyo150/RankedMapData\n" \
"Model : https://github.com/rakkyo150/PredictStarNumberHelper\n" \
"Mod : https://github.com/rakkyo150/PredictStarNumberMod\n" \
"Chrome Extension : https://github.com/rakkyo150/PredictStarNumberExtension"
api = Api(api_bp, version='1.2.0', title="PredictStarNumber", description=description, doc='/doc',
default="Main", default_label="Main API", base_url='/',
license_url="https://github.com/rakkyo150/PredictStarNumber/blob/master/LICENSE")
app.register_blueprint(api_bp)
instance = main.Main()
@app.route('/', methods=['GET'])
def index():
return render_template('index.html')
@app.route('/init', methods=['POST'])
def init():
if request.method == 'POST':
instance.initModel()
return "OK"
@app.route('/predict', methods=['POST'])
def predict():
if request.method == 'POST':
mode = request.form['mode']
input = request.form['input']
result = instance.predict(mode, input, 2)
return result
@api.route('/id/<string:id>')
@api.doc(params={'id': 'map id(!bsr)'})
class Api2Id(Resource):
@api.doc(responses={200: "Success", 404: "Error"})
def get(self, id):
if request.method == 'GET':
try:
result = instance.predict("!bsr", id, 2)
except:
abort(404)
return make_response(jsonify(result))
@api.route('/hash/<string:hash>')
@api.doc(params={'hash': 'map hash'})
class Api2Hash(Resource):
@api.doc(responses={200: "Success", 404: "Error"})
def get(self, hash):
if request.method == 'GET':
try:
result = instance.predict("hash", hash, 2)
except:
abort(404)
return make_response(jsonify(result))
@api.route('/leaderboardId/<string:leaderboardId>')
@api.doc(params={'leaderboardId': 'score saber leaderboard id'})
class Api2LeaderboardId(Resource):
@api.doc(responses={200: "Success", 404: "Error"})
def get(self, leaderboardId):
if request.method == 'GET':
print(f"leaderboardId : {leaderboardId}")
try:
result = instance.predict("leaderboardId", leaderboardId, 2)
except:
abort(404)
return make_response(jsonify(result))
@app.errorhandler(404)
def not_found(error):
return make_response(jsonify({'error': 'Not Found'}), 404)
if __name__ == "__main__":
port = int(os.environ.get("PORT", 5000))
app.run(host='0.0.0.0', port=port)
# For local run, comment out above code and uncomment below code
# app.run(port=port)