Add grepodata.py
This commit is contained in:
61
grepodata.py
Normal file
61
grepodata.py
Normal file
@@ -0,0 +1,61 @@
|
||||
from flask import Flask, request, jsonify
|
||||
from flask_cors import CORS
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
from datetime import datetime # ✅ minimal timestamp support
|
||||
|
||||
app = Flask(__name__)
|
||||
CORS(app)
|
||||
|
||||
def sanitize_filename(name):
|
||||
"""Remove unsafe characters from filename."""
|
||||
safe = re.sub(r'[\/:*?"<>|]', '', name)
|
||||
return safe[:50] if len(safe) > 50 else safe
|
||||
|
||||
def save_payload_as_player_file(payload):
|
||||
"""Save payload to a file named after the player, overwriting if exists."""
|
||||
try:
|
||||
player_name = payload.get("player", "default_player")
|
||||
filename = sanitize_filename(player_name) + ".json"
|
||||
|
||||
with open(filename, "w", encoding="utf-8") as f:
|
||||
json.dump(payload, f, ensure_ascii=False, indent=2)
|
||||
|
||||
print(f"📝 Payload saved to {filename}")
|
||||
except Exception as e:
|
||||
print("❌ Failed to save payload:", e)
|
||||
|
||||
@app.route('/api/grepolis-data', methods=['POST'])
|
||||
def receive_data():
|
||||
print("\n📬 New request to /api/grepolis-data")
|
||||
|
||||
try:
|
||||
payload = request.get_json(force=True)
|
||||
print("✅ Parsed JSON:", payload)
|
||||
|
||||
# Inject server-side timestamp (system time)
|
||||
payload["server_received_at"] = datetime.now().isoformat()
|
||||
|
||||
save_payload_as_player_file(payload)
|
||||
|
||||
return jsonify({
|
||||
"status": "success",
|
||||
"message": "Grepolis data received and saved",
|
||||
"server_received_at": payload["server_received_at"]
|
||||
}), 200
|
||||
|
||||
except Exception as e:
|
||||
print("❌ JSON parse error:", e)
|
||||
return jsonify({
|
||||
"status": "error",
|
||||
"message": f"Invalid JSON: {str(e)}"
|
||||
}), 400
|
||||
|
||||
@app.errorhandler(Exception)
|
||||
def handle_error(e):
|
||||
print("💥 Unhandled server error:", e)
|
||||
return jsonify({"error": str(e)}), 500
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(host='0.0.0.0', port=5000)
|
||||
Reference in New Issue
Block a user