15 000 – максимально допустимое число товаров сообщества Вконтакте.
Для такой массовой загрузки требуется автоматизация. VK-Маркет поддерживает опцию импорта товаров из товарного-фида формата YML, но с некоторыми оговорками:

Под «свойствами у товара» подразумевается тег <param> внутри <offer>. Если действительно добавить больше двух – они все попадут в название товара и он будет отклонен, как несоответствующий правилам.
Ограничения этим не заканчиваются – если вы хотите, чтобы на странице товара кнопка «Купить» вела на ваш сайт, потребуется поразбираться, передачи <url> в фиде будет недостаточно.
У вконтакте есть свой собственный api маркета. С его помощью можно добавлять, изменять и удалять товары.
Вы можете сразу осуществлять загрузку, используя api, но мне по-прежнему кажется более удобным способом сначала загрузить товарный фид, а потом изменить нужные мне поля.
Для обращения к api vk нужен токен. Достаточно создать любое приложение и на одной из страниц документации попробовать отправить тестовый запрос:

После нажатия кнопки «Разрешить» откроется страница, в адресной строке которой содержится необходимый нам access_token.
Теперь можно обращаться к API. План такой:
У категорий товаров вконтакте свои 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 "${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 категории товаров, добавил ссылки, ведущие на сайт. Жду наплыва покупателей!