artbobylev.ru

Как добавить 15 000 товаров в VK-Маркет?

15 000 – максимально допустимое число товаров сообщества Вконтакте.

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

Под «свойствами у товара» подразумевается тег <param> внутри <offer>. Если действительно добавить больше двух – они все попадут в название товара и он будет отклонен, как несоответствующий правилам.

Ограничения этим не заканчиваются – если вы хотите, чтобы на странице товара кнопка «Купить» вела на ваш сайт, потребуется поразбираться, передачи <url> в фиде будет недостаточно.

У вконтакте есть свой собственный api маркета. С его помощью можно добавлять, изменять и удалять товары.

Вы можете сразу осуществлять загрузку, используя api, но мне по-прежнему кажется более удобным способом сначала загрузить товарный фид, а потом изменить нужные мне поля.

Где взять access_token

Для обращения к api vk нужен токен. Достаточно создать любое приложение и на одной из страниц документации попробовать отправить тестовый запрос:

После нажатия кнопки «Разрешить» откроется страница, в адресной строке которой содержится необходимый нам access_token.

Теперь можно обращаться к API. План такой:

  1. загрузить товарный фид;
  2. получить список id загруженных товаров;
  3. пройтись по каждому товару и внести нужное изменение.

Как узнать 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 категории товаров, добавил ссылки, ведущие на сайт. Жду наплыва покупателей!


Читать ещё:

⟲ на главную

Кто я?

→ Бобылев Артём

Я программист. Нет, инди-разработчик – люблю в одиночку заниматься разработкой своих небольших проектов. Сейчас занят интерфейсами над производством, например:

predstav.store

onlytone.ru

GitCloths

Подпишись на мою рассылку!