from flask import Flask, render_template_string, jsonify, request import json import os import math from datetime import datetime, timedelta app = Flask(__name__) # Инициализация файла JSON (если файла нет – создаётся пустой список) def init_db(): if not os.path.exists('markers.json'): with open('markers.json', 'w', encoding='utf-8') as f: json.dump([], f, ensure_ascii=False, indent=4) # Загрузка меток из файла JSON def load_markers(): with open('markers.json', 'r', encoding='utf-8') as f: return json.load(f) # Сохранение меток в файл JSON def save_markers(markers): with open('markers.json', 'w', encoding='utf-8') as f: json.dump(markers, f, ensure_ascii=False, indent=4) # Получение всех меток def get_all_markers(): return load_markers() # Добавление новой метки в "базу" (JSON-файл) def add_marker_to_db(name, description, telegram_link, logo_link, latitude, longitude, delete_password): markers = load_markers() new_id = max((marker["id"] for marker in markers), default=0) + 1 new_marker = { "id": new_id, "name": name, "description": description, "telegram_link": telegram_link, "logo_link": logo_link, "latitude": latitude, "longitude": longitude, "delete_password": delete_password, "premium": 0, "premium_start_date": None } markers.append(new_marker) save_markers(markers) return new_id # Удаление метки из JSON-файла def remove_marker_from_db(marker_id): markers = load_markers() markers = [marker for marker in markers if marker["id"] != marker_id] save_markers(markers) # Активация премиум-статуса для метки def activate_premium(marker_id): markers = load_markers() current_date = datetime.now().isoformat() for marker in markers: if marker["id"] == marker_id: marker["premium"] = 1 marker["premium_start_date"] = current_date break save_markers(markers) # Проверка и сброс премиум-статуса по истечении 30 дней def check_premium_status(): markers = load_markers() updated = False for marker in markers: if marker["premium"] == 1 and marker["premium_start_date"]: premium_start_date = datetime.fromisoformat(marker["premium_start_date"]) current_date = datetime.now() if (current_date - premium_start_date).days > 30: marker["premium"] = 0 marker["premium_start_date"] = None updated = True if updated: save_markers(markers) # HTML-шаблон с футуристическим дизайном html_template = ''' GeoGram 2070

GeoGram 2070

''' # Маршрут для главной страницы @app.route('/') def index(): check_premium_status() return render_template_string(html_template) # Маршрут для получения всех меток @app.route('/get_markers') def get_markers_route(): markers = get_all_markers() # Если для метки не указан логотип, используем изображение по умолчанию for marker in markers: if not marker.get("logo_link"): marker["logo_link"] = "https://simpleicon.com/wp-content/uploads/map-marker-1.png" return jsonify(markers) # Маршрут для добавления метки @app.route('/add_marker', methods=['POST']) def add_marker(): data = request.json name = data['name'] description = data['description'] telegram_link = data['telegram_link'] logo_link = data['logo_link'] if data['logo_link'] else 'https://simpleicon.com/wp-content/uploads/map-marker-1.png' latitude, longitude = data['position'] delete_password = data['delete_password'] marker_id = add_marker_to_db(name, description, telegram_link, logo_link, latitude, longitude, delete_password) return jsonify({ 'id': marker_id, 'name': name, 'description': description, 'telegram_link': telegram_link, 'logo_link': logo_link, 'latitude': latitude, 'longitude': longitude, 'delete_password': delete_password, 'premium': 0, 'premium_start_date': None }) # Маршрут для удаления метки @app.route('/remove_marker', methods=['POST']) def remove_marker_route(): data = request.json marker_id = data['id'] remove_marker_from_db(marker_id) return jsonify({'success': True}) # Маршрут для активации премиум-статуса @app.route('/activate_premium', methods=['POST']) def activate_premium_route(): data = request.json marker_id = data['id'] activate_premium(marker_id) return jsonify({'success': True}) if __name__ == '__main__': init_db() app.run(debug=True, host='0.0.0.0', port=7860)