דלג על ניווט
Sun Mon Tue Wed Thu Fri Sat
- 8:00 – 10:00 8:00 – 10:00 8:00 – 13:00 8:00 – 13:00 9:00 – 13:00 -
- 11:00 – 17:00 11:00 – 17:00 14:00 – 17:00 13:00 – 17:00 13:00 – 18:00 -

אזור זמן של תומך: America/New_York (GMT-05:00)

נושא זה מכיל 0 תגובות, יש ל 1קוֹל.

עודכן לאחרונה על ידי aleksandrsC לפני 5 ימים, 5 שעות.

בסיוע: Lauren.

מחבר פוסטים
ינואר 17, 2025בְּ- 4:05 pm #16606898

aleksandrsC

Background of the issue:
Hi, I wrote a script to update the stock and prices of products. However, I’ve noticed an issue: after each use, the translations for all the products involved in the process are reset.

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>קישור נסתר</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:
After each use of the script, the translations for all the products involved in the process are reset and end up matching the main language.

Questions:
Why do translations reset after using the script?
How can I prevent translations from being overwritten?

הנושא '[סגור] Translations resets after API batch update ' סגור לתשובות חדשות.