В техподдержку A-Parser часто поступают вопросы о том, можно ли загрузить товар в интернет-магазин на OpenCart, используя наш софт. Ответ на этот вопрос следующий:
"A-Parser может спарсить почти все ,что угодно и запостить на большинство сайтов в независимости от их движка". Стоит только приложить усилие.
Так как данная тема весьма объемна, то разобъем ее на несколько частей.
В данной статье мы рассмотрим такие вещи как :
В качестве подопытного был взят OpenCart версии 3.0.2.0. Итак приступим.
- Авторизация в админке OpenCart
- Получение списка товаров из админки
- Добавление товаров
Авторизация в админке OpenCart
Перейдя по адресу https://доменное имя сайта/admin/ мы увидим окно авторизации. Открываем Инструменты разработчика в браузере и авторизируемся, для того чтобы увидеть какой запрос отправляется при данном действии.
Как видно на скриншоте, при авторизации отправляется POST запрос по адресуПередаваемые параметры можно увидеть, прокрутив скроллер вниз.Код:https://урл нашего сайта/admin/index.php?route=common/login
То есть передаются такие параметры, как route, логин и пароль, redirect. Для того чтобы можно было указывать логин и пароль вручную, добавим 2 поля в нашем парсере.
Теперь отправим данный запрос со всеми параметрами из нашего парсераКод:this.editableConf = [ ['login', ['textfield', 'Username']], ['pass', ['textfield', 'Password']], ];
Из заголовков, присылаемых в ответе от сервера, нам необходимо выбрать user_token и OCSESSID.Код:let response = yield this.request('POST', set.query + '/admin/index.php?route=common/login', { username: this.conf.login, password: this.conf.pass, route: 'common/login', redirect: set.query + '/admin/index.php?route=common/login', }, );
И выберем мы их следующим образом:
Как видно на скриншоте ниже, авторизация прошла успешно, а значит можно переходить к следующему пункту.Код:let token = response.headers.URI.match(/.+?\&user_token=(.+)/); let cookie_sessid = response.headers['Request-Raw'].match(/OCSESSID=([\w\d]+)/); token = token ? token[1] : 'No token'; cookie_sessid = cookie_sessid ? cookie_sessid[1] : false;
Получение списка товаров из админки
Запрос, необходимый для получения списка товаров, находим так же как и запрос для авторизации, с помощью Инструментов разработчика. Теперь реализуем метод, собирающий список продуктов (картинку, название и цену):
Данный массив товаров нам понадобится в следующей статье, когда при массовом добавлении данных мы будем проверять наличие товара в БД, во избежание дублирования.Код:* get_products(token, set) { let products = []; let resp = yield this.request('GET', set.query + '/admin/index.php?', { route: 'catalog/product', user_token: token, }, {}); if (resp.success) { let rgx = /td class="text-center"> <img\s+src="([^"]+)"[\s\S]+?<td class="text-left">([^<]+)[\s\S]+?<td class="text-right">.+?(\$[\d\.]+)/g; let tmp_obj; let next_page = resp.data.match(/<ul class="pagination">[\s\S]+?class="active".+?href="([^"]+page=\d+)"/); while (tmp_obj = rgx.exec(resp.data)) { let product = { img: tmp_obj[1], name: tmp_obj[2], price: tmp_obj[3] }; products.push(product); } while (next_page) { let resp2 = yield this.request('GET', next_page[1], {}, {}); if (resp2.success) { while (tmp_obj = rgx.exec(resp2.data)) { let product = { img: tmp_obj[1], name: tmp_obj[2], price: tmp_obj[3] }; products.push(product); } next_page = resp2.data.match(/<ul class="pagination">[\s\S]+?class="active".+?href="([^"]+page=\d+)"/); } }
Добавление товаров
Запрос для добавления товара получаем так же, как и предыдущие. Реализуем метод для добавления товара в БД магазина.
Теперь вызовем наш метод:Код:* add_product(product, token, url) { let response = yield this.request('POST', url + '/admin/index.php?route=catalog/product/add&user_token=' + token, { route: 'catalog/product/add', user_token: token, 'product_description[1][name]': product.name, 'product_description[1][description]': product.description, 'product_description[1][meta_title]': product.meta_title, 'file': product.file, 'product_description[1][meta_description]': product.meta_description, 'product_description[1][meta_keyword]': product.meta_keyword, 'product_description[1][tag]': product.tag, model: product.model, price: product.price, sku: product.sku, upc: product.upc, jan: product.jan, ispn: product.ispn, mbn: product.mbn, location: product.location, tax_class_id: product.tax_class_id, quantity: product.quantity, minimum: product.minimum, subtract: product.subtract, stock_status_id: product.stock_status_id, shipping: product.shipping, date_available: product.date_available, }, ); if (response.success) { return true; } return false;
и проверим результат:
Товар добавлен.
Ну вот и все. В следующей статье рассмотрим на реальном примере парсинг и массовое добавление товара в базу (а так же статусы товаров), или если товар уже есть в бд то обновление некоторой информации о товаре.
Пример учебного парсеры вы можете скачать из Каталога по этой ссылке.
-
Вступайте в наш Telegram чат: https://t.me/a_parser Нас уже 2600+ и мы растем!Скрыть объявление
Работаем с OpenCart. Часть 1. Вступление.
Авторизация, получение списка и добавление товара в ИМ на OpenCart