Хотелось бы узнать каким образом можно получить первую фотографию карточки товара под которым задают вопрос или отзыв.
Хотелось бы узнать каким образом можно получить первую фотографию карточки товара под которым задают вопрос или отзыв.
А вообще я разобрался Как из nmId получается фото
Дальше вызывается функция:
get_first_card_image_by_nmid(acc, nm_id)get_first_card_image_by_nmid(acc, nm_id)Эта функция делает:
Сначала проверяет локальный кеш wb_image_cache.json:
key = str(nm_int)
cached = IMAGE_CACHE.get(key)
if cached:
return cached, None
Если фото уже находили раньше — WB не дёргается, возвращается кеш.
Потом отправляется запрос:
POST https://content-api.wildberries.ru/content/v2/get/cards/list
Тело запроса:
payload = {
"settings": {
"cursor": {"limit": 100},
"filter": {
"textSearch": str(nm_int),
"allowedCategoriesOnly": True,
"withPhoto": -1
}
}
}
Смысл:
textSearch = nmId (как строка). Это такой “простой” способ найти карточку по id.withPhoto: -1 — просим карточки независимо от наличия фото (но дальше всё равно проверяем photos).Авторизация:
headers={"Authorization": acc["token"], "Content-Type": "application/json"}
Из ответа берётся:
cards = data.get("cards") or []
card = cards[0]
photos = card.get("photos") or []
ph0 = photos[0]
Дальше выбирается URL в приоритетном порядке:
url = ph0.get("big") or ph0.get("square") or ph0.get("c516x688") ...
То есть “фото первого товара” = первая фотка из массива photos у первой найденной карточки.
Если URL найден:
IMAGE_CACHE[key] = url save_image_cache()
Когда ты отправляешь вопрос/отзыв, ты пытаешься отправить одним сообщением: фото + подпись + кнопки:
bot.send_photo(
CHAT_ID,
photo=photo_url,
caption=caption,
parse_mode="HTML",
reply_markup=...
)
Если фото не получилось — fallback: обычное текстовое сообщение. вот кому если надо
Ну, так-то ВБ - это не база данных. Такие вещи на своей стороне лучше хранить.
А вообще я разобрался Как из nmId получается фото
Дальше вызывается функция:
get_first_card_image_by_nmid(acc, nm_id)get_first_card_image_by_nmid(acc, nm_id)Эта функция делает:
Сначала проверяет локальный кеш wb_image_cache.json:
key = str(nm_int)
cached = IMAGE_CACHE.get(key)
if cached:
return cached, None
Если фото уже находили раньше — WB не дёргается, возвращается кеш.
Потом отправляется запрос:
POST https://content-api.wildberries.ru/content/v2/get/cards/list
Тело запроса:
payload = {
"settings": {
"cursor": {"limit": 100},
"filter": {
"textSearch": str(nm_int),
"allowedCategoriesOnly": True,
"withPhoto": -1
}
}
}
Смысл:
textSearch = nmId (как строка). Это такой “простой” способ найти карточку по id.withPhoto: -1 — просим карточки независимо от наличия фото (но дальше всё равно проверяем photos).Авторизация:
headers={"Authorization": acc["token"], "Content-Type": "application/json"}
Из ответа берётся:
cards = data.get("cards") or []
card = cards[0]
photos = card.get("photos") or []
ph0 = photos[0]
Дальше выбирается URL в приоритетном порядке:
url = ph0.get("big") or ph0.get("square") or ph0.get("c516x688") ...
То есть “фото первого товара” = первая фотка из массива photos у первой найденной карточки.
Если URL найден:
IMAGE_CACHE[key] = url save_image_cache()
Когда ты отправляешь вопрос/отзыв, ты пытаешься отправить одним сообщением: фото + подпись + кнопки:
bot.send_photo(
CHAT_ID,
photo=photo_url,
caption=caption,
parse_mode="HTML",
reply_markup=...
)
Если фото не получилось — fallback: обычное текстовое сообщение. вот кому если надо