Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 30.08.2016 12:25:23

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Поисковый бот

Здравствуйте!
Так как у многих сайтов нет своего апи (может есть но не палят), можно ли как нибудь написать своего поискового бота на базе ларавел?
Допустим занесли в бд боту сайты которые он должен сканировать, дали ему название что искать, и что бы бот занес в базу, если это обьявление о продаже, то там тайтл боди, ссылку на обьявление,если карточка товара, то цену описание и тд. Вообще это возможно реализовать? В каком направлении копать?

Не в сети

#2 30.08.2016 21:13:28

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Re: Поисковый бот

Попробую пока парсинг + крон, а там посмотрим

Не в сети

#3 02.09.2016 14:40:34

Re: Поисковый бот

Написать конечно можно. Вопрос в архитектуре базы данных smile сколько у тебя будет типов информации, нужно ли будет добавлять новые.

Если сайтов, которые ты парсишь, немного, то крон пойдет, но лучше конечно демон и очереди.

Не в сети

#4 03.09.2016 20:05:55

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Re: Поисковый бот

DBR пишет:

Написать конечно можно. Вопрос в архитектуре базы данных smile сколько у тебя будет типов информации, нужно ли будет добавлять новые.

Если сайтов, которые ты парсишь, немного, то крон пойдет, но лучше конечно демон и очереди.

А что за демон? Просветите)

Не в сети

#5 04.09.2016 14:33:46

Re: Поисковый бот

https://laravel.ru/docs/v5/queues#демон-обработчик

Для общего понимания: https://habrahabr.ru/post/134620/ и другие статьи по запросу в Яндексе "php daemon"

Не в сети

#6 04.09.2016 15:15:01

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Re: Поисковый бот

DBR пишет:

https://laravel.ru/docs/v5/queues#демон-обработчик

Для общего понимания: https://habrahabr.ru/post/134620/ и другие статьи по запросу в Яндексе "php daemon"

благодарю

Не в сети

#7 04.09.2016 15:39:57

Re: Поисковый бот

И лучше разделить схему на двух демонов - один проверяет есть ли обновления на сайтаъ/страницах и скачивает их при необходимости, а второй уже парсит.

Не в сети

#8 04.09.2016 15:40:32

Re: Поисковый бот

Скаченные страницы можно хранить в виде файлов или в noSQL базе

Не в сети

#9 13.03.2017 09:32:26

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Re: Поисковый бот

DBR пишет:

И лучше разделить схему на двух демонов - один проверяет есть ли обновления на сайтаъ/страницах и скачивает их при необходимости, а второй уже парсит.

Спасибо. Все так и сделал.
Есть еще один вопрос.
Сейчас этот парсер работает прекрасно с помощъю рекурсии. Что б не спарсить весь интернет, сделал регулярку для ссылок по которым он должен ходить. Спарсенные данные (предварительно очищенные от мусора) он загоняет в таблицу offers. Но есть еще таблица product. Это так сказать шаблон с характеристиками,картинками, описанием для offers. И offers могут относиться к product, а могут и не относиться (null). Сам вопрос в то, можно ли как то грамотно в одну, по одинаковым полям (name, description, image, price) что б вывести как один ресурс и пустить его по циклу?

Не в сети

#10 13.03.2017 11:13:31

Re: Поисковый бот

Не понял вопрос sad

Не в сети

#11 13.03.2017 12:02:36

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Re: Поисковый бот

DBR пишет:

Не понял вопрос sad

две таблици

offers                     products
product_id              category_id
id                          id
name                     name
description             description
price                      price
old_price                etc...
is_active
is_new

делаем запрос

$products = Product::with('offers')->where('category_id, $id)->active()-get();

Получили коллекцию products вместе с offers.
И теперь выводим их во вьюхе.

@foreach($products as $product)
<!-- Here Template -->
@endforeach

Ну и если мы хотим вывести еще и offers которые относятся к товару, то придется сделать так:

@foreach($products as $product)
<!-- Here Product Template -->
@foreach($product->offers as $offer)
<!-- Here Offer Template -->
@endforeach
@endforeach

И выглядеть все это будит примерно так:
Ультрабук Lenovo ThinkPad 13 Ultrabook
- Ультрабук Lenovo ThinkPad Edge 13 13.3" 1366x768 Intel Core i5-6200U SSD 256 4Gb Intel HD Graphics 520 серебристый DOS 20GJ004CRT
- Ноутбук Ультрабук Lenovo ThinkPad Edge 13 13.3" 1366x768 Intel Core i5-6200U 20GJ004CRT
...
Это уже product и его offers.
А мне надо что объединить 2 таблицы и сгруппировать их по одинаковым полям, что бы вывести в одном цикле.

Не в сети

#12 13.03.2017 12:18:15

Re: Поисковый бот

Стало немного понятнее.

Теперь два вопроса

- По каким полям должна быть группировка?
- Необходимость вывести в одном цикле это бизнес требование или техническое требование? Чем оно обусловлено? Чем не устраивает вариант с двумя циклами?

Не в сети

#13 13.03.2017 12:41:18

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Re: Поисковый бот

DBR пишет:

- По каким полям должна быть группировка?

По трем - name, description, price.

DBR пишет:

- Необходимость вывести в одном цикле это бизнес требование или техническое требование? Чем оно обусловлено? Чем не устраивает вариант с двумя циклами?

Скорее техническое. Так как offers очень много.
Я думаю вот http://price.ru/model/234554/offers/?attr-2315=3203 эта ссылка полностью покажет пример того чего я хочу добиться. Тут есть единый ресурс со всей инфой, к которому относятся все offers, но у меня немного по другому. Надо что б каждый offer выглядел как product. Это нужно только в категориях. Это временная мера, пока база с products еще мала.

Не в сети

#14 13.03.2017 13:00:24

Re: Поисковый бот

Так и оставь два цикла. Внутри второго группируй оферы по своим полям и выводи их.

Зачем усложнять код и пытаться объединить две разные сущности.

Не в сети

Подвал раздела