Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -282,20 +282,6 @@ def initialize_requests():
|
|
| 282 |
|
| 283 |
|
| 284 |
|
| 285 |
-
def send_test_data():
|
| 286 |
-
GOOGLE_FORM_URL = (
|
| 287 |
-
"https://docs.google.com/formResponse/d/e/1FAIpQLSc-JbmXvgpgGq6KrkXsYSsfMACVMyIDnNqrHy6jImGeSRcpiQ/{viewform}?usp=pp_url&entry.1556100878={name}&entry.1477412341={email}&entry.1634985541={phone}&entry.1736544219={vk_id}&entry.62153872={chat_id}&entry.1913752768={ws_st}&entry.1768186232={ws_stop}&entry.1198983592={web_st}&entry.994770784={fin_prog}&entry.910932310={b_city}&entry.1923801792={b_fin}&entry.2005444720={b_ban}&entry.741087361={b_ign}&entry.1316159837={b_baners}&entry.355123557={b_butt}&entry.395996312={b_mess}&entry.646571729={shop_st}&entry.578527800={curator}&entry.1936838964={pr1}&entry.1375537366={pr2}&entry.1249356084={pr3}&entry.752547226={pr4}&entry.704766458={pr5}&entry.1837661={gc_url}&entry.398837750={key_pr}&entry.225564240={n_con}&entry.1642320872={canal}&entry.1581826411={data_t}&entry.311131724={utm_source}&entry.1904279859={utm_medium}&entry.740234546={utm_campaign}&entry.880981295={utm_term}&entry.431306383={utm_content}"
|
| 288 |
-
)
|
| 289 |
-
|
| 290 |
-
response = requests.post(GOOGLE_FORM_URL)
|
| 291 |
-
|
| 292 |
-
if response.status_code == 200:
|
| 293 |
-
print("Data sent successfully.")
|
| 294 |
-
else:
|
| 295 |
-
print(f"Failed to send data: {response.status_code}, {response.text}")
|
| 296 |
-
|
| 297 |
-
send_test_data()
|
| 298 |
-
|
| 299 |
|
| 300 |
|
| 301 |
|
|
@@ -735,105 +721,12 @@ def data_gc_tab_out():
|
|
| 735 |
DATABASE_NAME = 'data_gc.db'
|
| 736 |
|
| 737 |
|
|
|
|
|
|
|
|
|
|
| 738 |
|
| 739 |
|
| 740 |
-
|
| 741 |
-
GOOGLE_FORM_URL = (
|
| 742 |
-
"https://docs.google.com/formResponse/d/e/1FAIpQLSc-JbmXvgpgGq6KrkXsYSsfMACVMyIDnNqrHy6jImGeSRcpiQ/formResponse"
|
| 743 |
-
"?usp=pp_url&entry.1556100878={name}&entry.1477412341={email}&entry.1634985541={phone}&entry.1736544219={vk_id}"
|
| 744 |
-
"&entry.62153872={chat_id}&entry.1913752768={ws_st}&entry.1768186232={ws_stop}&entry.1198983592={web_st}"
|
| 745 |
-
"&entry.994770784={fin_prog}&entry.910932310={b_city}&entry.1923801792={b_fin}&entry.2005444720={b_ban}"
|
| 746 |
-
"&entry.741087361={b_ign}&entry.1316159837={b_baners}&entry.355123557={b_butt}&entry.395996312={b_mess}"
|
| 747 |
-
"&entry.646571729={shop_st}&entry.578527800={curator}&entry.1936838964={pr1}&entry.1375537366={pr2}"
|
| 748 |
-
"&entry.1249356084={pr3}&entry.752547226={pr4}&entry.704766458={pr5}&entry.1837661={gc_url}&entry.398837750={key_pr}"
|
| 749 |
-
"&entry.225564240={n_con}&entry.1642320872={canal}&entry.1581826411={data_t}&entry.311131724={utm_source}"
|
| 750 |
-
"&entry.1904279859={utm_medium}&entry.740234546={utm_campaign}&entry.880981295={utm_term}&entry.431306383={utm_content}"
|
| 751 |
-
)
|
| 752 |
-
|
| 753 |
-
# Определяем шаблон для маппинга
|
| 754 |
-
mapping_template_log = {
|
| 755 |
-
'name': 'name',
|
| 756 |
-
'email': 'email',
|
| 757 |
-
'phone': 'phone',
|
| 758 |
-
'vk_id': 'vk_id',
|
| 759 |
-
'chat_id': 'chat_id',
|
| 760 |
-
'ws_st': 'ws_st',
|
| 761 |
-
'ws_stop': 'ws_stop',
|
| 762 |
-
'web_st': 'web_st',
|
| 763 |
-
'fin_prog': 'fin_prog',
|
| 764 |
-
'b_city': 'b_city',
|
| 765 |
-
'b_fin': 'b_fin',
|
| 766 |
-
'b_ban': 'b_ban',
|
| 767 |
-
'b_ign': 'b_ign',
|
| 768 |
-
'b_baners': 'b_baners',
|
| 769 |
-
'b_butt': 'b_butt',
|
| 770 |
-
'b_mess': 'b_mess',
|
| 771 |
-
'shop_st': 'shop_st',
|
| 772 |
-
'curator': 'curator',
|
| 773 |
-
'pr1': 'pr1',
|
| 774 |
-
'pr2': 'pr2',
|
| 775 |
-
'pr3': 'pr3',
|
| 776 |
-
'pr4': 'pr4',
|
| 777 |
-
'pr5': 'pr5',
|
| 778 |
-
'gc_url': 'gc_url',
|
| 779 |
-
'key_pr': 'key_pr',
|
| 780 |
-
'n_con': 'n_con',
|
| 781 |
-
'canal': 'canal',
|
| 782 |
-
'data_t': 'data_t',
|
| 783 |
-
'utm_source': 'utm_source',
|
| 784 |
-
'utm_medium': 'utm_medium',
|
| 785 |
-
'utm_campaign': 'utm_campaign',
|
| 786 |
-
'utm_term': 'utm_term',
|
| 787 |
-
'utm_content': 'utm_content'
|
| 788 |
-
}
|
| 789 |
-
|
| 790 |
-
|
| 791 |
-
|
| 792 |
-
def send_data_to_google_form(data):
|
| 793 |
-
# Используем переменную GOOGLE_FORM_URL для формирования ссылки
|
| 794 |
-
google_form_url = GOOGLE_FORM_URL.format(
|
| 795 |
-
name=data.get('name', ''),
|
| 796 |
-
email=data.get('email', ''),
|
| 797 |
-
phone=data.get('phone', ''),
|
| 798 |
-
vk_id=data.get('vk_id', ''),
|
| 799 |
-
chat_id=data.get('chat_id', ''),
|
| 800 |
-
ws_st=data.get('ws_st', ''),
|
| 801 |
-
ws_stop=data.get('ws_stop', ''),
|
| 802 |
-
web_st=data.get('web_st', ''),
|
| 803 |
-
fin_prog=data.get('fin_prog', ''),
|
| 804 |
-
b_city=data.get('b_city', ''),
|
| 805 |
-
b_fin=data.get('b_fin', ''),
|
| 806 |
-
b_ban=data.get('b_ban', ''),
|
| 807 |
-
b_ign=data.get('b_ign', ''),
|
| 808 |
-
b_baners=data.get('b_baners', ''),
|
| 809 |
-
b_butt=data.get('b_butt', ''),
|
| 810 |
-
b_mess=data.get('b_mess', ''),
|
| 811 |
-
shop_st=data.get('shop_st', ''),
|
| 812 |
-
curator=data.get('curator', ''),
|
| 813 |
-
pr1=data.get('pr1', ''),
|
| 814 |
-
pr2=data.get('pr2', ''),
|
| 815 |
-
pr3=data.get('pr3', ''),
|
| 816 |
-
pr4=data.get('pr4', ''),
|
| 817 |
-
pr5=data.get('pr5', ''),
|
| 818 |
-
gc_url=data.get('gc_url', ''),
|
| 819 |
-
key_pr=data.get('key_pr', ''),
|
| 820 |
-
n_con=data.get('n_con', ''),
|
| 821 |
-
canal=data.get('canal', ''),
|
| 822 |
-
data_t=data.get('data_t', ''),
|
| 823 |
-
utm_source=data.get('utm_source', ''),
|
| 824 |
-
utm_medium=data.get('utm_medium', ''),
|
| 825 |
-
utm_campaign=data.get('utm_campaign', ''),
|
| 826 |
-
utm_term=data.get('utm_term', ''),
|
| 827 |
-
utm_content=data.get('utm_content', '')
|
| 828 |
-
)
|
| 829 |
-
|
| 830 |
-
response = requests.post(google_form_url)
|
| 831 |
-
if response.status_code != 200:
|
| 832 |
-
logging.error(f"Failed to send data to Google Form: {response.status_code}, {response.text}")
|
| 833 |
-
else:
|
| 834 |
-
logging.info(f"Data sent to Google Form successfully: {response.status_code}")
|
| 835 |
-
|
| 836 |
-
def update_or_insert_user(db_name, user_data, mapping_template_log):
|
| 837 |
conn = sqlite3.connect(db_name)
|
| 838 |
cursor = conn.cursor()
|
| 839 |
|
|
@@ -843,7 +736,7 @@ def update_or_insert_user(db_name, user_data, mapping_template_log):
|
|
| 843 |
return
|
| 844 |
|
| 845 |
logging.debug(f"Processing user with email: {email}")
|
| 846 |
-
|
| 847 |
cursor.execute("SELECT web_st, b_mess FROM contacts WHERE email = ?", (email,))
|
| 848 |
user = cursor.fetchone()
|
| 849 |
logging.debug(f"User found: {user}")
|
|
@@ -870,7 +763,7 @@ def update_or_insert_user(db_name, user_data, mapping_template_log):
|
|
| 870 |
cursor = conn.cursor()
|
| 871 |
|
| 872 |
transformed_data = {}
|
| 873 |
-
for json_key, db_column in
|
| 874 |
value = user_data.get(json_key, "")
|
| 875 |
|
| 876 |
if isinstance(value, list):
|
|
@@ -883,58 +776,68 @@ def update_or_insert_user(db_name, user_data, mapping_template_log):
|
|
| 883 |
transformed_data[db_column] = str(value)
|
| 884 |
logging.debug(f"Transformed data: {transformed_data}")
|
| 885 |
|
| 886 |
-
|
| 887 |
-
|
| 888 |
-
|
| 889 |
-
|
| 890 |
-
|
| 891 |
-
|
| 892 |
-
|
| 893 |
-
|
| 894 |
-
|
| 895 |
-
|
| 896 |
-
|
| 897 |
-
|
| 898 |
-
|
| 899 |
-
|
| 900 |
-
|
| 901 |
-
|
| 902 |
-
|
| 903 |
-
|
| 904 |
-
|
| 905 |
-
|
| 906 |
-
|
| 907 |
-
|
| 908 |
-
|
| 909 |
-
|
| 910 |
-
|
| 911 |
-
|
| 912 |
-
|
| 913 |
-
|
| 914 |
-
|
| 915 |
-
|
| 916 |
-
|
| 917 |
-
|
| 918 |
-
|
| 919 |
-
|
| 920 |
-
|
| 921 |
-
|
| 922 |
-
|
| 923 |
-
|
| 924 |
-
'
|
| 925 |
-
|
| 926 |
-
|
| 927 |
-
|
|
|
|
|
|
|
| 928 |
|
| 929 |
conn.commit()
|
| 930 |
conn.close()
|
| 931 |
logging.debug(f"User with email {email} processed successfully")
|
| 932 |
|
| 933 |
-
# Отправляем данные в Google
|
| 934 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 935 |
|
| 936 |
@app.route('/send_request', methods=['POST'])
|
| 937 |
-
def
|
| 938 |
token = request.form.get('token')
|
| 939 |
min_date = request.form.get('minDate')
|
| 940 |
type = request.form.get('type')
|
|
@@ -1045,8 +948,43 @@ def webhookbz():
|
|
| 1045 |
else:
|
| 1046 |
return jsonify({'error': 'Failed to fetch data from the API'}), response.status_code
|
| 1047 |
|
| 1048 |
-
|
| 1049 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1050 |
|
| 1051 |
|
| 1052 |
|
|
|
|
| 282 |
|
| 283 |
|
| 284 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 285 |
|
| 286 |
|
| 287 |
|
|
|
|
| 721 |
DATABASE_NAME = 'data_gc.db'
|
| 722 |
|
| 723 |
|
| 724 |
+
DATABASE_NAME = 'data_gc.db'
|
| 725 |
+
DATABASES = ['data_gc.db', 'data1.db', 'data2.db', 'data3.db', 'data4.db', 'data5.db']
|
| 726 |
+
gog_url = "https://docs.google.com/formResponse/d/e/1FAIpQLSc-JbmXvgpgGq6KrkXsYSsfMACVMyIDnNqrHy6jImGeSRcpiQ/{viewform}?usp=pp_url&entry.1556100878={name}&entry.1477412341={email}&entry.1634985541={phone}&entry.1736544219={vk_id}&entry.62153872={chat_id}&entry.1913752768={ws_st}&entry.1768186232={ws_stop}&entry.1198983592={web_st}&entry.994770784={fin_prog}&entry.910932310={b_city}&entry.1923801792={b_fin}&entry.2005444720={b_ban}&entry.741087361={b_ign}&entry.1316159837={b_baners}&entry.355123557={b_butt}&entry.395996312={b_mess}&entry.646571729={shop_st}&entry.578527800={curator}&entry.1936838964={pr1}&entry.1375537366={pr2}&entry.1249356084={pr3}&entry.752547226={pr4}&entry.704766458={pr5}&entry.1837661={gc_url}&entry.398837750={key_pr}&entry.225564240={n_con}&entry.1642320872={canal}&entry.1581826411={data_t}&entry.311131724={utm_source}&entry.1904279859={utm_medium}&entry.740234546={utm_campaign}&entry.880981295={utm_term}&entry.431306383={utm_content}"
|
| 727 |
|
| 728 |
|
| 729 |
+
def update_or_insert_user(db_name, user_data, mapping_template):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 730 |
conn = sqlite3.connect(db_name)
|
| 731 |
cursor = conn.cursor()
|
| 732 |
|
|
|
|
| 736 |
return
|
| 737 |
|
| 738 |
logging.debug(f"Processing user with email: {email}")
|
| 739 |
+
|
| 740 |
cursor.execute("SELECT web_st, b_mess FROM contacts WHERE email = ?", (email,))
|
| 741 |
user = cursor.fetchone()
|
| 742 |
logging.debug(f"User found: {user}")
|
|
|
|
| 763 |
cursor = conn.cursor()
|
| 764 |
|
| 765 |
transformed_data = {}
|
| 766 |
+
for json_key, db_column in mapping_template.items():
|
| 767 |
value = user_data.get(json_key, "")
|
| 768 |
|
| 769 |
if isinstance(value, list):
|
|
|
|
| 776 |
transformed_data[db_column] = str(value)
|
| 777 |
logging.debug(f"Transformed data: {transformed_data}")
|
| 778 |
|
| 779 |
+
required_fields = [
|
| 780 |
+
"vk_id", "chat_id", "ws_st", "ws_stop", "web_st", "fin_prog",
|
| 781 |
+
"b_city", "b_fin", "b_ban", "b_ign", "b_baners", "b_butt", "b_mess",
|
| 782 |
+
"shop_st", "curator", "pr1", "pr2", "pr3", "pr4", "pr5", "gc_url",
|
| 783 |
+
"key_pr", "n_con", "canal", "data_t", 'utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content'
|
| 784 |
+
]
|
| 785 |
+
for field in required_fields:
|
| 786 |
+
if field not in transformed_data:
|
| 787 |
+
transformed_data[field] = ""
|
| 788 |
+
logging.debug(f"Transformed data after adding required fields: {transformed_data}")
|
| 789 |
+
|
| 790 |
+
if 'phone' in user_data:
|
| 791 |
+
phone = user_data['phone']
|
| 792 |
+
if phone.startswith('+'):
|
| 793 |
+
phone = phone[1:]
|
| 794 |
+
transformed_data['phone'] = phone
|
| 795 |
+
logging.debug(f"Transformed data after phone processing: {transformed_data}")
|
| 796 |
+
|
| 797 |
+
transformed_data['web_st'] = web_st_value
|
| 798 |
+
|
| 799 |
+
new_messages = transformed_data.get('b_mess', "")
|
| 800 |
+
if current_messages:
|
| 801 |
+
transformed_data['b_mess'] = current_messages + "; " + new_messages
|
| 802 |
+
else:
|
| 803 |
+
transformed_data['b_mess'] = new_messages
|
| 804 |
+
logging.debug(f"Transformed data after message processing: {transformed_data}")
|
| 805 |
+
|
| 806 |
+
if user:
|
| 807 |
+
update_query = "UPDATE contacts SET "
|
| 808 |
+
update_values = []
|
| 809 |
+
for column, value in transformed_data.items():
|
| 810 |
+
update_query += f"{column} = ?, "
|
| 811 |
+
update_values.append(value)
|
| 812 |
+
update_query = update_query.rstrip(", ") + " WHERE email = ?"
|
| 813 |
+
update_values.append(email)
|
| 814 |
+
logging.debug(f"Update query: {update_query} with values: {update_values}")
|
| 815 |
+
cursor.execute(update_query, update_values)
|
| 816 |
+
else:
|
| 817 |
+
columns = ', '.join(transformed_data.keys())
|
| 818 |
+
placeholders = ', '.join('?' for _ in transformed_data)
|
| 819 |
+
insert_query = f"INSERT INTO contacts ({columns}) VALUES ({placeholders})"
|
| 820 |
+
insert_values = list(transformed_data.values())
|
| 821 |
+
logging.debug(f"Insert query: {insert_query} with values: {insert_values}")
|
| 822 |
+
cursor.execute(insert_query, insert_values)
|
| 823 |
|
| 824 |
conn.commit()
|
| 825 |
conn.close()
|
| 826 |
logging.debug(f"User with email {email} processed successfully")
|
| 827 |
|
| 828 |
+
# Отправляем данные в Google форму
|
| 829 |
+
url = generate_gog_url(transformed_data)
|
| 830 |
+
send_request(url, {})
|
| 831 |
+
|
| 832 |
+
def send_request(url, data):
|
| 833 |
+
response = requests.post(url, data=data)
|
| 834 |
+
if response.status_code == 200:
|
| 835 |
+
logging.info(f"Request sent successfully: {response.url}")
|
| 836 |
+
else:
|
| 837 |
+
logging.error(f"Failed to send request: {response.status_code} - {response.text}")
|
| 838 |
|
| 839 |
@app.route('/send_request', methods=['POST'])
|
| 840 |
+
def send_request_route():
|
| 841 |
token = request.form.get('token')
|
| 842 |
min_date = request.form.get('minDate')
|
| 843 |
type = request.form.get('type')
|
|
|
|
| 948 |
else:
|
| 949 |
return jsonify({'error': 'Failed to fetch data from the API'}), response.status_code
|
| 950 |
|
| 951 |
+
def generate_gog_url(user_data):
|
| 952 |
+
data_dict = {
|
| 953 |
+
'name': quote(user_data.get('name', '')),
|
| 954 |
+
'email': quote(user_data.get('email', '')),
|
| 955 |
+
'phone': quote(user_data.get('phone', '')),
|
| 956 |
+
'vk_id': quote(user_data.get('vk_id', '')),
|
| 957 |
+
'chat_id': quote(user_data.get('chat_id', '')),
|
| 958 |
+
'ws_st': quote(user_data.get('ws_st', '')),
|
| 959 |
+
'ws_stop': quote(user_data.get('ws_stop', '')),
|
| 960 |
+
'web_st': quote(user_data.get('web_st', '')),
|
| 961 |
+
'fin_prog': quote(user_data.get('fin_prog', '')),
|
| 962 |
+
'b_city': quote(user_data.get('b_city', '')),
|
| 963 |
+
'b_fin': quote(user_data.get('b_fin', '')),
|
| 964 |
+
'b_ban': quote(user_data.get('b_ban', '')),
|
| 965 |
+
'b_ign': quote(user_data.get('b_ign', '')),
|
| 966 |
+
'b_baners': quote(user_data.get('b_baners', '')),
|
| 967 |
+
'b_butt': quote(user_data.get('b_butt', '')),
|
| 968 |
+
'b_mess': quote(user_data.get('b_mess', '')),
|
| 969 |
+
'shop_st': quote(user_data.get('shop_st', '')),
|
| 970 |
+
'curator': quote(user_data.get('curator', '')),
|
| 971 |
+
'pr1': quote(user_data.get('pr1', '')),
|
| 972 |
+
'pr2': quote(user_data.get('pr2', '')),
|
| 973 |
+
'pr3': quote(user_data.get('pr3', '')),
|
| 974 |
+
'pr4': quote(user_data.get('pr4', '')),
|
| 975 |
+
'pr5': quote(user_data.get('pr5', '')),
|
| 976 |
+
'gc_url': quote(user_data.get('gc_url', '')),
|
| 977 |
+
'key_pr': quote(user_data.get('key_pr', '')),
|
| 978 |
+
'n_con': quote(user_data.get('n_con', '')),
|
| 979 |
+
'canal': quote(user_data.get('canal', '')),
|
| 980 |
+
'data_t': quote(user_data.get('data_t', '')),
|
| 981 |
+
'utm_source': quote(user_data.get('utm_source', '')),
|
| 982 |
+
'utm_medium': quote(user_data.get('utm_medium', '')),
|
| 983 |
+
'utm_campaign': quote(user_data.get('utm_campaign', '')),
|
| 984 |
+
'utm_term': quote(user_data.get('utm_term', '')),
|
| 985 |
+
'utm_content': quote(user_data.get('utm_content', ''))
|
| 986 |
+
}
|
| 987 |
+
return gog_url.format(**data_dict)
|
| 988 |
|
| 989 |
|
| 990 |
|