flask_irinal / app.py
DmitrMakeev's picture
Update app.py
21ef23e verified
raw
history blame
13.3 kB
from flask import Flask, request, jsonify, render_template
import requests
import os
import pytz
import datetime
import sqlite3
token2 = 'SkrIONpr3ByeSIuEaBhr1bB8u4aBhSJfH8uEpB2rk7rI_ETrn'
base_url = os.getenv('base_url') # URL сервера
token = os.getenv('token') # Ваш токен
api_key = os.getenv('api_key') # Ваш API ключ
app = Flask(__name__, template_folder="./")
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,
email TEXT,
phone TEXT,
pr1 TEXT,
pr2 TEXT,
pr3 TEXT,
pr4 TEXT,
pr5 TEXT,
date TEXT,
time TEXT
)
''')
conn.commit()
conn.close()
init_db('data1.db')
init_db('data2.db')
init_db('data3.db')
def save_to_database(db_name, 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(db_name)
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()
def send_additional_request1(email, name, phone, pr1, pr2, pr3, pr4, pr5):
"""Функция для отправки дополнительного запроса на другой адрес."""
data = {
"email": email,
"pageId": '67231:3tzmyp4a',
"phone": phone,
"time": '2024-07-09T19:00:00.000',
"confirm": 1,
"utm_source": pr1,
"utm_medium": pr2,
"utm_campaign": pr3,
"utm_content": pr4,
"utm_term": pr5
}
headers = {
'X-Token': token2 # Добавляем заголовок X-Token,
}
response = requests.post('https://online.bizon365.ru/api/v1/webinars/subpages/addSubscriber', json=data, headers=headers)
return response.json()
def send_additional_request2(email, name, phone, pr1, pr2, pr3, pr4, pr5):
"""Функция для отправки дополнительного запроса на другой адрес."""
data = {
"email": email,
"pageId": '67231:3tyhbkom',
"phone": phone,
"utm_source": pr1,
"utm_medium": pr2,
"utm_campaign": pr3,
"utm_content": pr4,
"utm_term": pr5
}
headers = {
'Content-Type': 'application/json'
}
response = requests.post('https://skyauto.me/cllbck/168704660/29237231/T1N1eVNQdy9LazBHNER2K3lldnA2Zz0?api=1&sid=535939344', json=data, headers=headers)
return response.json()
def send_additional_request3(email, name, phone, pr1, pr2, pr3, pr4, pr5):
"""Функция для отправки дополнительного запроса на другой адрес."""
data = {
"email": email,
"pageId": '67231:3tyhbkom',
"phone": phone,
"utm_source": pr1,
"utm_medium": pr2,
"utm_campaign": pr3,
"utm_content": pr4,
"utm_term": pr5
}
headers = {
'Content-Type': 'application/json'
}
response = requests.post('https://skyauto.me/cllbck/168704660/29237231/T1N1eVNQdy9LazBHNER2K3lldnA2Zz0?api=1&sid=535939344', 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')
# Устанавливаем временную зону Москвы
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]: # Понедельник, Пятница, Суббота, Воскресенье
db_name = 'data1.db'
elif current_day == 1: # Вторник
if current_hour < 19:
db_name = 'data2.db'
else:
db_name = 'data3.db'
elif current_day == 2: # Среда
if current_hour < 19:
db_name = 'data1.db'
else:
db_name = 'data2.db'
elif current_day == 3: # Четверг
if current_hour < 19:
db_name = 'data3.db'
else:
db_name = 'data1.db'
else:
db_name = 'data1.db' # По умолчанию
# Сохраняем данные в выбранную базу данных
save_to_database(db_name, name, email, phone, pr5, pr4, pr3, pr2, pr1)
if current_day in [0, 4, 5, 6]: # Понедельник, Пятница, Суббота, Воскресенье
# Отправляем запросы в листы подряд
response_1 = send_additional_request1(email, name, phone, pr1, pr2, pr3, pr4, pr5)
# Возвращаем список ответов
return jsonify({'responses': [response_1]})
elif current_day == 1: # Вторник
if current_hour < 19:
# Утром во Вторник
response_1 = send_additional_request1(email, name, phone, pr1, pr2, pr3, pr4, pr5)
# Возвращаем список ответов
return jsonify({'responses': [response_1]})
else:
# Вечером во Вторник
response_1 = send_additional_request1(email, name, phone, pr1, pr2, pr3, pr4, pr5)
# Возвращаем список ответов
return jsonify({'responses': [response_1]})
elif current_day == 2: # Среда
if current_hour < 19:
# Утром в среду
response_1 = send_additional_request1(email, name, phone, pr1, pr2, pr3, pr4, pr5)
# Возвращаем список ответов
return jsonify({'responses': [response_1]})
else:
# Вечером в среду
response_1 = send_additional_request1(email, name, phone, pr1, pr2, pr3, pr4, pr5)
# Возвращаем список ответов
return jsonify({'responses': [response_1]})
elif current_day == 3: # Четверг
if current_hour < 19:
# Утром в четверг
response_1 = send_additional_request1(email, name, phone, pr1, pr2, pr3, pr4, pr5)
# Возвращаем список ответов
return jsonify({'responses': [response_1]})
else:
# Вечером в четверг
response_1 = send_additional_request1(email, name, phone, pr1, pr2, pr3, pr4, pr5)
# Возвращаем список ответов
return jsonify({'responses': [response_1]})
return jsonify({'responses': []})
@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('data1.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)))