flask_irinal / app.py
DmitrMakeev's picture
Update app.py
c9e0bf3 verified
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 {db_name}: {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: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_request3(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()
@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]: # Понедельник, Пятница, Суббота, Воскресенье
# Сохраняем данные в три базы данных
save_to_database('data1.db', name, email, phone, pr5, pr4, pr3, pr2, pr1)
save_to_database('data2.db', name, email, phone, pr5, pr4, pr3, pr2, pr1)
save_to_database('data3.db', name, email, phone, pr5, pr4, pr3, pr2, pr1)
# Отправляем запрос
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:
# Сохраняем данные в три базы данных
save_to_database('data1.db', name, email, phone, pr5, pr4, pr3, pr2, pr1)
save_to_database('data2.db', name, email, phone, pr5, pr4, pr3, pr2, pr1)
save_to_database('data3.db', name, email, phone, pr5, pr4, pr3, pr2, pr1)
# Отправляем запрос
response_1 = send_additional_request1(email, name, phone, pr1, pr2, pr3, pr4, pr5)
return jsonify({'responses': [response_1]})
else:
# Сохраняем данные в три базы данных
save_to_database('data1.db', name, email, phone, pr5, pr4, pr3, pr2, pr1)
save_to_database('data2.db', name, email, phone, pr5, pr4, pr3, pr2, pr1)
save_to_database('data3.db', name, email, phone, pr5, pr4, pr3, pr2, pr1)
# Отправляем запрос
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:
# Сохраняем данные в три базы данных
save_to_database('data1.db', name, email, phone, pr5, pr4, pr3, pr2, pr1)
save_to_database('data2.db', name, email, phone, pr5, pr4, pr3, pr2, pr1)
save_to_database('data3.db', name, email, phone, pr5, pr4, pr3, pr2, pr1)
# Отправляем запрос
response_1 = send_additional_request1(email, name, phone, pr1, pr2, pr3, pr4, pr5)
return jsonify({'responses': [response_1]})
else:
# Сохраняем данные в три базы данных
save_to_database('data1.db', name, email, phone, pr5, pr4, pr3, pr2, pr1)
save_to_database('data2.db', name, email, phone, pr5, pr4, pr3, pr2, pr1)
save_to_database('data3.db', name, email, phone, pr5, pr4, pr3, pr2, pr1)
# Отправляем запрос
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:
# Сохраняем данные в три базы данных
save_to_database('data1.db', name, email, phone, pr5, pr4, pr3, pr2, pr1)
save_to_database('data2.db', name, email, phone, pr5, pr4, pr3, pr2, pr1)
save_to_database('data3.db', name, email, phone, pr5, pr4, pr3, pr2, pr1)
# Отправляем запрос
response_1 = send_additional_request1(email, name, phone, pr1, pr2, pr3, pr4, pr5)
return jsonify({'responses': [response_1]})
else:
# Сохраняем данные в три базы данных
save_to_database('data1.db', name, email, phone, pr5, pr4, pr3, pr2, pr1)
save_to_database('data2.db', name, email, phone, pr5, pr4, pr3, pr2, pr1)
save_to_database('data3.db', name, email, phone, pr5, pr4, pr3, pr2, pr1)
# Отправляем запрос
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('/contacts1')
def show_contacts1():
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('contacts1.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
@app.route('/contacts2')
def show_contacts2():
try:
conn = sqlite3.connect('data2.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('contacts2.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
@app.route('/contacts3')
def show_contacts3():
try:
conn = sqlite3.connect('data3.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('contacts3.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)))