EricSam commited on
Commit
1fadf37
Β·
verified Β·
1 Parent(s): 3239f0b

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +53 -0
app.py ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, request, jsonify
2
+ import hmac
3
+ import hashlib
4
+ import requests
5
+ import time
6
+ from datetime import datetime
7
+
8
+ app = Flask(__name__)
9
+
10
+ # Configuration (to be moved to environment variables in production)
11
+ API_BASE_URL = "https://open-api.bingx.com"
12
+ API_KEY = "" # Replace with environment variable or secure storage
13
+ API_SECRET = "" # Replace with environment variable or secure storage
14
+
15
+ # Generate Signature
16
+ def generate_signature(api_secret, params_str):
17
+ return hmac.new(api_secret.encode("utf-8"), params_str.encode("utf-8"), hashlib.sha256).hexdigest()
18
+
19
+ # Parse Parameters
20
+ def parse_params(params):
21
+ sorted_keys = sorted(params.keys())
22
+ param_pairs = [f"{key}={params[key]}" for key in sorted_keys]
23
+ params_str = "&".join(param_pairs)
24
+ return params_str + "&timestamp=" + str(int(time.time() * 1000)) if params_str else "timestamp=" + str(int(time.time() * 1000))
25
+
26
+ # Proxy Endpoint for API Requests
27
+ @app.route('/api/proxy', methods=['GET'])
28
+ def proxy_api():
29
+ try:
30
+ endpoint = request.args.get('endpoint')
31
+ params = {key: value for key, value in request.args.items() if key != 'endpoint'}
32
+ params['recvWindow'] = params.get('recvWindow', '5000')
33
+
34
+ params_str = parse_params(params)
35
+ signature = generate_signature(API_SECRET, params_str)
36
+ url = f"{API_BASE_URL}{endpoint}?{params_str}&signature={signature}"
37
+
38
+ headers = {
39
+ 'X-BX-APIKEY': API_KEY,
40
+ 'Content-Type': 'application/json'
41
+ }
42
+
43
+ response = requests.get(url, headers=headers)
44
+ response.raise_for_status()
45
+ return jsonify(response.json())
46
+
47
+ except requests.exceptions.RequestException as e:
48
+ return jsonify({"error": str(e), "status_code": e.response.status_code if e.response else 500}), 500
49
+ except Exception as e:
50
+ return jsonify({"error": str(e)}), 500
51
+
52
+ if __name__ == '__main__':
53
+ app.run(host='0.0.0.0', port=7860, debug=True)