Doogle adalah mesin pencari dan perayap web yang dapat mencari situs web dan gambar yang diindeks, dan kemudian menggunakan kata kunci untuk dicari nanti.
Ditulis terutama dalam gaya OOP PHP dengan tujuan untuk lebih memahami OOP dan cara kerja perayap web.
Dua metode pengaturan dibahas.
File konfigurasi Docker tersedia di doogle-docker.
Anggaplah Anda sudah menginstal dan mengkonfigurasi Docker v3.9 (atau lebih tinggi).
git clone https://github.com/safesploit/doogle-docker.git
cd doogle-docker
sh build.sh
Doogle sekarang dapat diakses melalui localhost:8000.
Untuk debugging phpMyAdmin juga telah disertakan di localhost:8001.
v1.0.0-beta.1 didukung dan diuji di PHP 7.4, 8.0 dan 8.1.
Silakan merujuk ke XAMPP untuk konfigurasi server web, server PHP, dan server MySQL. XAMPP adalah metode paling sederhana karena diperlukan beberapa server untuk menggunakan Doogle.
Setup MySQL pada XAMPP akan menggunakan PHPMyAdmin sebagai metode GUI dalam pengaturan databasenya.
Setelah masuk ke database melalui PHPMyAdmin di bawah tab PHPMyAdmin > SQL , konten 'doogle-tables-no-data.sql' dapat ditempelkan ke kolom
mysql
pdo_mysql
Ubah sandi PASSWORD_HERE menggunakan sandi acak yang kuat.
mysql> CREATE USER IF NOT EXISTS 'doogle'@'localhost' IDENTIFIED BY 'PASSWORD_HERE';
Pengguna SQL 'doogle' harus memiliki hak istimewa SELECT, INSERT dan UPDATE:
mysql> GRANT SELECT, INSERT, UPDATE ON `doogle`.* TO 'doogle'@'localhost';
Dalam file config.php berikut ini harus dimasukkan dengan benar untuk konfigurasi database Anda:
$dbname = "doogle";
$dbhost = "localhost";
$dbuser = "doogle";
$dbpass = "";
Dalam file 'doogle-tables-no-data.sql' database akan dibuat sebagai 'doogle'.
Di browser Anda, buka tempat file dihosting http://localhost/crawl.php
Rekatkan URL ke kolom masukan dan tekan tombol Perayapan.
Di bagian bawah crawl-manual.php variabel $startUrl adalah tempat menempelkan URL situs web yang akan dirayapi:
$startUrl = "https://thehackernews.com/";
Kemudian di browser Anda, buka tempat file dihosting http://localhost/crawl-manual.php
Proses perayapan akan memakan waktu, sepenuhnya bergantung pada ukuran situs web yang dirayapi. Halaman akan terus dimuat (tanpa output) hingga skrip crawl.php
selesai.
Periksa images
tabel dan sites
di database untuk memastikan semuanya terisi.
Setelah tabel terisi, kunjungi beranda Doogle dan cari! Lihat gambar pratinjau.
Di dalam search.php, pagination diterapkan
Pada contoh di atas, Halaman saat ini=11. Jumlah halaman yang ditampilkan selalu 10.
Pencarian situs akan menghasilkan 20 hasil per halaman dan pencarian gambar akan menghasilkan 30 hasil per halaman.
Hasil per halaman dapat diubah di dalam search.php pada baris {83, 88} masing-masing. Seperti yang ditunjukkan oleh variabel $pageSize:
Kasus tepi dapat terjadi ketika tidak ada lagi halaman yang tersedia.
Jadi, untuk 331 hasil, akan tersedia 17 halaman . Namun, tanpa mempertimbangkan skenario kasus edge, UI untuk sistem penomoran halaman akan memungkinkan pengguliran halaman yang tidak ada; yang akan mengembalikan hasil kosong.
Untuk menangani kasus Edge, logika berikut diimplementasikan dalam perulangan while:
if($currentPage + $pagesLeft > $numPages + 1)
$currentPage = $numPages + 1 - $pagesLeft;
while($pagesLeft != 0 && $currentPage <= $numPages)
{ ... }
Untuk membuat pencarian gambar lebih informatif, tag 'alt' adalah bagian dari istilah pencarian. Seperti yang ditunjukkan pada ./classes/ImageResultsProvider.php baris 34
Dalam tabel 'gambar', terdapat baris 'rusak' yang melacak gambar yang menghasilkan kesalahan.
Karena gambar sudah dimuat dengan solusi sisi server murni, AJAX harus dimanfaatkan, memuat gambar secara dinamis. Yang ditampilkan di ./assets/js/script.js
Pencarian gambar menggunakan Masonry - Pustaka tata letak kisi bertingkat.
Masonry memungkinkan gambar memiliki tata letak kotak yang responsif karena jQuery. Gambar di bawah menunjukkan contoh tata letak:
Seperti yang ditunjukkan pada gambar pratinjau, Doogle saat melakukan pencarian situs akan mengembalikan (judul, URL, dan deskripsi) untuk setiap hasil.
Namun, agar beberapa hasil lebih mudah dibaca, dilakukan proses pemangkasan. Di dalam ./classes/SiteResultsProvider.php fungsi trimField() dipanggil:
Judul dipangkas menjadi 55 karakter dan deskripsi dipangkas menjadi 230 karakter.
Tabel 'gambar' dan 'situs' dalam database memiliki baris yang berisi 'klik' untuk setiap kolom.
Bidang 'klik' bertambah setiap kali situs dikunjungi atau gambar dipratinjau.
Saat melakukan penelusuran, hasil yang ditampilkan disusun dalam urutan klik menurun. Perilaku ini ditunjukkan oleh fungsi $query di dalam ./classes/SiteResultsProvider.php getResultsHtml(). Lihat baris 43.
Di dalam ./classes/DomDocumentParser.php terdapat data agen pengguna yang digunakan selama perayapan. Seperti yang ditunjukkan pada baris 9:
Pratinjau gambar dilakukan menggunakan Fancybox.
Judul, URL gambar, dan URL situs tersedia di pojok kiri bawah.
Tentu saja, istilah pencarian tertentu dapat memberikan banyak hasil seperti 'bbc'.
Yang mana Doogle hanya menampilkan 20 situs per halaman. Di bagian bawah halaman, kita dapat melihat 10 halaman berikutnya.
Formulir HTML untuk mengirimkan URL untuk dirayapi
Demo Penelusuran Doogle - YouTube