diff --git a/frontend_deploy/mapuino.html b/frontend_deploy/mapuino.html index e69de29..a0f500d 100644 --- a/frontend_deploy/mapuino.html +++ b/frontend_deploy/mapuino.html @@ -0,0 +1,19 @@ + + + + + Mapuino + + + + + +

Hello Mapuino

+ + + \ No newline at end of file diff --git a/master/amap_api.py b/master/amap_api.py new file mode 100644 index 0000000..0d29772 --- /dev/null +++ b/master/amap_api.py @@ -0,0 +1,16 @@ +import requests +import json + +amap_api_key = "xxxxxxxxxxxxxxxxxxxxx" + +def ip2province(ip_address): + r = requests.get(f"https://restapi.amap.com/v3/ip?ip={ip_address}&output=json&key={amap_api_key}") + if r.status_code != 200: + return "error" + data = json.loads(r.text) + if data["status"] != "1": + return "error" + elif data["province"] == []: + return "world" + else: + return data["province"] diff --git a/master/main.py b/master/main.py index fa943cd..47b5ebd 100644 --- a/master/main.py +++ b/master/main.py @@ -1,37 +1,58 @@ from flask import Flask from flask import request from flask import jsonify +from amap_api import ip2province +from province2bitmap import province2bitmap MapuinoApp = Flask(__name__) -database = { - "ffffffff-ffff-ffff-ffff-ffffffffffff": { - "DATA0": 0xffffffff, - "DATA1": 0xffffffff, - } -} +database = {} -@MapuinoApp.route("/frontendAPI", methods=['POST']) +@MapuinoApp.route("/frontendAPI", methods=['GET']) def putdate(): - if request.method == 'POST': - new_data = { - 'DATA0': 0xffffffff, - 'DATA1': 0xffffffff, - } - database[request.form['UUID']] = new_data + if request.method == 'GET': + print(request) + if request.headers.getlist("X-Forwarded-For"): + request_ip = request.headers.getlist("X-Forwarded-For")[0] + else: + return "NO_IP_ADDR" + print(request_ip) + province = ip2province(request_ip) + if province == "error": + return "IP_ADDR_ERROR" + + bitmap = province2bitmap(province[:2]) + print(bitmap) + segment = bitmap[0] + bit = bitmap[1] + + if not(request.args.get('UUID') in database): + database[request.args.get('UUID')] = { + "SEG0": 0x00000000, + "SEG1": 0x00000000, + } + + if segment == 0: + database[request.args.get('UUID')]["SEG0"] |= (1 << bit) + else: + database[request.args.get('UUID')]["SEG1"] |= (1 << bit) + return "OK" @MapuinoApp.route("/hardwareAPI", methods=['GET']) def getdata(): if request.method == 'GET': try: - print(request.args.get('UUID')) resp = database[request.args.get('UUID')] resp['CODE'] = 0 + resp_json = jsonify(resp) + database[request.args.get('UUID')]["SEG0"] = 0x00000000 + database[request.args.get('UUID')]["SEG1"] = 0x00000000 except Exception as e: print(e) - resp = {'CODE': 1} - return jsonify(resp) + resp_json = jsonify({'CODE': 1}) + + return resp_json if __name__ == "__main__": MapuinoApp.run("0.0.0.0", 7767) diff --git a/master/province2bitmap.py b/master/province2bitmap.py new file mode 100644 index 0000000..2e6bac8 --- /dev/null +++ b/master/province2bitmap.py @@ -0,0 +1,43 @@ +data_map = { + "新疆": (0, 0), + "黑龙": (0, 2), + "辽宁": (0, 4), + "天津": (0, 6), + "甘肃": (0, 8), + "陕西": (0, 10), + "河北": (0, 12), + "河南": (0, 14), + "四川": (0, 16), + "湖北": (0, 18), + "江苏": (0, 20), + "贵州": (0, 22), + "江西": (0, 24), + "上海": (0, 26), + "广东": (0, 28), + "海南": (0, 30), + "香港": (1, 0), + "World": (1, 2), + "内蒙": (0, 1), + "吉林": (0, 3), + "北京": (0, 5), + "青海": (0, 7), + "宁夏": (0, 9), + "山西": (0, 11), + "山东": (0, 13), + "西藏": (0, 15), + "重庆": (0, 17), + "安徽": (0, 19), + "云南": (0, 21), + "湖南": (0, 23), + "浙江": (0, 25), + "广西": (0, 27), + "福建": (0, 29), + "澳门": (0, 31), + "台湾": (1, 1), +} + +def province2bitmap(province_name): + try: + return data_map[province_name] + except KeyError: + return data_map["World"]