This topic contains 0 replies, has 1 voice.
Last updated by aleksandrsC 5 days, 9 hours ago.
Assisted by: Lauren.
Author | Posts |
---|---|
January 17, 2025 at 4:05 pm #16606898 | |
aleksandrsC |
Background of the issue: The script modifies only the main language via requests by product ID, expecting the other languages to synchronize automatically for stock and price. While the synchronization works, the translations for these products are also overwritten and end up matching the main language. When I perform the same process manually through the admin panel, everything works as expected, and the translations are not reset. from googleapiclient.discovery import build import requests from concurrent.futures import ThreadPoolExecutor, as_completed from datetime import datetime # Для работы со временем # Настройки Google Sheets API SPREADSHEET_ID = '-------------------' # ID вашей таблицы SHEET_NAME = 'Hook' # Имя листа в таблице # Настройки WooCommerce API WC_API_URL = '<em><u>hidden link</u></em>' CONSUMER_KEY = '--------' CONSUMER_SECRET = '--------------' # Фиксация времени начала start_time = datetime.now() print(f"Время начала: {start_time.strftime('%Y-%m-%d %H:%M:%S')}") # Подключение к Google Sheets service = build('sheets', 'v4', developerKey='--------------------') sheet = service.spreadsheets() # Считывание данных range_name = f'{SHEET_NAME}!A:E' # Диапазон данных (например, A и E колонки) result = sheet.values().get(spreadsheetId=SPREADSHEET_ID, range=range_name).execute() rows = result.get('values', []) # Проверка: есть ли данные if not rows: print("Нет данных для обработки.") exit() # Формируем список продуктов для обновления products_to_update = [] print("Данные из таблицы Google Sheets:") for row in rows: if len(row) >= 5: # Убедимся, что нужные колонки существуют product_id = row[1] # ID продукта in_stock = row[3] # Статус наличия price = row[4] # Цена stock_status = "instock" if in_stock == '1' else "outofstock" # Добавляем продукт в список для batch-обновления products_to_update.append({ "id": int(product_id), "stock_status": stock_status, "regular_price": price }) print(f"ID продукта: {product_id}, В наличии: {stock_status}, Цена: {price}") # Если нечего обновлять, завершаем выполнение if not products_to_update: print("Нет товаров для обновления.") exit() # Максимальное количество товаров в одном запросе BATCH_SIZE = 50 MAX_WORKERS = 3 # Количество потоков для асинхронной обработки # Функция для отправки batch-запроса def send_batch_update(batch, start_index): payload = {"update": batch} try: response = requests.post(WC_API_URL, auth=(CONSUMER_KEY, CONSUMER_SECRET), json=payload) if response.status_code == 200: print(f"Успешно обновлены товары (с {start_index + 1} по {start_index + len(batch)}):") for updated_product in response.json().get("update", []): print(f"- Product ID {updated_product['id']}: {updated_product['stock_status']}, Цена: {updated_product.get('regular_price', 'N/A')}") else: print(f"Ошибка при обновлении батча с {start_index + 1} по {start_index + len(batch)}: {response.text}") except Exception as e: print(f"Ошибка в запросе с {start_index + 1} по {start_index + len(batch)}: {e}") # Функция разделения на батчи и асинхронной отправки def update_products_bulk_async(products): with ThreadPoolExecutor(max_workers=MAX_WORKERS) as executor: futures = [] for i in range(0, len(products), BATCH_SIZE): batch = products[i:i + BATCH_SIZE] futures.append(executor.submit(send_batch_update, batch, i)) # Обработка завершенных задач for future in as_completed(futures): try: future.result() # Проверяем результат выполнения except Exception as e: print(f"Ошибка выполнения задачи: {e}") # Основной код print("Начало массового обновления товаров...") try: update_products_bulk_async(products_to_update) except Exception as e: print(f"Ошибка при выполнении batch-обновления: {e}") print("Обновление завершено.") # Фиксация времени окончания end_time = datetime.now() print(f"Время окончания: {end_time.strftime('%Y-%m-%d %H:%M:%S')}") # Вывод длительности выполнения duration = end_time - start_time print(f"Общее время выполнения: {duration}") print("Обновление завершено.") Symptoms: Questions: |
The topic ‘[Closed] Translations resets after API batch update’ is closed to new replies.