Доброго время суток, уважаемые читатели!
Продолжим написание парсера работающего с OpenCart, которое мы начали здесь.
В прошлой статье мы рассмотрели как добавить один товар в базу интернет-магазина, созданного на движке OpenCart, что в реальных условиях мало применимо. Теперь давайте рассмотрим пример массового добавления.
Наш парсер будет принимать в качестве запроса ссылку на категорию сайта moyo.ua и парсить товары с первой страницы выдачи, затем добавлять их в OpenCart.
Пример ссылки:
Реализация метода который парсит moyo.ua и возращает массив продуктов.Код:https://www.moyo.ua/telecommunication/cell_phones/
С наименованием продукта, ценой и т.д. все понятно. Но что делать с картинками? Было решено применить следующий алгоритм действий.Код:* getMoyoProduct(link) { let moyouResponse = yield this.request('GET', link, {}, { 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.109 Safari/537.36', decode: 'utf8' }); if (moyouResponse.success) { let rgx = /<a.+?class="goods_image" data-imageSrc="(.+?)".+?data-alt="(.+?)"[\s\S]+?<div class="goodsprice-amount">.+?>([\d\s]+)<\/span/g; let tmp; let products = []; while (tmp = rgx.exec(moyouResponse.data)) { let imageName = yield *this.downloadImage(tmp[1]); let product = { nameProd: tmp[2], image: imageName, price: tmp[3] }; products.push(product); } return products; } }
Картинки скачиваются в папку results/image/ (папку image нужно создать), им будет присваиваться новое имя, с помощью метода getRandomImageName.
И затем скачанные картинки будут переноситься на сервер где установлен A-Parser в папку image/catalog/.Код:getRandomImageName(url) { let name = ""; let strong = 10; let dic = "abcdefghijklmnopqrstuvwxyz1234567890"; for (var i = 0; i < strong; i++) { name += dic.charAt(Math.floor(Math.random() * dic.length)); } let date = new Date(); return name + '-' + date.getFullYear() + '-' + date.getMonth() + '-' + date.getDay() + '-' + date.getTime() + '.' + this.getExtension(url); }
Вынос авторизации в отдельный метод
Теперь, чтобы не превращать метод parse в большую, плохо читабельную кучу кода, вынесем авторизацию с получением куки и токена в отдельный метод authorization, который возвращает токен или false, если запрос был неудачный. Для указания ссылки на наш интернет-магазин, чтобы парсер знал, где авторизироваться и куда добавлять товар, было создано поле Site:
Итоговый вид метода parseКод:*authorization(){ let response = yield this.request('POST',this.conf.siteurl + '/admin/index.php?route=common/login', { username: this.conf.login, password: this.conf.pass, route: 'common/login', redirect: this.conf.siteurl + '/admin/index.php?route=common/login', }, ); if(response.success){ this.cookies.setAll({}); 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; if (token && cookie_sessid) { this.cookies.set(this.utils.url.extractTopDomain(this.conf.siteurl), '/', 'OCSESSID', cookie_sessid); } return token; } return false; }
Запускаем и проверяем результат:Код:*parse(set, results) { /*Получаем список продуктов*/ let moyouResponse = yield* this.getMoyoProduct(set.query); if(this.conf.siteurl != ''){ /*Авторизируемся*/ let token = yield* this.authorization(); if(token){ for(let i = 0; i < moyouResponse.length; i++){ let addProd = yield * this.add_product(this.getSingleProduct(moyouResponse[i]),token,this.conf.siteurl); } results.success = 1; } } return results; }
Как видим, все, кроме картинок, добавилось без проблем. Что же не так с картинками?
Дело в том, что OpenCart при добавлении или редактировании продукта проверяет есть ли такая картинка в папке и если нет подставляет свою.
Как решить эту проблему:
Способ 1
Разбить эту задачу на 2 парсера. 1-й парсит информацию и скачивает картинки. Затем заливаем картинки на сервер и запускаем второй парсер, который уже добавит наши товары в интернет магазин.
Способ 2
Разработать парсер, который будет изменять данные продуктов о картинках. Запускать его будем после того, как отработал наш парсер, который описан в этой статье.
Более подробно оба метода будут расписаны в следующей статье.
Скачать готовый парсер вы можете по этой ссылке.
-
Вступайте в наш Telegram чат: https://t.me/a_parser Нас уже 2600+ и мы растем!Скрыть объявление
Работаем с OpenCart. Часть 2. Массовое добавление товаров
В данной статье рассмотрено массовое добавления товара в OpenCart
Метки: