EricSam's picture
Create app.py
1fadf37 verified
raw
history blame
1.95 kB
from flask import Flask, request, jsonify
import hmac
import hashlib
import requests
import time
from datetime import datetime
app = Flask(__name__)
# Configuration (to be moved to environment variables in production)
API_BASE_URL = "https://open-api.bingx.com"
API_KEY = "" # Replace with environment variable or secure storage
API_SECRET = "" # Replace with environment variable or secure storage
# Generate Signature
def generate_signature(api_secret, params_str):
return hmac.new(api_secret.encode("utf-8"), params_str.encode("utf-8"), hashlib.sha256).hexdigest()
# Parse Parameters
def parse_params(params):
sorted_keys = sorted(params.keys())
param_pairs = [f"{key}={params[key]}" for key in sorted_keys]
params_str = "&".join(param_pairs)
return params_str + "&timestamp=" + str(int(time.time() * 1000)) if params_str else "timestamp=" + str(int(time.time() * 1000))
# Proxy Endpoint for API Requests
@app.route('/api/proxy', methods=['GET'])
def proxy_api():
try:
endpoint = request.args.get('endpoint')
params = {key: value for key, value in request.args.items() if key != 'endpoint'}
params['recvWindow'] = params.get('recvWindow', '5000')
params_str = parse_params(params)
signature = generate_signature(API_SECRET, params_str)
url = f"{API_BASE_URL}{endpoint}?{params_str}&signature={signature}"
headers = {
'X-BX-APIKEY': API_KEY,
'Content-Type': 'application/json'
}
response = requests.get(url, headers=headers)
response.raise_for_status()
return jsonify(response.json())
except requests.exceptions.RequestException as e:
return jsonify({"error": str(e), "status_code": e.response.status_code if e.response else 500}), 500
except Exception as e:
return jsonify({"error": str(e)}), 500
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7860, debug=True)