Shopify API: импорт списка товаров в формате JSON через частное приложение

По сути, у меня есть файл со списком продуктов, которые я хотел бы добавить в свой магазин shopify, я совершенно уверен, что он правильно отформатирован, хотя, если это не так, скажите мне, что исправить. Мне было интересно, как с помощью запроса POST через частное приложение я могу получить их в своем магазине. Файл выглядит так:

{
"product": {
    "title": "TITLE HERE",
    "body_html": "DESCRIPTION HERE",
    "vendor": "VENDOR HERE",
    "product_type": "PRODUCT TYPE HERE",
    "variants": {
        "option1": "Default",
        "price": "PRICE HERE"
    },
    "images": {
        "src": "LINK TO IMAGE HERE"
    }
},
"product": {
    "title": "TITLE HERE",
    "body_html": "DESCRIPTION HERE",
    "vendor": "VENDOR HERE",
    "product_type": "PRODUCT TYPE HERE",
    "variants": {
        "option1": "Default",
        "price": "PRICE HERE"
    },
    "images": {
        "src": "LINK TO IMAGE HERE"
    }
},
"product": {
    "title": "TITLE HERE",
    "body_html": "DESCRIPTION HERE",
    "vendor": "VENDOR HERE",
    "product_type": "PRODUCT TYPE HERE",
    "variants": {
        "option1": "Default",
        "price": "PRICE HERE"
    },
    "images": {
        "src": "LINK TO IMAGE HERE"
    }
},

и так далее... Этот файл называется "products.json". Есть ли какой-либо POST-запрос, который позволил бы мне просто отправить этот файл, или мне нужно было бы каким-то образом обработать и разбить его и передать его API с помощью PHP или Ruby... Я потратил большую часть дня на извлечение всех 500 + продукты из поврежденной резервной копии MySQL CMS и их очистка в JSON (с использованием PHP и некоторых регулярных выражений), поэтому безболезненное решение будет высоко оценено.


person Community    schedule 24.07.2012    source источник
comment
Это недопустимый json, у вас есть несколько ключей product, возможно, вместо этого вам следует использовать массив.   -  person Musa    schedule 24.07.2012
comment
@Musa Я чувствую, что если я изменю ключ product на что-либо еще, API-интерфейс shopify не распознает формат и выдаст ошибку. Я попытался подражать формату, найденному в документах здесь. Может быть, вы могли бы взглянуть и дайте мне знать, как я должен форматировать его.   -  person    schedule 24.07.2012
comment
вы можете оставить «продукт» в качестве ключа, вам просто нужно изменить json в формате массива: {[product:...],[product:...]...}   -  person Tomer    schedule 24.07.2012
comment
@ ftom2 Хорошо, я могу сделать это, используя json_decode в PHP, но может ли ассоциативный массив иметь несколько элементов с одним и тем же ключом? Как это работает? Извините, если это глупый вопрос, я обычно не занимаюсь такими вещами...   -  person    schedule 24.07.2012
comment
Все строки JSON содержат только один объект product. Таким образом, похоже, что у вас может быть только 1 продукт, но он может иметь несколько вариантов, также то, что предлагает @ftom2, даст вам формат, отличный от того, что показано в ссылке.   -  person Musa    schedule 24.07.2012
comment
это будет массив массивов (или массив объектов продукта, если хотите), где первый массив основан на индексе (0,1,2...), а второй имеет продукт в качестве ключа, поэтому вы сделаете что-то вроде $arr[0]['продукт']. просто print_r массив и посмотреть, что вы получите   -  person Tomer    schedule 24.07.2012
comment
Хм, некоторые противоречивые идеи здесь. Итак, если я json_encode это и сохраню в переменной PHP, переменная будет содержать массив массивов, где внешний массив содержит индексы 0....n-1, где n-1 - количество продуктов, и каждый индекс хранит в себе ассоциативный массив, хранящий массив product, в котором хранятся компоненты и т. д. Это правильно? И как только у меня будет этот массив массивов, как мне отправить его в Shopify API?   -  person    schedule 24.07.2012


Ответы (2)


Вы не можете отправить несколько продуктов для создания одновременно, они должны быть представлены по отдельности. Документы, которые вы уже связали, объясняют все доступные конечные точки API и формат данных.

person John Duff    schedule 24.07.2012
comment
Итак, я попытался загрузить отдельный продукт с помощью PHP cURL и продолжал получать {"errors":"Error"} в качестве ответа. Вот что я пытаюсь опубликовать: {"product":{"title":"PRODUCT TITLE","body_html":"BODY HERE","vendor":"VENDOR HERE","product_type":"TYPE HERE","variants":{"option1":"Default","price":"100.00"},"images":{"src":"IMAGE URL"}}} . Я делаю это, используя эту функцию PHP: curl_setopt($session, CURLOPT_POST, true); curl_setopt($session, CURLOPT_POSTFIELDS,json_encode($cleanarray[0])); (и все остальные вещи, такие как curl_init и curl_close и т. д. Я понятия не имею, что я делаю неправильно.... - person ; 26.07.2012
comment
Можете ли вы попробовать самое базовое создание и посмотреть, работает ли оно? { product: { title: Burton Custom Freestlye 151, body_html: ‹strong›Хороший сноуборд!‹/strong›, vendor: Burton, product_type: Snowboard, tags: Barnes & Noble} } Кроме того, указали ли вы заголовки accepts и content type? - person John Duff; 30.07.2012
comment
Теперь это работает, я не отправлял заголовок типа контента. Спасибо. - person ; 05.08.2012

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

person Sanchit Singla    schedule 02.11.2012
comment
Не могли бы вы связать документацию о том, как создать это соединение с базой данных? - person Manza; 16.03.2016