Дорогие читатели, позвольте представить вам программный сервис, разработанный для экспорта данных из электронных магазинов созданных на основе CMS OpenCart.
Информация для технических специалистов
Как может происходить выгрузка данных из магазина?
Использовать модуль или плагин, расширяющий функционал магзина, обратиться к программисту, если функционал модуля не соответствует вашим требованиям
Подключиться к базе данных магазина, выполнить подготовленные SQL скрипты и до нужной формы обработать напильником
Использовать REST API, и затем обработать результаты с использованием языка программирования, например PHP, Java, Javascript - до нужной формы обработать напильником
Нам необходимо получить данные из магазина в виде сложного набора данных с зависимостями Master-Detail
Первый возможный алгоритм наших действий
Устанавливаем на сайт купленный или написанный самостоятельно модуль REST API
Пишем программу, доводящую до желаемого вида данные, которые мы получаем по REST API
Второй возможный алгоритм наших действий
Пишем на языке PHP программу, осуществляющую выборку данных из БД магазина возвращающую данные в нужном формате
Третий возможный алгоритм наших действий
Определим список предусловий:
Мы не хотим разбираться во внутренностях OpenCart
Мы не хотим разбираться в различии кода для разных версий OpenCart
Мы не хотим беспокоиться о программных дефектах (багах), в различных версий Opencart
Мы хотим определять логику выгрузки декларативно, а не императивно - мы хотим указать машине, что мы хотим получить, а не объяснять как нужно обработать данные из магазина на OpenCart
Мы хотим иметь поддержку
К описанию алгоритма выгрузки мы хотим относиться как к офисному документу, а не как к программе
Алгоритм должен быть в дальнейшем настраиваемый, расширяемый с помощью условий
Мы хотим переиспользовать то, что мы сделали - это не должно быть конечной точкой в логической цепочке нашего алгоритма. Возможно мы создадим веб сайт, у которого будет соответствующий URL, также с параметрами - фильтрами, указывающими как выгружать данные "тем другим" пользователям или программным сервисам. Мы хотим, чтобы нашу настраиваемую логику могли использовать другие, не имея к ней доступа.
Именно эти идеи явились базой для написания представляемого вам программного сервиса.
Для кого создан данный сервис
Владельцы магазинов
Специалисты работающие в сфере аназиза данных
Маркетологи
Программисты
Преимущества данного сервиса
Гибкая настройка конфигурации выгрузки данных
Выгрузка данные в различных форматах
Возможность создавать программные продукты на основе данного сервиса
Поддержка со стороны квалифицированных инженеров-программистов.
Поддерживаемые форматы выгрузки
JSON (современный формат обмена данными)
XML (проверенный временем формат обмена данными)
CSV, (csv файлы поддерживаются Microsoft Excel и другими программными продуктами)
Microsoft Excel, (поддержка данного формата сейчас находится в разработке)
Домашняя страница сервиса
Сервис выгрузки данных доступен на сайте "Rapid API"
https://rapidapi.com/quasarbyte-quasarbyte-default/api/opencart4/
Необходимое расширение для OpenCart расположено на "GitHub"
https://github.com/QuasarByte/opencart-api
Доступные ендпоинты для выгрузки данных
Выгрузка данных на основе заданных конфигураций
pipeline/selectTables/selectTablesAsJson
pipeline/selectTables/selectTablesAsXml
pipeline/selectTables/selectTablesAsCsv
Выгрузка категорий товаров
categories/findHierarchy
categories/findAllCategories
categories/descriptions/findAllCategoryDescriptions
categories/descriptions/findAllCategoryDescriptionsAsPlainText
Примеры проверенных авторами сервиса инструментов для выгрузки данных
Языки программирования, например: PHP, Javascript, Java, итд
Структура запроса
URL
Заголовки
Тело
Составные части тела запроса
Тело запроса описывает модель данных выгрузки. Выгрузка состоит из набора независимых или связанных дочерних наборов данных, в зависимости от требований.
Описание шаблона
Тело параметризуемого шаблона SQL запроса
Описание полей набора данных
Описание условия связи с другими наборами данных
Описание параметров шаблона
Описание параметров
Константные параметры
SQL параметры
Параметры в формате RSQL
Параметры сортировки
Параметры пейджирования
Пример тела запроса
{
"tablesTemplate": {
"tableTemplates": [
{
"name": "products",
"fields": [
{
"name": "product_id",
"fieldType": "LONG"
}
],
"childTableTemplates": [
{
"name": "productDescriptions",
"fields": [
{
"name": "product_id",
"fieldType": "LONG"
},
{
"name": "language_id",
"fieldType": "LONG"
}
],
"childTableTemplates": [],
"parentTableJoinCondition": {
"joinTemplateName": "productDescriptionsToProduct",
"joinFields": [
{
"parentField": {
"name": "product_id",
"fieldType": "LONG"
},
"field": {
"name": "product_id",
"fieldType": "LONG"
}
}
]
},
"sql": {
"sql": "SELECT pd.product_id,\n pd.language_id,\n pd.name,\n pd.description,\n pd.tag,\n pd.meta_title,\n pd.meta_description,\n pd.meta_keyword\nFROM {dbPrefix}product_description pd JOIN {dbPrefix}product p ON p.product_id = pd.product_id {andProductTemplate} {rsqlWhereProductTemplate}\nORDER BY pd.product_id, pd.language_id\n",
"parameterTypes": null,
"selectColumnsTemplates": null,
"constantTemplates": [
{
"name": "dbPrefix"
}
],
"dependentOnSqlParameterTemplates": null,
"dependentOnTemplateTemplates": [
{
"name": "andProductTemplate",
"sql": "AND",
"action": "ENABLE",
"condition": "ANY",
"subCondition": "NOT_EMPTY",
"templateNames": [
"rsqlWhereProductTemplate"
]
}
],
"rsqlTemplates": [
{
"name": "rsqlWhereProductTemplate",
"fieldList": [
{
"field": {
"name": "product_id",
"fieldType": "LONG"
},
"alias": null,
"expression": null
}
]
}
],
"orderByTemplates": null,
"offsetTemplate": null,
"limitTemplate": null
}
}
],
"parentTableJoinCondition": null,
"sql": {
"sql": "SELECT product_id, model, sku, upc, ean, jan, isbn, mpn, location, quantity,\n stock_status_id, image, manufacturer_id, shipping, price, points, tax_class_id,\n date_available, weight, weight_class_id, length, width, height, length_class_id,\n subtract, minimum, sort_order, status, viewed, date_added, date_modified\nFROM {dbPrefix}product\n{whereProductTemplate} {rsqlWhereProductTemplate}\nORDER BY product_id\n",
"parameterTypes": null,
"selectColumnsTemplates": null,
"constantTemplates": [
{
"name": "dbPrefix"
}
],
"dependentOnSqlParameterTemplates": null,
"dependentOnTemplateTemplates": [
{
"name": "whereProductTemplate",
"sql": "WHERE",
"action": "ENABLE",
"condition": "ANY",
"subCondition": "NOT_EMPTY",
"templateNames": [
"rsqlWhereProductTemplate"
]
}
],
"rsqlTemplates": [
{
"name": "rsqlWhereProductTemplate",
"fieldList": [
{
"field": {
"name": "product_id",
"fieldType": "LONG"
},
"alias": null,
"expression": null
}
]
}
],
"orderByTemplates": null,
"offsetTemplate": null,
"limitTemplate": null
}
}
]
},
"selectClosureParameters": {
"products": {
"columns": null,
"constantValues": {
"dbPrefix": "mcoc_"
},
"parameterList": null,
"rSqlMap": null,
"orderByList": null,
"page": null
},
"productDescriptions": {
"columns": null,
"constantValues": {
"dbPrefix": "mcoc_"
},
"parameterList": null,
"rSqlMap": null,
"orderByList": null,
"page": null
}
}
}
Структура ответа
Пример ответа в JSON формате
{
"products": [
{
"product_id": 50,
"productDescriptions": [
{
"product_id": 50,
"language_id": 1
},
{
"product_id": 50,
"language_id": 2
}
]
},
{
"product_id": 51,
"productDescriptions": [
{
"product_id": 51,
"language_id": 1
},
{
"product_id": 51,
"language_id": 2
}
]
}
]
}
Пример ответа в XML формате
<products>
<productsRow product_id="50">
<productDescriptions>
<productDescriptionsRow language_id="1" product_id="50"/>
<productDescriptionsRow language_id="2" product_id="50"/>
</productDescriptions>
</productsRow>
<productsRow product_id="51">
<productDescriptions>
<productDescriptionsRow language_id="1" product_id="51"/>
<productDescriptionsRow language_id="2" product_id="51"/>
</productDescriptions>
</productsRow>
</products>
Пример ответа в CSV формате
product_id
28
parentRowNumber,product_id,language_id
1,28,1
Контакты для обсуждения и ответов на вопросы
Группа в Telegram: https://t.me/OpenCart_API_Russian_Language
https://rapidapi.com/quasarbyte-quasarbyte-default/api/opencart4/discussions
Email: [email protected]
С Уважением,
Роман Талуев