Doogle — это поисковая система и веб-сканер, который может выполнять поиск по проиндексированным веб-сайтам и изображениям, а затем использовать ключевые слова для последующего поиска.
Написан в основном в стиле ООП PHP с целью лучшего понимания ООП и того, как работают веб-сканеры.
Обсуждаются два метода настройки.
Файлы конфигурации Docker доступны по адресу doogle-docker.
Предполагается, что у вас уже установлен и настроен Docker v3.9 (или более поздней версии).
git clone https://github.com/safesploit/doogle-docker.git
cd doogle-docker
sh build.sh
Doogle теперь доступен через localhost:8000.
Для отладки на localhost:8001 также включен phpMyAdmin.
v1.0.0-beta.1 поддерживается и тестируется в PHP 7.4, 8.0 и 8.1.
Пожалуйста, обратитесь к XAMPP для настройки веб-сервера, сервера PHP и сервера MySQL. XAMPP — самый простой метод, поскольку для использования Doogle требуется несколько серверов.
Установка MySQL на XAMPP будет использовать PHPMyAdmin в качестве метода графического интерфейса для настройки базы данных.
После входа в базу данных через PHPMyAdmin на вкладке PHPMyAdmin > SQL содержимое doogle-tables-no-data.sql можно вставить в поле.
mysql
pdo_mysql
Измените пароль PASSWORD_HERE, используя надежный случайный пароль.
mysql> CREATE USER IF NOT EXISTS 'doogle'@'localhost' IDENTIFIED BY 'PASSWORD_HERE';
Пользователь SQL doogle должен иметь привилегии SELECT, INSERT и UPDATE:
mysql> GRANT SELECT, INSERT, UPDATE ON `doogle`.* TO 'doogle'@'localhost';
В файле config.php необходимо правильно ввести следующее для конфигурации вашей базы данных:
$dbname = "doogle";
$dbhost = "localhost";
$dbuser = "doogle";
$dbpass = "";
В файле doogle-tables-no-data.sql база данных будет создана как doogle.
В браузере перейдите туда, где находится файл http://localhost/crawl.php.
Вставьте URL-адрес в поле ввода и нажмите кнопку «Сканировать».
В нижней части файла crawl-manual.php переменная $startUrl позволяет вставить URL-адрес сканируемого веб-сайта:
$startUrl = "https://thehackernews.com/";
Затем в браузере перейдите туда, где находится файл http://localhost/crawl-manual.php.
Процесс сканирования займет некоторое время, оно полностью будет зависеть от размера сканируемого веб-сайта. Страница будет продолжать загружаться (без вывода) до тех пор, пока скрипт crawl.php
не завершится.
Проверьте images
таблиц и sites
в базе данных, чтобы убедиться, что они заполняются.
После заполнения таблиц посетите домашнюю страницу Doogle и выполните поиск! См. изображения для предварительного просмотра.
Внутри search.php реализована нумерация страниц.
В приведенном выше примере currentPage=11. Количество отображаемых страниц всегда равно 10.
Поиск по сайту вернет 20 результатов на страницу, а поиск по изображениям — 30 результатов на страницу.
Результаты на странице можно изменить внутри search.php в строках {83, 88} соответственно. Как указано в переменных $pageSize:
Пограничный случай может возникнуть, когда больше нет доступных страниц.
Итак, для 331 результата будет доступно 17 страниц . Однако, если не учитывать крайний случай, пользовательский интерфейс системы нумерации страниц позволит прокручивать несуществующие страницы; который вернет пустой результат.
Для обработки пограничного случая в цикле while реализована следующая логика:
if($currentPage + $pagesLeft > $numPages + 1)
$currentPage = $numPages + 1 - $pagesLeft;
while($pagesLeft != 0 && $currentPage <= $numPages)
{ ... }
Чтобы сделать поиск изображений более информативным, тег «alt» является частью поискового запроса. Как показано в строке 34 ./classes/ImageResultsProvider.php.
В таблице «images» есть строка «broken», в которой отслеживаются изображения, возвращающие ошибку.
Поскольку изображения уже загружаются с помощью чисто серверного решения, необходимо использовать AJAX для динамической загрузки изображений. Это показано в ./assets/js/script.js.
Для поиска изображений используется Masonry — библиотека компоновки каскадной сетки.
Masonry позволяет изображениям располагать сетку, которая реагирует благодаря jQuery. На изображении ниже показан пример макета:
Как показано на изображениях предварительного просмотра, Doogle при выполнении поиска по сайту возвращает (заголовок, URL-адрес и описание) для каждого результата.
Однако, чтобы облегчить чтение некоторых результатов, выполняется процесс обрезки. Внутри ./classes/SiteResultsProvider.php вызывается функция tripField():
Заголовок сокращен до 55 символов, а описание — до 230 символов.
В таблицах базы данных «изображения» и «сайты» есть строка, содержащая «клики» для каждого столбца.
Поле «Клики» увеличивается каждый раз при посещении сайта или просмотре изображения.
При выполнении поиска возвращаемые результаты располагаются в порядке убывания количества кликов. Такое поведение показано $query внутри функции ./classes/SiteResultsProvider.php getResultsHtml(). См. строку 43.
Внутри ./classes/DomDocumentParser.php находятся данные пользовательского агента, используемые во время сканирования. Как указано в строке 9:
Предварительный просмотр изображения осуществляется с помощью Fancybox.
Заголовок, URL-адрес изображения и URL-адрес сайта доступны в левом нижнем углу.
Естественно, некоторые поисковые запросы могут возвращать множество результатов, например «bbc».
При этом Дугл отображает только 20 сайтов на странице. Внизу страницы мы можем просмотреть следующие 10 страниц.
HTML-форма для отправки URL-адреса для сканирования
Демонстрация Поиска Google – YouTube