Spaces:
Runtime error
Runtime error
| from flask import Flask, request, render_template_string, render_template, jsonify | |
| import sqlite3 | |
| import os | |
| import random | |
| import requests | |
| import time | |
| import re | |
| import json | |
| import base64 | |
| from unidecode import unidecode | |
| api_key_sys = os.getenv('api_key_sys') | |
| # Ваш API-ключ | |
| gc_url_gru = os.getenv('gc_url_gru') | |
| gc_url_export = os.getenv('gc_url_export') # URL для экспорта данных | |
| start_up = os.getenv('start_up') | |
| gc_url = os.getenv('gc_url') | |
| gc_url_form = os.getenv('gc_url_form') | |
| gc_api = os.getenv('gc_api') | |
| wa_url = os.getenv('wa_url') | |
| wa_api_key = os.getenv('wa_api_key') | |
| up_db = os.getenv('up_db') | |
| id_gru = os.getenv('id_gru') | |
| date_from = "2022-01-01" | |
| export_id = "" | |
| code_executed = False | |
| status = "active" | |
| json_data = ''' | |
| {"success":true,"error_message":"","error":false,"info": {"fields":["id","Email","Тип регистрации","Создан","Последняя активность","Имя","Фамилия","Телефон","Дата рождения","Возраст","Страна","Город","От партнера","Руч продлен Клуба","Промокод","bonus_05_23","Клуб 255 - колл. оплат","Согласен с договором оферты и политикой конфиденциальности","Согласен на рассылку","vk_id","chat_id","ws_st","ws_stop","web_st","fin_prog","shop_st","curator","pr1","pr2","pr3","pr4","pr5","ad_url","Ответ сервера","Откуда пришел","utm_source","utm_medium","utm_campaign","utm_term","utm_content","utm_group","ID партнера","Email партнера","ФИО партнера","ФИО менеджера","VK-ID","ID группы","Добавлен в группу"],"items": [["296260454","[email protected]","Зарегистрировался самостоятельно","2023-02-13 22:20:42","2024-07-05 10:21:18","Ольга","Горшкова","79150408998","1988-05-18","36","Россия","Москва","","","PSYDM5_0","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","2993783","2023-09-03 12:19:08"],["315668856","[email protected]","Зарегистрировался самостоятельно","2023-05-25 16:05:43","2024-07-10 16:43:06","Юлия","Грищук","+79527936944","1986-11-13","38","Германия","Калининград ","","","","","","","","","","","","","","","","","","","","","","","https:\/\/webinar.riverpsy.com\/","telegram-bot","","","","","","","","","","","2993783","2023-09-03 12:19:08"],["316251009","[email protected]","Зарегистрировался самостоятельно","2023-05-29 13:26:11","2024-07-13 10:49:42","Елена","","+33614075834","","","Франция","","","","","","","","","","","","","","","","","","","","","","","","","telegram-channel","","","","","","","","","","","2993783","2023-09-03 12:19:08"],["323062565","[email protected]","Зарегистрировался самостоятельно","2023-07-05 11:08:11","2024-07-05 22:28:50","Старухина","Ксения","79872598129","","","Россия","","","","","","","","","","","","","","","","","","","","","","","","https:\/\/www.google.ru\/","google*","organic","","","","","","","","","20712833","2993783","2023-09-03 12:19:08"],["392646517","[email protected]","Приглашен администратором","2024-06-03 19:11:09","2024-07-10 13:54:45","Ирина","сотрудник","79124871139","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","2993783","2024-06-03 19:24:01"]]}} | |
| ''' | |
| app = Flask(__name__, template_folder="./") | |
| app.config['DEBUG'] = True | |
| UPLOAD_FOLDER = 'static' | |
| if not os.path.exists(UPLOAD_FOLDER): | |
| os.makedirs(UPLOAD_FOLDER) | |
| DATABASES = ['data_gc.db', 'data1.db', 'data2.db', 'data3.db', 'data4.db', 'data5.db'] | |
| def init_db(db_name): | |
| conn = sqlite3.connect(db_name) | |
| cursor = conn.cursor() | |
| cursor.execute(''' | |
| CREATE TABLE IF NOT EXISTS contacts ( | |
| id INTEGER PRIMARY KEY AUTOINCREMENT, | |
| name TEXT NOT NULL, | |
| phone TEXT NOT NULL, | |
| email TEXT NOT NULL, | |
| vk_id TEXT NOT NULL, | |
| chat_id TEXT NOT NULL, | |
| ws_statys TEXT NOT NULL, | |
| ws_stop TEXT NOT NULL, | |
| web_statys INTEGER, | |
| fin_progress INTEGER, | |
| shop_statys_full TEXT NOT NULL, | |
| curator TEXT NOT NULL, | |
| pr1 TEXT NOT NULL, | |
| pr2 TEXT NOT NULL, | |
| pr3 TEXT NOT NULL, | |
| pr4 TEXT NOT NULL, | |
| pr5 TEXT NOT NULL, | |
| ad_url TEXT NOT NULL | |
| ) | |
| ''') | |
| conn.commit() | |
| conn.close() | |
| for db in DATABASES: | |
| init_db(db) | |
| # Функция для выполнения HTTP запросов | |
| def fetch(url): | |
| try: | |
| response = requests.get(url) | |
| response.raise_for_status() | |
| print(f"GET запрос к {url} выполнен успешно.") | |
| return response.json() | |
| except requests.RequestException as e: | |
| print(f"Ошибка при выполнении GET запроса к {url}: {e}") | |
| return None | |
| # Функция для отправки оповещения на другой сервер | |
| def send_notification(url, data): | |
| try: | |
| response = requests.post(url, json=data) | |
| response.raise_for_status() | |
| print(f"POST запрос к {url} выполнен успешно.") | |
| return response.json() | |
| except requests.RequestException as e: | |
| print(f"Ошибка при выполнении POST запроса к {url}: {e}") | |
| return None | |
| # Основная функция для отправки запросов | |
| def initialize_requests(): | |
| global code_executed, export_id | |
| print(f"Функция initialize_requests вызвана. start_up: {start_up}, code_executed: {code_executed}") | |
| if start_up == '1' and not code_executed: | |
| try: | |
| # Первый запрос | |
| url_template = f"{gc_url_gru}/{id_gru}/users?key={gc_api}&created_at[from]={date_from}&status={status}" | |
| data = fetch(url_template) | |
| if data and data.get("success"): | |
| export_id = data.get("info", {}).get("export_id", "") | |
| print("Export ID:", export_id) # Отладочное сообщение | |
| # Отправка оповещения на другой сервер | |
| notification_url = "https://skyauto.me/cllbck/217669590/29245685/bGZuMDRZZUpLZ3VJR2oxcC9CQmh0UT0?api=1&uid=535939344" | |
| notification_data = { | |
| "message": "Первый запрос был выполнен", | |
| "export_id": export_id | |
| } | |
| notification_response = send_notification(notification_url, notification_data) | |
| print("Ответ от сервера оповещения:", notification_response) | |
| code_executed = True # Устанавливаем флаг выполнения кода | |
| else: | |
| raise Exception(f"Ошибка в ответе от сервера: {data.get('error_message') if data else 'Нет данных'}") | |
| except Exception as e: | |
| print(f"Ошибка: {e}") | |
| else: | |
| print("Системная переменная start_up не равна '1' или код уже выполнялся.") | |
| # Маршрут для экспорта пользователя | |
| def export_user(): | |
| try: | |
| export_id = request.args.get('export_id') | |
| if not export_id: | |
| raise Exception("export_id не найден в параметрах запроса") | |
| print(f"Получен export_id: {export_id}") # Отладочное сообщение | |
| # Отправка третьего запроса для выгрузки базы данных | |
| third_url_template = f"{gc_url_export}/{export_id}?key={gc_api}" | |
| response = fetch(third_url_template) | |
| if response and response.get("success"): | |
| print("Ответ сервера:") | |
| print(response) # Вывод ответа сервера в консоль сервера | |
| return jsonify(response), 200 | |
| else: | |
| raise Exception(f"Ошибка в ответе от сервера: {response.get('error_message') if response else 'Нет данных'}") | |
| except Exception as e: | |
| print(f"Ошибка: {e}") # Вывод ошибки в консоль сервера | |
| return jsonify({"error": str(e)}), 500 | |
| def load_data_from_json(): | |
| data = json.loads(json_data) | |
| items = data['info']['items'] | |
| fields = data['info']['fields'] | |
| db = 'data_gc.db' # Указываем конкретную базу данных | |
| conn = sqlite3.connect(db) | |
| cursor = conn.cursor() | |
| for item in items: | |
| user_data = dict(zip(fields, item)) | |
| # Проверяем наличие значений для полей и устанавливаем значения по умолчанию, если они отсутствуют | |
| user_data.setdefault('vk_id', '') | |
| user_data.setdefault('chat_id', '') | |
| user_data.setdefault('ws_st', '') | |
| user_data.setdefault('ws_stop', '') | |
| user_data.setdefault('web_st', '') | |
| user_data.setdefault('fin_prog', '') | |
| user_data.setdefault('shop_st', '') | |
| user_data.setdefault('curator', '') | |
| user_data.setdefault('pr1', '') | |
| user_data.setdefault('pr2', '') | |
| user_data.setdefault('pr3', '') | |
| user_data.setdefault('pr4', '') | |
| user_data.setdefault('pr5', '') | |
| user_data.setdefault('ad_url', '') | |
| # Убираем плюс в начале телефона, если он присутствует | |
| if 'Телефон' in user_data and user_data['Телефон'].startswith('+'): | |
| user_data['Телефон'] = user_data['Телефон'][1:] | |
| query = ''' | |
| INSERT INTO contacts ( | |
| name, phone, email, vk_id, chat_id, ws_statys, ws_stop, web_statys, fin_progress, shop_statys_full, pr1, pr2, pr3, pr4, pr5, ad_url, curator | |
| ) VALUES ( | |
| :Имя, :Телефон, :Email, :vk_id, :chat_id, :ws_st, :ws_stop, :web_st, :fin_prog, :shop_st, :pr1, :pr2, :pr3, :pr4, :pr5, :ad_url, :curator | |
| ) | |
| ''' | |
| cursor.execute(query, user_data) | |
| conn.commit() | |
| conn.close() | |
| def before_first_request(): | |
| load_data_from_json() | |
| def randomize_message(template): | |
| def replace_placeholder(match): | |
| options = match.group(1).split('|') | |
| return random.choice(options) | |
| return re.sub(r'\{([^}]+)\}', replace_placeholder, template) | |
| def clean_phone_number(phone): | |
| if phone.startswith('+'): | |
| return phone[1:] | |
| return phone | |
| def send_message(chat_id, message): | |
| #base_url = os.getenv('wa_url') | |
| #api_key = os.getenv('wa_api_key') | |
| full_url = f"{wa_url}{wa_api_key}" | |
| payload = { | |
| "chatId": chat_id, | |
| "message": message | |
| } | |
| headers = { | |
| 'Content-Type': 'application/json' | |
| } | |
| response = requests.request("POST", full_url, headers=headers, json=payload) | |
| try: | |
| response_json = response.json() | |
| except ValueError: | |
| response_json = {"error": "Invalid JSON response"} | |
| return response_json | |
| def check_and_send_mailings(mesage_db1, clean_db): | |
| try: | |
| results = [] | |
| for database in DATABASES: | |
| conn = sqlite3.connect(database) | |
| cursor = conn.cursor() | |
| cursor.execute('SELECT name, phone FROM contacts') | |
| contacts = cursor.fetchall() | |
| conn.close() | |
| for contact in contacts: | |
| name = contact[0] | |
| chat_id = f"{clean_phone_number(contact[1])}@c.us" | |
| message = randomize_message(mesage_db1) | |
| message = message.replace('[[nemes]]', name) # Подстановка имени | |
| send_result = send_message(chat_id, message) | |
| results.append({ | |
| "chat_id": chat_id, | |
| "message": message, | |
| "result": send_result | |
| }) | |
| if clean_db == '1': | |
| conn = sqlite3.connect(database) | |
| cursor = conn.cursor() | |
| cursor.execute('DELETE FROM contacts') | |
| conn.commit() | |
| conn.close() | |
| return jsonify({"status": "success", "results": results}), 200 | |
| except Exception as e: | |
| print(f"Error sending mailings: {e}") | |
| return jsonify({"status": "error", "message": str(e)}), 500 | |
| #С проверкой sys | |
| def start_mailings(): | |
| mesage_db1 = request.args.get('mesage') | |
| clean_db = request.args.get('clean_db') | |
| api_sys_control = request.args.get('api_sys') | |
| if not mesage_db1: | |
| return "Parameter 'mesage' is required.", 400 | |
| if api_sys_control != api_key_sys: | |
| return "EUR 22", 200 | |
| return check_and_send_mailings(mesage_db1, clean_db) | |
| def add_data_gc(): | |
| try: | |
| api_sys_control = request.args.get('api_sys') | |
| if api_sys_control != api_key_sys: | |
| return "err api key", 200 | |
| name = request.args.get('name') | |
| phone = request.args.get('phone') | |
| email = request.args.get('email') | |
| vk_id = request.args.get('vk_id', '') | |
| chat_id = request.args.get('chat_id') | |
| ws_statys = request.args.get('ws_st') | |
| ws_stop = request.args.get('ws_stop') | |
| web_statys = request.args.get('web_st', 0, type=int) | |
| fin_progress = request.args.get('fin_prog', 0, type=int) | |
| shop_statys_full = request.args.get('shop_st') | |
| pr1 = request.args.get('pr1') | |
| pr2 = request.args.get('pr2') | |
| pr3 = request.args.get('pr3') | |
| pr4 = request.args.get('pr4') | |
| pr5 = request.args.get('pr5') | |
| ad_url = request.args.get('ad_url') | |
| curator = request.args.get('curator') | |
| if not name or not phone or not email: | |
| return "Parameters 'name', 'phone', and 'email' are required.", 400 | |
| # Clean up phone number by removing any leading plus sign | |
| if phone.startswith('+'): | |
| phone = phone[1:] | |
| conn = sqlite3.connect('data_gc.db') | |
| cursor = conn.cursor() | |
| cursor.execute('SELECT * FROM contacts WHERE phone = ? OR email = ?', (phone, email)) | |
| existing_contact = cursor.fetchone() | |
| if existing_contact: | |
| cursor.execute(''' | |
| UPDATE contacts SET | |
| name = ?, email = ?, vk_id = ?, chat_id = ?, ws_statys = ?, ws_stop = ?, | |
| web_statys = ?, fin_progress = ?, shop_statys_full = ?, pr1 = ?, pr2 = ?, | |
| pr3 = ?, pr4 = ?, pr5 = ?, ad_url = ?, curator = ? | |
| WHERE phone = ? OR email = ? | |
| ''', (name, email, vk_id, chat_id, ws_statys, ws_stop, web_statys, fin_progress, | |
| shop_statys_full, pr1, pr2, pr3, pr4, pr5, ad_url, curator, phone, email)) | |
| else: | |
| cursor.execute(''' | |
| INSERT INTO contacts ( | |
| name, phone, email, vk_id, chat_id, ws_statys, ws_stop, web_statys, fin_progress, | |
| shop_statys_full, pr1, pr2, pr3, pr4, pr5, ad_url, curator | |
| ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) | |
| ''', (name, phone, email, vk_id, chat_id, ws_statys, ws_stop, web_statys, fin_progress, | |
| shop_statys_full, pr1, pr2, pr3, pr4, pr5, ad_url, curator)) | |
| conn.commit() | |
| conn.close() | |
| return f"Contact updated/added: {name} - {phone} - {email}", 200 | |
| except Exception as e: | |
| print(f"Error adding/updating contact: {e}") | |
| return "Internal Server Error", 500 | |
| def add_data_ras(): | |
| try: | |
| api_sys_control = request.args.get('api_sys') | |
| if api_sys_control != api_key_sys: | |
| return "EUR 22", 200 | |
| name = request.args.get('name') | |
| phone = request.args.get('phone') | |
| email = request.args.get('email') | |
| vk_id = request.args.get('vk_id', '') | |
| chat_id = request.args.get('chat_id', '') | |
| ws_statys = request.args.get('ws_st', '') | |
| ws_stop = request.args.get('ws_stop', '') | |
| web_statys = request.args.get('web_st', 0, type=int) | |
| fin_progress = request.args.get('fin_prog', 0, type=int) | |
| shop_statys_full = request.args.get('shop_st', '') | |
| pr1 = request.args.get('pr1', '') | |
| pr2 = request.args.get('pr2', '') | |
| pr3 = request.args.get('pr3', '') | |
| pr4 = request.args.get('pr4', '') | |
| pr5 = request.args.get('pr5', '') | |
| ad_url = request.args.get('ad_url', '') | |
| curator = request.args.get('curator', '') | |
| if not name or not phone or not email: | |
| return "Parameters 'name', 'phone', and 'email' are required.", 400 | |
| # Clean up phone number by removing any leading plus sign | |
| if phone.startswith('+'): | |
| phone = phone[1:] | |
| conn = sqlite3.connect('data1.db') | |
| cursor = conn.cursor() | |
| cursor.execute('SELECT * FROM contacts WHERE phone = ? OR email = ?', (phone, email)) | |
| existing_contact = cursor.fetchone() | |
| if existing_contact: | |
| cursor.execute(''' | |
| UPDATE contacts SET | |
| name = ?, email = ?, vk_id = ?, chat_id = ?, ws_statys = ?, ws_stop = ?, | |
| web_statys = ?, fin_progress = ?, shop_statys_full = ?, pr1 = ?, pr2 = ?, | |
| pr3 = ?, pr4 = ?, pr5 = ?, ad_url = ?, curator = ? | |
| WHERE phone = ? OR email = ? | |
| ''', (name, email, vk_id, chat_id, ws_statys, ws_stop, web_statys, fin_progress, | |
| shop_statys_full, pr1, pr2, pr3, pr4, pr5, ad_url, curator, phone, email)) | |
| else: | |
| cursor.execute(''' | |
| INSERT INTO contacts ( | |
| name, phone, email, vk_id, chat_id, ws_statys, ws_stop, web_statys, fin_progress, | |
| shop_statys_full, pr1, pr2, pr3, pr4, pr5, ad_url, curator | |
| ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) | |
| ''', (name, phone, email, vk_id, chat_id, ws_statys, ws_stop, web_statys, fin_progress, | |
| shop_statys_full, pr1, pr2, pr3, pr4, pr5, ad_url, curator)) | |
| conn.commit() | |
| conn.close() | |
| return f"Contact updated/added: {name} - {phone} - {email}", 200 | |
| except Exception as e: | |
| print(f"Error adding/updating contact: {e}") | |
| return "Internal Server Error", 500 | |
| def show_data_gc(): | |
| try: | |
| api_sys_control = request.args.get('api_sys') | |
| if api_sys_control != api_key_sys: | |
| return "EUR 22", 200 | |
| conn = sqlite3.connect('data_gc.db') | |
| cursor = conn.cursor() | |
| cursor.execute('SELECT name, phone, email FROM contacts') | |
| contacts = cursor.fetchall() | |
| cursor.execute('SELECT COUNT(*) FROM contacts') | |
| total_users = cursor.fetchone()[0] | |
| conn.close() | |
| return render_template('data_gc.html', contacts=contacts, total_users=total_users) | |
| except Exception as e: | |
| print(f"Error showing contacts: {e}") | |
| return "Internal Server Error", 500 | |
| def data_gc_tab(): | |
| api_sys_control = request.args.get('api_sys') | |
| if api_sys_control != api_key_sys: | |
| return "EUR 22", 200 | |
| return render_template('data_gc_tab.html') | |
| def data_gc_tab_out(): | |
| try: | |
| api_sys_control = request.args.get('api_sys') | |
| if api_sys_control != api_key_sys: | |
| return "EUR 22", 200 | |
| conn = sqlite3.connect('data_gc.db') | |
| cursor = conn.cursor() | |
| cursor.execute(''' | |
| SELECT id, name, phone, email, vk_id, chat_id, ws_statys, ws_stop, web_statys, fin_progress, | |
| shop_statys_full, pr1, pr2, pr3, pr4, pr5, ad_url, curator | |
| FROM contacts | |
| ''') | |
| contacts = cursor.fetchall() | |
| conn.close() | |
| contacts_json = [{ | |
| 'id': contact[0], 'name': contact[1], 'phone': contact[2], 'email': contact[3], | |
| 'vk_id': contact[4], 'chat_id': contact[5], 'ws_statys': contact[6], 'ws_stop': contact[7], | |
| 'web_statys': contact[8], 'fin_progress': contact[9], 'shop_statys_full': contact[10], 'curator': contact[17], | |
| 'pr1': contact[11], 'pr2': contact[12], 'pr3': contact[13], 'pr4': contact[14], | |
| 'pr5': contact[15], 'ad_url': contact[16] | |
| } for contact in contacts] | |
| return jsonify(contacts_json), 200 | |
| except Exception as e: | |
| error_message = f"Error getting data from data_gc: {e}" | |
| print(error_message) | |
| return error_message, 500 | |
| def show_data_ras(): | |
| try: | |
| api_sys_control = request.args.get('api_sys') | |
| if api_sys_control != api_key_sys: | |
| return "EUR 22", 200 | |
| conn = sqlite3.connect('data1.db') | |
| cursor = conn.cursor() | |
| cursor.execute('SELECT name, phone, email FROM contacts') | |
| contacts = cursor.fetchall() | |
| cursor.execute('SELECT COUNT(*) FROM contacts') | |
| total_users = cursor.fetchone()[0] | |
| conn.close() | |
| return render_template('data_ras.html', contacts=contacts, total_users=total_users) | |
| except Exception as e: | |
| print(f"Error showing contacts: {e}") | |
| return "Internal Server Error", 500 | |
| def biz_v(): | |
| api_sys_control = request.args.get('api_sys') | |
| if api_sys_control != api_key_sys: | |
| return "EUR 22", 200 | |
| return render_template('biz_v.html') | |
| def send_request(): | |
| token = request.form.get('token') | |
| url = 'https://online.bizon365.ru/api/v1/webinars/reports/getlist?minDate=2021-08-06T00:00:00' | |
| response = requests.get(url, headers={'X-Token': token}) | |
| if response.status_code == 200: | |
| data = response.json() | |
| webinar_ids = [item['webinarId'] for item in data['list']] | |
| return jsonify(webinar_ids) | |
| else: | |
| return jsonify({'error': 'Failed to fetch data from the API'}), response.status_code | |
| def veref(): | |
| api_sys_control = request.args.get('api_sys') | |
| if api_sys_control != api_key_sys: | |
| return "EUR 22", 200 | |
| return render_template('ver.html') | |
| def se_mes(): | |
| api_sys_control = request.args.get('api_sys') | |
| if api_sys_control != api_key_sys: | |
| return "EUR 22", 200 | |
| return render_template('se_mes.html') | |
| def se_mes_im(): | |
| api_sys_control = request.args.get('api_sys') | |
| if api_sys_control != api_key_sys: | |
| return "EUR 22", 200 | |
| return render_template('se_mes_im.html') | |
| def se_mes_ran(): | |
| api_sys_control = request.args.get('api_sys') | |
| if api_sys_control != api_key_sys: | |
| return "EUR 22", 200 | |
| return render_template('se_mes_ran.html') | |
| def se_mes_im_ran(): | |
| api_sys_control = request.args.get('api_sys') | |
| if api_sys_control != api_key_sys: | |
| return "EUR 22", 200 | |
| return render_template('se_mes_im_ran.html') | |
| def se_mes_im2(): | |
| api_sys_control = request.args.get('api_sys') | |
| if api_sys_control != api_key_sys: | |
| return "EUR 22", 200 | |
| return render_template('se_mes_im2.html') | |
| def se_mes_f(): | |
| api_sys_control = request.args.get('api_sys') | |
| if api_sys_control != api_key_sys: | |
| return "EUR 22", 200 | |
| return render_template('se_mes_f.html') | |
| def up_gr(): | |
| api_sys_control = request.args.get('api_sys') | |
| if api_sys_control != api_key_sys: | |
| return "EUR 22", 200 | |
| return render_template('up_gr.html') | |
| def up_user_gp(): | |
| api_sys_control = request.args.get('api_sys') | |
| if api_sys_control != api_key_sys: | |
| return "EUR 22", 200 | |
| return render_template('up_user_gp.html') | |
| def del_user_gp(): | |
| api_sys_control = request.args.get('api_sys') | |
| if api_sys_control != api_key_sys: | |
| return "EUR 22", 200 | |
| return render_template('del_user_gp.html') | |
| def up_ad(): | |
| api_sys_control = request.args.get('api_sys') | |
| if api_sys_control != api_key_sys: | |
| return "EUR 22", 200 | |
| return render_template('up_ad.html') | |
| def del_ad(): | |
| api_sys_control = request.args.get('api_sys') | |
| if api_sys_control != api_key_sys: | |
| return "EUR 22", 200 | |
| return render_template('del_ad.html') | |
| def se_opr(): | |
| api_sys_control = request.args.get('api_sys') | |
| if api_sys_control != api_key_sys: | |
| return "EUR 22", 200 | |
| return render_template('se_opr.html') | |
| def online(): | |
| api_sys_control = request.args.get('api_sys') | |
| if api_sys_control != api_key_sys: | |
| return "EUR 22", 200 | |
| return render_template('online.html') | |
| def se_mes_f_gc(): | |
| api_sys_control = request.args.get('api_sys') | |
| if api_sys_control != api_key_sys: | |
| return "EUR 22", 200 | |
| return render_template('se_mes_f_gc.html') | |
| def total_users(): | |
| try: | |
| api_sys_control = request.args.get('api_sys') | |
| if api_sys_control != api_key_sys: | |
| return "EUR 22", 200 | |
| total_users_gc = 0 | |
| total_users_ras = 0 | |
| conn_gc = sqlite3.connect('data_gc.db') | |
| cursor_gc = conn_gc.cursor() | |
| cursor_gc.execute('SELECT COUNT(*) FROM contacts') | |
| total_users_gc = cursor_gc.fetchone()[0] | |
| conn_gc.close() | |
| conn_ras = sqlite3.connect('data1.db') | |
| cursor_ras = conn_ras.cursor() | |
| cursor_ras.execute('SELECT COUNT(*) FROM contacts') | |
| total_users_ras = cursor_ras.fetchone()[0] | |
| conn_ras.close() | |
| return jsonify({ | |
| "total_users_gc": total_users_gc, | |
| "total_users_ras": total_users_ras | |
| }), 200 | |
| except Exception as e: | |
| print(f"Error getting total users: {e}") | |
| return "Internal Server Error", 500 | |
| def all_users_gc(): | |
| try: | |
| api_sys_control = request.args.get('api_sys') | |
| if api_sys_control != api_key_sys: | |
| return "EUR 22", 200 | |
| conn = sqlite3.connect('data_gc.db') | |
| cursor = conn.cursor() | |
| cursor.execute('SELECT name, phone, email FROM contacts') | |
| contacts = cursor.fetchall() | |
| conn.close() | |
| return jsonify(contacts), 200 | |
| except Exception as e: | |
| print(f"Error getting all users from data_gc: {e}") | |
| return "Internal Server Error", 500 | |
| def all_users_ras(): | |
| try: | |
| api_sys_control = request.args.get('api_sys') | |
| if api_sys_control != api_key_sys: | |
| return "EUR 22", 200 | |
| conn = sqlite3.connect('data1.db') | |
| cursor = conn.cursor() | |
| cursor.execute('SELECT name, phone, email FROM contacts') | |
| contacts = cursor.fetchall() | |
| conn.close() | |
| return jsonify(contacts), 200 | |
| except Exception as e: | |
| print(f"Error getting all users from data_ras: {e}") | |
| return "Internal Server Error", 500 | |
| def gc_db_no_email(): | |
| try: | |
| api_sys_control = request.args.get('api_sys') | |
| if api_sys_control != api_key_sys: | |
| return "EUR 22", 200 | |
| # Чтение параметров из GET-запроса | |
| name_d = request.args.get('name', '') | |
| phone_d = request.args.get('phone', '') | |
| pr1_d = request.args.get('pr1', '') | |
| pr2_d = request.args.get('pr2', '') | |
| pr3_d = request.args.get('pr3', '') | |
| # Проверка базы данных на наличие email по номеру телефона | |
| conn = sqlite3.connect('data_gc.db') | |
| cursor = conn.cursor() | |
| cursor.execute('SELECT email FROM contacts WHERE phone = ?', (phone_d,)) | |
| result = cursor.fetchone() | |
| email_d = result[0] if result else '' | |
| conn.close() | |
| # Формирование JSON | |
| json_data = { | |
| "user": { | |
| "email": email_d, | |
| "phone": phone_d, | |
| "first_name": name_d, | |
| "addfields": { | |
| "pr1": pr1_d, | |
| "pr2": pr2_d, | |
| "pr3": pr3_d | |
| } | |
| }, | |
| "system": { | |
| "refresh_if_exists": 1 | |
| }, | |
| "session": { | |
| "utm_source": "", | |
| "utm_medium": "", | |
| "utm_content": "", | |
| "utm_campaign": "", | |
| "utm_group": "", | |
| "gcpc": "", | |
| "gcao": "", | |
| "referer": "" | |
| } | |
| } | |
| # Конвертация JSON в Base64 | |
| json_str = json.dumps(json_data) | |
| params_d = base64.b64encode(json_str.encode('utf-8')).decode('utf-8') | |
| # Данные для отправки в теле запроса | |
| data = { | |
| 'key': gc_api, | |
| 'action': 'add', | |
| 'params': params_d | |
| } | |
| # Отправка POST-запроса с данными в формате "form-data" | |
| response = requests.post(gc_url, data=data) | |
| # Возвращаем ответ от тестового адреса | |
| return { | |
| 'status_code': response.status_code, | |
| 'response_body': response.text | |
| } | |
| except Exception as e: | |
| print(f"Error in gc_db_no_email: {e}") | |
| return "Internal Server Error", 500 | |
| def gc_db_email(): | |
| try: | |
| api_sys_control = request.args.get('api_sys') | |
| if api_sys_control != api_key_sys: | |
| return "EUR 22", 200 | |
| # Чтение параметров из GET-запроса | |
| name_d = request.args.get('name', '') | |
| email_d = request.args.get('email', '') | |
| phone_d = request.args.get('phone', '') | |
| pr1_d = request.args.get('pr1', '') | |
| pr2_d = request.args.get('pr2', '') | |
| pr3_d = request.args.get('pr3', '') | |
| # Формирование JSON | |
| json_data = { | |
| "user": { | |
| "email": email_d, | |
| "phone": phone_d, | |
| "first_name": name_d, | |
| "addfields": { | |
| "pr1": pr1_d, | |
| "pr2": pr2_d, | |
| "pr3": pr3_d | |
| } | |
| }, | |
| "system": { | |
| "refresh_if_exists": 1 | |
| }, | |
| "session": { | |
| "utm_source": "", | |
| "utm_medium": "", | |
| "utm_content": "", | |
| "utm_campaign": "", | |
| "utm_group": "", | |
| "gcpc": "", | |
| "gcao": "", | |
| "referer": "" | |
| } | |
| } | |
| # Конвертация JSON в Base64 | |
| json_str = json.dumps(json_data) | |
| params_d = base64.b64encode(json_str.encode('utf-8')).decode('utf-8') | |
| # Данные для отправки в теле запроса | |
| data = { | |
| 'key': gc_api, | |
| 'action': action_d, | |
| 'params': params_d | |
| } | |
| # Отправка POST-запроса с данными в формате "form-data" | |
| response = requests.post(gc_url, data=data) | |
| # Возвращаем ответ от тестового адреса | |
| return { | |
| 'status_code': response.status_code, | |
| 'response_body': response.text | |
| } | |
| except Exception as e: | |
| print(f"Error in gc_db_email: {e}") | |
| return "Internal Server Error", 500 | |
| def gc_forms(): | |
| try: | |
| api_sys_control = request.args.get('api_sys') | |
| if api_sys_control != api_key_sys: | |
| return "EUR 22", 200 | |
| # Чтение параметров из GET-запроса | |
| name_d = request.args.get('name', '') | |
| email_d = request.args.get('email', '') | |
| phone_d = request.args.get('phone', '') | |
| utm_source = request.args.get('utm_source', '') | |
| utm_medium = request.args.get('utm_medium', '') | |
| utm_content = request.args.get('utm_content', '') | |
| utm_campaign = request.args.get('utm_campaign', '') | |
| utm_group = request.args.get('utm_group', '') | |
| gcpc = request.args.get('gcpc', '') | |
| # Формирование JSON | |
| json_data = { | |
| "user": { | |
| "email": email_d, | |
| "phone": phone_d, | |
| "first_name": name_d, | |
| "addfields": { | |
| "pr1": pr1_d, | |
| "pr2": pr2_d, | |
| "pr3": pr3_d | |
| } | |
| }, | |
| "system": { | |
| "refresh_if_exists": 1 | |
| }, | |
| "session": { | |
| "utm_source": utm_source, | |
| "utm_medium": utm_medium, | |
| "utm_content": utm_content, | |
| "utm_campaign": utm_campaign, | |
| "utm_group": utm_group, | |
| "gcpc": gcpc, | |
| "gcao": "", | |
| "referer": "" | |
| }, | |
| "deal":{ | |
| "offer_code":"уникальный код предложения", | |
| "deal_status":"код статуса заказа" | |
| } | |
| } | |
| # Конвертация JSON в Base64 | |
| json_str = json.dumps(json_data) | |
| params_d = base64.b64encode(json_str.encode('utf-8')).decode('utf-8') | |
| # Данные для отправки в теле запроса | |
| data = { | |
| 'key': gc_api, | |
| 'action': action_d, | |
| 'params': params_d | |
| } | |
| # Отправка POST-запроса с данными в формате "form-data" | |
| response = requests.post(gc_url_form, data=data) | |
| # Возвращаем ответ от тестового адреса | |
| return { | |
| 'status_code': response.status_code, | |
| 'response_body': response.text | |
| } | |
| except Exception as e: | |
| print(f"Error in gc_db_email: {e}") | |
| return "Internal Server Error", 500 | |
| initialize_requests() | |
| if __name__ == '__main__': | |
| app.run(host='0.0.0.0', port=int(os.environ.get('PORT', 7860))) |