artbobylev.ru
Как добавить 15 000 товаров в VK-Маркет?
15 000 – максимально допустимое число товаров сообщества Вконтакте.
Для такой массовой загрузки требуется автоматизация. VK-Маркет поддерживает опцию импорта товаров из товарного-фида формата YML, но с некоторыми оговорками:
Под «свойствами у товара» подразумевается тег <param>
внутри <offer>
. Если действительно добавить больше двух – они все попадут в название товара и он будет отклонен, как несоответствующий правилам.
Ограничения этим не заканчиваются – если вы хотите, чтобы на странице товара кнопка «Купить» вела на ваш сайт, потребуется поразбираться, передачи <url>
в фиде будет недостаточно.
У вконтакте есть свой собственный api маркета. С его помощью можно добавлять, изменять и удалять товары.
Вы можете сразу осуществлять загрузку, используя api, но мне по-прежнему кажется более удобным способом сначала загрузить товарный фид, а потом изменить нужные мне поля.
Где взять access_token
Для обращения к api vk нужен токен. Достаточно создать любое приложение и на одной из страниц документации попробовать отправить тестовый запрос:
После нажатия кнопки «Разрешить» откроется страница, в адресной строке которой содержится необходимый нам access_token
.
Теперь можно обращаться к API. План такой:
- загрузить товарный фид;
- получить список id загруженных товаров;
- пройтись по каждому товару и внести нужное изменение.
Как узнать id категории товара
У категорий товаров вконтакте свои id, при загрузке через фид их проставляет алгоритм, но не всегда, как надо. Исправим на третьем шаге, а пока подготовимся, узнав id нужной нам категории. В этом поможет простой скрипт с curl
:
#!/bin/bash
ACCESS_TOKEN="***"
API_URL="https://api.vk.com/method/market.getCategories"
curl "${API_URL}" -F "access_token=${ACCESS_TOKEN}"
Поиском по тексту ищется id
нужной категории.
Получение информации о загруженных товарах
Понадобится узнать id
сообщества – обычно он в адресе, но если вы поменяли ссылку для группы, id
можно найти в разделе «Управление». Присвойте значение id
переменной owner_id
.
Метод market.get возвращает информацию только для 200 товаров. С помощью параметра offset
и цикла собираем все данные с помощью скрипта getitems.sh
:
#!/bin/bash
ACCESS_TOKEN="***"
owner_id="***"
API_URL="https://api.vk.com/method/market.get"
result=$(curl "${API_URL}" -F "access_token=${ACCESS_TOKEN}" -F "owner_id=-${owner_id}" -F "count=200" -F "offset=0" -F "v=5.199")
echo $result | jq -r '.[] | .items[] | "\(.id) | \(.sku)"';
items_num=$(echo $result | jq '.[] | .count')
offset_num=$(( items_num / 200))
for ((i = 1; i <= offset_num; i++)); do
offset=$(( 200 * i ))
result=$(curl "${API_URL}" -F "access_token=${ACCESS_TOKEN}" -F "owner_id=-${owner_id}" -F "count=200" -F "offset=${offset}" -F "v=5.199")
echo "${result}" | jq -r '.[] | .items[] | "\(.id) | \(.sku)"';
done
bash getitems.sh > items_data.csv
Вывод этого скрипта – внутренний id
товара вконтакте и sku
, артикул нашего товара, по которому затем вытащим всю соответствующую информацию из json с данными о товарах.
Внесение изменений
Метод market.edit позволяет вносить изменения в информацию о товаре, указав два обязательных параметра – owner_id
(идентификатор сообщества) и item_id
(индентификатор товара).
Пример скрипта item_edit.sh
на bash:
#!/bin/bash
ACCESS_TOKEN="***"
owner_id="***"
API_URL="https://api.vk.com/method/market.edit"
item_id=$1
sku=$2
slug=$(jq -r ".[] | select(.pk == ${sku}) | .slug" products.json )
curl --max-time 10"${API_URL}" -F "access_token=${ACCESS_TOKEN}" -F "owner_id=-${owner_id}" -F "item_id=${item_id}" -F "category_id=***" -F "url=" -F "v=5.199"
Даем на вход скрипту item_id
и sku
, с помощью которого достаем всю нужную информацию для внесения из products.json
.
Теперь в цикле меняем информацию о каждом товаре:
while IFS="|" read item_id sku; \
echo "$item_id|$sku"
do response=$(bash edit_item.sh $item_id $sku); \
echo "$response"; \
result=$(echo "$response" | jq '.response'); \
if [[ "$result" == 1 ]]; then \
sed -i ".bak" "s/$item_id|$print_id/$item_id|$print_id|done/" all_vk_myfabrics.items ; \
else break;
fi; sleep 1 ;done < items_data.csv
Добавлять некоторую задержку, например, sleep 1
необходимо, иначе ответом будет error: Too many requests
. Кроме того, в какой-то момент возможна ошибка Captcha needed
. Изменения вноситься не будут, пока не решить капчу. Для этого нужно перейти по ссылке captcha_img
, решить капчу и добавить к запросу curl
captcha_key
с решением капчи и captcha_sid
:
-F "captcha_key=" -F "captcha_sid="
Именно так я добавил 5000 футболок в группу predstav.store – загрузил товарный фид, изменил через API категории товаров, добавил ссылки, ведущие на сайт. Жду наплыва покупателей!