from flask import Flask, request, render_template_string, render_template import requests import os import pytz import datetime import sqlite3 base_url = os.getenv('base_url') # URL сервера token = os.getenv('token') # Ваш токен api_key = os.getenv('api_key') # Ваш API ключ datas = '0' name = '0' email = '0' phone = '0' list_id_1 = 560768 list_id_2 = 560832 list_id_3 = 560833 app = Flask(__name__, template_folder="./") def init_db(): conn = sqlite3.connect('data.db') cursor = conn.cursor() cursor.execute(''' CREATE TABLE IF NOT EXISTS contacts ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, email TEXT, phone TEXT, pr1 TEXT, pr2 TEXT, pr3 TEXT, pr4 TEXT, pr5 TEXT, date TEXT, time TEXT ) ''') conn.commit() conn.close() init_db() def save_to_database(name, email, phone, pr5, pr4, pr3, pr2, pr1): try: moscow_timezone = pytz.timezone('Europe/Moscow') current_datetime = datetime.datetime.now(moscow_timezone) date = current_datetime.strftime('%Y-%m-%d') time = current_datetime.strftime('%H:%M:%S') conn = sqlite3.connect('data.db') cursor = conn.cursor() cursor.execute(''' INSERT INTO contacts (name, email, phone, pr1, pr2, pr3, pr4, pr5, date, time) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ''', (name, email, phone, pr1, pr2, pr3, pr4, pr5, date, time)) conn.commit() conn.close() except Exception as e: print(f"Error saving to database: {e}") def send_request(list_id, email, phone, name, param_name, param_phone, pr5, pr4, pr3, pr2, pr1, pr5_id, pr4_id, pr3_id, pr2_id, pr1_id): """Функция для отправки запроса на сервер.""" data = { "email": email, "unconfirmed": False, "values": [ { "parameter_id": pr5_id, "kind": "string", "list_id": list_id, "title": "pr5", "value": pr5 }, { "parameter_id": pr4_id, "kind": "string", "list_id": list_id, "title": "pr4", "value": pr4 }, { "parameter_id": pr3_id, "kind": "string", "list_id": list_id, "title": "pr3", "value": pr3 }, { "parameter_id": pr2_id, "kind": "string", "list_id": list_id, "title": "pr2", "value": pr2 }, { "parameter_id": pr1_id, "kind": "string", "list_id": list_id, "title": "pr1", "value": pr1 }, { "parameter_id": param_phone, "kind": "string", "list_id": list_id, "title": "phone", "value": phone }, { "parameter_id": param_name, "kind": "string", "list_id": list_id, "title": "name", "value": name } ] } headers = { 'Authorization': f'Bearer {token}', 'Content-Type': 'application/json' } response = requests.post(f"{base_url}/email/lists/{list_id}/recipients", json=data, headers=headers) return response.json() @app.route('/incoming', methods=['POST']) def handle_incoming_request(): datas = request.json name = datas.get('name') email = datas.get('email') phone = datas.get('phone') pr5 = datas.get('pr5') pr4 = datas.get('pr4') pr3 = datas.get('pr3') pr2 = datas.get('pr2') pr1 = datas.get('pr1') # Сохраняем данные в базу данных SQLite3 save_to_database(name, email, phone, pr5, pr4, pr3, pr2, pr1) # Устанавливаем временную зону Москвы moscow_timezone = pytz.timezone('Europe/Moscow') # Получаем текущую дату и время в Московском времени current_datetime = datetime.datetime.now(moscow_timezone) # Получаем текущий день недели и час в Московском времени current_day = current_datetime.weekday() # 0 - Понедельник, ..., 6 - Воскресенье current_hour = current_datetime.hour if current_day in [0, 4, 5, 6]: # Понедельник, Пятница, Суббота, Воскресенье # Отправляем запросы в листы подряд response_1 = send_request(560768, email, phone, name, 393120, 393119, pr5, pr4, pr3, pr2, pr1, 393248, 393247, 393246, 393245, 393244) response_2 = send_request(560832, email, phone, name, 393196, 393195, pr5, pr4, pr3, pr2, pr1, 393267, 393266, 393265, 393264, 393263) response_3 = send_request(560833, email, phone, name, 393198, 393197, pr5, pr4, pr3, pr2, pr1, 393272, 393271, 393270, 393269, 393268) # Возвращаем список ответов return {'responses': [response_1,response_2,response_3]} elif current_day == 1: # Вторник if current_hour < 19: # Утром во вторник response_1 = send_request(560768, email, phone, name, 393120, 393119, pr5, pr4, pr3, pr2, pr1, 393248, 393247, 393246, 393245, 393244) response_2 = send_request(560832, email, phone, name, 393196, 393195, pr5, pr4, pr3, pr2, pr1, 393267, 393266, 393265, 393264, 393263) response_3 = send_request(560833, email, phone, name, 393198, 393197, pr5, pr4, pr3, pr2, pr1, 393272, 393271, 393270, 393269, 393268) # Возвращаем список ответов return {'responses': [response_1,response_2,response_3]} else: # Вечером во вторник response_2 = send_request(560832, email, phone, name, 393196, 393195, pr5, pr4, pr3, pr2, pr1, 393267, 393266, 393265, 393264, 393263) response_3 = send_request(560833, email, phone, name, 393198, 393197, pr5, pr4, pr3, pr2, pr1, 393272, 393271, 393270, 393269, 393268) # Возвращаем список ответов return {'responses': [response_2,response_3]} elif current_day == 2: # Среда if current_hour < 19: # Утром в среду response_2 = send_request(560832, email, phone, name, 393196, 393195, pr5, pr4, pr3, pr2, pr1, 393267, 393266, 393265, 393264, 393263) response_3 = send_request(560833, email, phone, name, 393198, 393197, pr5, pr4, pr3, pr2, pr1, 393272, 393271, 393270, 393269, 393268) # Возвращаем список ответов return {'responses': [response_2,response_3]} else: # Вечером в среду response_3 = send_request(560833, email, phone, name, 393198, 393197, pr5, pr4, pr3, pr2, pr1, 393272, 393271, 393270, 393269, 393268) # Возвращаем список ответов return {'responses': [response_3]} elif current_day == 3: # Четверг if current_hour < 19: response_3 = send_request(560833, email, phone, name, 393198, 393197, pr5, pr4, pr3, pr2, pr1, 393272, 393271, 393270, 393269, 393268) # Возвращаем список ответов return {'responses': [response_3]} else: # Вечером в четверг # Комментарий: Отправка в лист 1, лист 2, лист 3 # Отправляем запросы в листы подряд response_1 = send_request(560768, email, phone, name, 393120, 393119, pr5, pr4, pr3, pr2, pr1, 393248, 393247, 393246, 393245, 393244) response_2 = send_request(560832, email, phone, name, 393196, 393195, pr5, pr4, pr3, pr2, pr1, 393267, 393266, 393265, 393264, 393263) response_3 = send_request(560833, email, phone, name, 393198, 393197, pr5, pr4, pr3, pr2, pr1, 393272, 393271, 393270, 393269, 393268) # Возвращаем список ответов return {'responses': [response_1,response_2,response_3]} return response.json() @app.route('/grups', methods=['GET']) def grup(): return render_template('grups.html') @app.route('/send_request_gr', methods=['POST']) def send_request_gr(): headers = { 'Authorization': f'Bearer {token}', 'Content-Type': 'application/json' } api_token = request.form.get('api_token') group_id = request.form.get('group_id') url = f"https://api.notisend.ru/v1/email/lists/{group_id}/parameters" response = requests.get(url, headers=headers) data = response.json() return jsonify(data) @app.route('/save_db', methods=['GET']) def save_db(): show_params = False list_id = request.args.get('list_id') name = request.args.get('name') name_id = request.args.get('name_id') email = request.args.get('email') phone = request.args.get('phone') phone_id = request.args.get('phone_id') pr1 = request.args.get('pr1') pr1_id = request.args.get('pr1_id') pr2 = request.args.get('pr2') pr2_id = request.args.get('pr2_id') pr3 = request.args.get('pr3') pr3_id = request.args.get('pr3_id') pr4 = request.args.get('pr4') pr4_id = request.args.get('pr4_id') pr5 = request.args.get('pr5') pr5_id = request.args.get('pr5_id') data = { "email": email, "unconfirmed": False, "values": [ { "parameter_id": pr5_id, "kind": "string", "list_id": list_id, "title": "pr5", "value": pr5 }, { "parameter_id": pr4_id, "kind": "string", "list_id": list_id, "title": "pr4", "value": pr4 }, { "parameter_id": pr3_id, "kind": "string", "list_id": list_id, "title": "pr3", "value": pr3 }, { "parameter_id": pr2_id, "kind": "string", "list_id": list_id, "title": "pr2", "value": pr2 }, { "parameter_id": pr1_id, "kind": "string", "list_id": list_id, "title": "pr1", "value": pr1 }, { "parameter_id": phone_id, "kind": "string", "list_id": list_id, "title": "phone", "value": phone }, { "parameter_id": name_id, "kind": "string", "list_id": list_id, "title": "name", "value": name } ] } headers = { 'Authorization': f'Bearer {token}', 'Content-Type': 'application/json' } response = requests.post(f"{base_url}/email/lists/{list_id}/recipients", json=data, headers=headers) if show_params: system_vars = { 'base_url': base_url, 'token': token } return jsonify({'system_variables': system_vars, 'request_parameters': request.args}) else: return response.text @app.route('/contacts') def show_contacts(): try: conn = sqlite3.connect('data.db') cursor = conn.cursor() cursor.execute('SELECT name, email, phone, pr1, pr2, pr3, pr4, pr5, date, time FROM contacts') contacts = cursor.fetchall() conn.close() return render_template('contacts.html', contacts=contacts), 200 except sqlite3.Error as e: print(f"SQLite error: {e}") return "Database error. Please try again later.", 500 except Exception as e: print(f"Error showing contacts: {e}") return "Internal Server Error", 500 if __name__ == '__main__': app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 7860)))