#shopify #shopify-api
Вопрос:
Я хочу создать экспорт данных о продуктах в формате CSV из магазина Shopify. Для каждого продукта я экспортирую данные, такие как название продукта, цена, URL-адрес изображения и т. Д… В этом экспорте я также хочу перечислить для каждого продукта все коллекции, к которым относится продукт, предпочтительно в иерархическом порядке, коллекции отображаются в меню навигации сайта (например, Мужчины > Рубашки >> Красные рубашки).
Если мое понимание API правильно, для каждого продукта мне нужно сделать отдельный вызов API сбора, чтобы получить список коллекций, к которым он принадлежит, а затем еще один вызов API коллекций, чтобы получить дескриптор каждой коллекции. Это звучит как множество вызовов API для каждого продукта.
- Есть ли более эффективный способ сделать это?
- Есть ли какой-либо способ выяснить вышеупомянутую иерархию коллекций?
Ответ №1:
К сожалению, как вы отметили, я не думаю, что существует эффективный способ сделать это из-за того, как структурирован API Shopify. Это не позволяет запрашивать коллекции из продуктов, а только продукты, запрашиваемые из коллекций. То есть нельзя увидеть, к каким коллекциям относится продукт, но можно увидеть, какие продукты принадлежат коллекции.
Ресурс ShopifyAPI::Collect
or ShopifyAPI::Collection
REST не возвращает информацию о вариантах продукта, необходимую для получения информации о ценах в соответствии с требованиями. Кроме того, ShopifyAPI::Collect
ограничивается только пользовательскими коллекциями и не будет работать для продуктов в ShopifyAPI::SmartCollection
s. По этой причине я предлагаю использовать GraphQL вместо REST для получения необходимой информации.
query ($collectionCursor: String, $productCursor: String){
collections(first: 1, after: $collectionCursor) {
edges {
cursor
node {
id
handle
products(first: 8, after: $productCursor){
edges{
cursor
node{
id
title
variants(first: 100){
edges{
node{
price
}
}
}
}
}
}
}
}
}
}
{
"collectionCursor": null,
"productCursor": null
}
$productCursor
Переменную можно использовать для перебора всех продуктов в коллекции и $collectionCursor
для перебора всех коллекций. Обратите внимание, что необходимо запросить только первые 100 вариантов, поскольку Shopify имеет жесткое ограничение на 100 вариантов для каждого продукта.
Один и тот же запрос можно использовать для перебора ShopifyAPI::SmartCollection
«s».
В качестве альтернативы тот же запрос с использованием REST API будет выглядеть примерно так в Ruby.
collections = ShopifyAPI::Collection.all # paginate
collection.each do |collection|
collection.products.each do |product|
product.title
# note the extra call the Product API to get varint info
ShopifyAPI::Product.find(product.id).variants.each do |varaint|
variant.price
end
end
end
Я не вижу никакого способа устранить недостатки с помощью запроса REST, но вы можете улучшить запросы GraphQL, используя массовые операции GraphQL от Shopify.