В техподдержку A-Parser часто поступают вопросы о том, можно ли загрузить товар в интернет-магазин на OpenCart, используя наш софт. Ответ на этот вопрос следующий:
"A-Parser может спарсить почти все ,что угодно и запостить на большинство сайтов в независимости от их движка". Стоит только приложить усилие.
Так как данная тема весьма объемна, то разобъем ее на несколько частей.
В данной статье мы рассмотрим такие вещи как :
Авторизация в админке OpenCart
Перейдя по адресу https://доменное имя сайта/admin/ мы увидим окно авторизации. Открываем Инструменты разработчика в браузере и авторизируемся, для того чтобы увидеть какой запрос отправляется при данном действии.
Как видно на скриншоте, при авторизации отправляется POST запрос по адресу
Передаваемые параметры можно увидеть, прокрутив скроллер вниз.
То есть передаются такие параметры, как route, логин и пароль, redirect. Для того чтобы можно было указывать логин и пароль вручную, добавим 2 поля в нашем парсере.
Теперь отправим данный запрос со всеми параметрами из нашего парсера
Из заголовков, присылаемых в ответе от сервера, нам необходимо выбрать user_token и OCSESSID.
И выберем мы их следующим образом:
Как видно на скриншоте ниже, авторизация прошла успешно, а значит можно переходить к следующему пункту.
Получение списка товаров из админки
Запрос, необходимый для получения списка товаров, находим так же как и запрос для авторизации, с помощью Инструментов разработчика. Теперь реализуем метод, собирающий список продуктов (картинку, название и цену):
Данный массив товаров нам понадобится в следующей статье, когда при массовом добавлении данных мы будем проверять наличие товара в БД, во избежание дублирования.
Добавление товаров
Запрос для добавления товара получаем так же, как и предыдущие. Реализуем метод для добавления товара в БД магазина.
Теперь вызовем наш метод:
и проверим результат:
Товар добавлен.
Ну вот и все. В следующей статье рассмотрим на реальном примере парсинг и массовое добавление товара в базу (а так же статусы товаров), или если товар уже есть в бд то обновление некоторой информации о товаре.
Пример учебного парсеры вы можете скачать из Каталога по этой ссылке.
"A-Parser может спарсить почти все ,что угодно и запостить на большинство сайтов в независимости от их движка". Стоит только приложить усилие.
Так как данная тема весьма объемна, то разобъем ее на несколько частей.
В данной статье мы рассмотрим такие вещи как :
- Авторизация в админке OpenCart
- Получение списка товаров из админки
- Добавление товаров
Авторизация в админке OpenCart
Перейдя по адресу https://доменное имя сайта/admin/ мы увидим окно авторизации. Открываем Инструменты разработчика в браузере и авторизируемся, для того чтобы увидеть какой запрос отправляется при данном действии.
Как видно на скриншоте, при авторизации отправляется POST запрос по адресу
Код:
https://урл нашего сайта/admin/index.php?route=common/login
То есть передаются такие параметры, как route, логин и пароль, redirect. Для того чтобы можно было указывать логин и пароль вручную, добавим 2 поля в нашем парсере.
Код:
this.editableConf = [
['login', ['textfield', 'Username']],
['pass', ['textfield', 'Password']],
];
Код:
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;
Теперь вызовем наш метод:
и проверим результат:
Товар добавлен.
Ну вот и все. В следующей статье рассмотрим на реальном примере парсинг и массовое добавление товара в базу (а так же статусы товаров), или если товар уже есть в бд то обновление некоторой информации о товаре.
Пример учебного парсеры вы можете скачать из Каталога по этой ссылке.