DmitrMakeev commited on
Commit
7b49b60
·
verified ·
1 Parent(s): 09ba895

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +86 -105
app.py CHANGED
@@ -782,140 +782,121 @@ def send_request():
782
 
783
  DATABASE_NAME = 'data_gc.db'
784
  def update_or_insert_user(db_name, user_data, mapping_template):
785
- conn = sqlite3.connect(db_name)
786
- cursor = conn.cursor()
787
 
788
- # Получение email пользователя из данных
789
- email = user_data.get('email')
790
- if not email:
791
- logging.error(f"User data missing email: {user_data}")
792
- return
793
 
794
- logging.debug(f"Processing user with email: {email}")
795
-
796
- # Проверка существования пользователя в базе данных по email
797
- cursor.execute("SELECT web_st FROM contacts WHERE email = ?", (email,))
798
- user = cursor.fetchone()
799
- logging.debug(f"User found: {user}")
800
 
801
- # Вынесение увеличения значения web_st в отдельный блок
802
  web_st_value = 1 # Инициализация значения web_st
803
- if user:
804
- # Проверка текущего значения web_st и его инкрементация
805
- current_web_st = user[0] if user[0] is not None and user[0] != "" else 0
806
- web_st_value = int(current_web_st) + 1
807
- logging.debug(f"Calculated web_st_value: {web_st_value}")
808
-
809
- # Обновление значения web_st
810
- cursor.execute("UPDATE contacts SET web_st = ? WHERE email = ?", (web_st_value, email))
811
- conn.commit()
812
- conn.close()
813
- logging.debug(f"User {email} web_st updated to {web_st_value}")
814
  else:
815
- conn.close()
816
- logging.debug(f"User {email} not found, proceeding with insert")
817
 
818
- # Открываем соединение снова для остальных операций
819
- conn = sqlite3.connect(db_name)
820
- cursor = conn.cursor()
821
 
822
- # Преобразование данных пользователя на основе шаблона сопоставления
823
- transformed_data = {}
824
- for json_key, db_column in mapping_template.items():
825
- value = user_data.get(json_key, "")
826
- if isinstance(value, list):
827
- transformed_data[db_column] = "1" if value else "0"
828
  else:
829
- transformed_data[db_column] = str(value)
830
- logging.debug(f"Transformed data: {transformed_data}")
831
 
832
- # Заполнение обязательных полей значениями по умолчанию
833
- required_fields = [
834
  "vk_id", "chat_id", "ws_st", "ws_stop", "web_st", "fin_prog",
835
  "b_city", "b_fin", "b_ban", "b_ign", "b_baners", "b_butt", "b_mess",
836
  "shop_st", "curator", "pr1", "pr2", "pr3", "pr4", "pr5", "ad_url",
837
  "key_pr", "n_con", "canal", "data_t"
838
  ]
839
- for field in required_fields:
840
- if field not in transformed_data:
841
- transformed_data[field] = ""
842
- logging.debug(f"Transformed data after adding required fields: {transformed_data}")
843
-
844
- # Обработка номера телефона, если он есть
845
- if 'phone' in user_data:
846
- phone = user_data['phone']
847
- if phone.startswith('+'):
848
- phone = phone[1:]
849
- transformed_data['phone'] = phone
850
- logging.debug(f"Transformed data after phone processing: {transformed_data}")
851
-
852
- # Добавление значения web_st в данные для вставки
853
- transformed_data['web_st'] = web_st_value
854
-
855
- # Обновление данных пользователя в базе данных
856
- if user:
857
- update_query = "UPDATE contacts SET "
858
- update_values = []
859
- for column, value in transformed_data.items():
860
- update_query += f"{column} = ?, "
861
- update_values.append(value)
862
- update_query = update_query.rstrip(", ") + " WHERE email = ?"
863
- update_values.append(email)
864
- logging.debug(f"Update query: {update_query} with values: {update_values}")
865
- cursor.execute(update_query, update_values)
866
  else:
867
- columns = ', '.join(transformed_data.keys())
868
- placeholders = ', '.join('?' for _ in transformed_data)
869
- insert_query = f"INSERT INTO contacts ({columns}) VALUES ({placeholders})"
870
- insert_values = list(transformed_data.values())
871
- logging.debug(f"Insert query: {insert_query} with values: {insert_values}")
872
- cursor.execute(insert_query, insert_values)
873
-
874
- # Подтверждение изменений и закрытие соединения
875
- conn.commit()
876
- conn.close()
877
- logging.debug(f"User with email {email} processed successfully")
878
-
879
- @app.route('/send_get_request', methods=['GET'])
880
  def send_get_request():
881
- token = request.args.get('token')
882
- webinarId = request.args.get('webinarId')
883
- url = f'https://online.bizon365.ru/api/v1/webinars/reports/get?webinarId={webinarId}'
884
 
885
- response = requests.get(url, headers={'X-Token': token})
886
 
887
- if response.status_code == 200:
888
- data = response.json()
889
 
890
- report = data.get('report', {})
891
- messages = data.get('messages', {})
892
 
893
- report_json_str = report.get('report', '{}')
894
  try:
895
- report_json = json.loads(report_json_str)
896
  except json.JSONDecodeError:
897
- report_json = {}
898
 
899
- messages_json_str = report.get('messages', '{}')
900
  try:
901
- messages_json = json.loads(messages_json_str)
902
  except json.JSONDecodeError:
903
- messages_json = {}
904
 
905
- users_meta = report_json.get('usersMeta', {})
906
 
907
- # Обновление или добавление каждого пользователя в базу данных data_gc.db
908
- processed_emails = set()
909
- for user_id, user_data in users_meta.items():
910
- user_data['messages'] = messages_json
911
- email = user_data.get('email')
912
- if email not in processed_emails:
913
- update_or_insert_user(DATABASE_NAME, user_data, mapping_template)
914
- processed_emails.add(email)
915
 
916
- return jsonify({'status': 'User data saved successfully'})
917
  else:
918
- return jsonify({'error': 'Failed to fetch data from the API'}), response.status_code
919
 
920
 
921
 
 
782
 
783
  DATABASE_NAME = 'data_gc.db'
784
  def update_or_insert_user(db_name, user_data, mapping_template):
785
+ conn = sqlite3.connect(db_name) # Подключение к базе данных
786
+ cursor = conn.cursor() # Создание курсора для выполнения SQL-запросов
787
 
788
+ email = user_data.get('email') # Получение email пользователя из данных
789
+ if not email: # Если email отсутствует
790
+ return # Прекращение выполнения функции, так как нет email
 
 
791
 
792
+ cursor.execute("SELECT web_st FROM contacts WHERE email = ?", (email,)) # Выполнение SQL-запроса для проверки существования пользователя
793
+ user = cursor.fetchone() # Получение первого найденного результата
 
 
 
 
794
 
 
795
  web_st_value = 1 # Инициализация значения web_st
796
+ if user: # Если пользователь найден
797
+ current_web_st = user[0] if user[0] is not None and user[0] != "" else 0 # Получение текущего значения web_st или установка в 0, если значение пустое
798
+ web_st_value = int(current_web_st) + 1 # Увеличение значения web_st на 1
799
+
800
+ cursor.execute("UPDATE contacts SET web_st = ? WHERE email = ?", (web_st_value, email)) # Выполнение SQL-запроса для обновления значения web_st
801
+ conn.commit() # Подтверждение изменений в базе данных
802
+ conn.close() # Закрытие соединения с базой данных
803
+
 
 
 
804
  else:
805
+ conn.close() # Закрытие соединения, если пользователь не найден
 
806
 
807
+ conn = sqlite3.connect(db_name) # Повторное подключение к базе данных
808
+ cursor = conn.cursor() # Создание нового курсора
 
809
 
810
+ transformed_data = {} # Создание словаря для хранения преобразованных данных
811
+ for json_key, db_column in mapping_template.items(): # Проход по всем элементам шаблона сопоставления
812
+ value = user_data.get(json_key, "") # Получение значения из данных пользователя по ключу json_key
813
+ if isinstance(value, list): # Если значение является списком
814
+ transformed_data[db_column] = "1" if value else "0" # Преобразование списка в "1" или "0"
 
815
  else:
816
+ transformed_data[db_column] = str(value) # Преобразование значения в строку
817
+ logging.debug(f"Transformed data: {transformed_data}") # Логирование преобразованных данных
818
 
819
+ required_fields = [ # Список обязательных полей
 
820
  "vk_id", "chat_id", "ws_st", "ws_stop", "web_st", "fin_prog",
821
  "b_city", "b_fin", "b_ban", "b_ign", "b_baners", "b_butt", "b_mess",
822
  "shop_st", "curator", "pr1", "pr2", "pr3", "pr4", "pr5", "ad_url",
823
  "key_pr", "n_con", "canal", "data_t"
824
  ]
825
+ for field in required_fields: # Проход по всем обязательным полям
826
+ if field not in transformed_data: # Если поле отсутствует в преобразованных данных
827
+ transformed_data[field] = "" # Установка значения по умолчанию для отсутствующего поля
828
+ logging.debug(f"Transformed data after adding required fields: {transformed_data}") # Логирование данных после добавления обязательных полей
829
+
830
+ if 'phone' in user_data: # Если в данных пользователя присутствует телефон
831
+ phone = user_data['phone'] # Получение номера телефона
832
+ if phone.startswith('+'): # Если телефон начинается с "+"
833
+ phone = phone[1:] # Удаление "+" из начала номера телефона
834
+ transformed_data['phone'] = phone # Добавление номера телефона в преобразованные данные
835
+ logging.debug(f"Transformed data after phone processing: {transformed_data}") # Логирование данных после обработки номера телефона
836
+
837
+ transformed_data['web_st'] = web_st_value # Добавление значения web_st в преобразованные данные
838
+
839
+ if user: # Если пользователь найден
840
+ update_query = "UPDATE contacts SET " # Начало формирования SQL-запроса для обновления данных
841
+ update_values = [] # Список для хранения значений для обновления
842
+ for column, value in transformed_data.items(): # Проход по всем преобразованным данным
843
+ update_query += f"{column} = ?, " # Добавление столбца и placeholder в запрос
844
+ update_values.append(value) # Добавление значения в список значений
845
+ update_query = update_query.rstrip(", ") + " WHERE email = ?" # Завершение запроса и добавление условия
846
+ update_values.append(email) # Добавление email в список значений
847
+ logging.debug(f"Update query: {update_query} with values: {update_values}") # Логирование запроса и значений
848
+ cursor.execute(update_query, update_values) # Выполнение SQL-запроса на обновление
 
 
 
849
  else:
850
+ columns = ', '.join(transformed_data.keys()) # Формирование списка столбцов для вс��авки
851
+ placeholders = ', '.join('?' for _ in transformed_data) # Формирование списка placeholders
852
+ insert_query = f"INSERT INTO contacts ({columns}) VALUES ({placeholders})" # Формирование SQL-запроса для вставки данных
853
+ insert_values = list(transformed_data.values()) # Получение значений для вставки
854
+ logging.debug(f"Insert query: {insert_query} with values: {insert_values}") # Логирование запроса и значений
855
+ cursor.execute(insert_query, insert_values) # Выполнение SQL-запроса на вставку
856
+
857
+ conn.commit() # Подтверждение изменений в базе данных
858
+ conn.close() # Закрытие соединения с базой данных
859
+ logging.debug(f"User with email {email} processed successfully") # Логирование успешной обработки пользователя
860
+
861
+ @app.route('/send_get_request', methods=['GET']) # Определение маршрута для обработки GET-запросов
 
862
  def send_get_request():
863
+ token = request.args.get('token') # Получение значения параметра token из запроса
864
+ webinarId = request.args.get('webinarId') # Получение значения параметра webinarId из запроса
865
+ url = f'https://online.bizon365.ru/api/v1/webinars/reports/get?webinarId={webinarId}' # Формирование URL для запроса
866
 
867
+ response = requests.get(url, headers={'X-Token': token}) # Выполнение GET-запроса с заголовком авторизации
868
 
869
+ if response.status_code == 200: # Если статус ответа равен 200 (OK)
870
+ data = response.json() # Получение данных в формате JSON
871
 
872
+ report = data.get('report', {}) # Получение раздела 'report' из данных
873
+ messages = data.get('messages', {}) # Получение раздела 'messages' из данных
874
 
875
+ report_json_str = report.get('report', '{}') # Получение строки JSON для отчета
876
  try:
877
+ report_json = json.loads(report_json_str) # Преобразование строки JSON в объект
878
  except json.JSONDecodeError:
879
+ report_json = {} # Установка пустого объекта при ошибке преобразования
880
 
881
+ messages_json_str = report.get('messages', '{}') # Получение строки JSON для сообщений
882
  try:
883
+ messages_json = json.loads(messages_json_str) # Преобразование строки JSON в объект
884
  except json.JSONDecodeError:
885
+ messages_json = {} # Установка пустого объекта при ошибке преобразования
886
 
887
+ users_meta = report_json.get('usersMeta', {}) # Получение метаинформации пользователей из отчета
888
 
889
+ processed_emails = set() # Создание множества для хранения обработанных email-ов
890
+ for user_id, user_data in users_meta.items(): # Проход по всем пользователям
891
+ user_data['messages'] = messages_json # Добавление сообщений в данные пользователя
892
+ email = user_data.get('email') # Получение email пользователя
893
+ if email not in processed_emails: # Если email еще не был обработан
894
+ update_or_insert_user(DATABASE_NAME, user_data, mapping_template) # Обновление или вставка данных пользо��ателя в базу данных
895
+ processed_emails.add(email) # Добавление email в множество обработанных
 
896
 
897
+ return jsonify({'status': 'User data saved successfully'}) # Возвращение успешного ответа
898
  else:
899
+ return jsonify({'error': 'Failed to fetch data from the API'}), response.status_code # Возвращение ошибки в случае неудачного запроса
900
 
901
 
902