Doogle เป็นเครื่องมือค้นหาและโปรแกรมรวบรวมข้อมูลเว็บซึ่งสามารถค้นหาเว็บไซต์และรูปภาพที่จัดทำดัชนีไว้ แล้วใช้คำหลักเพื่อค้นหาในภายหลัง
เขียนโดยใช้ PHP สไตล์ OOP เป็นหลักโดยมีจุดประสงค์เพื่อให้เข้าใจ OOP ได้ดีขึ้นและวิธีการทำงานของโปรแกรมรวบรวมข้อมูลเว็บ
มีการกล่าวถึงวิธีการตั้งค่าสองวิธี
ไฟล์การกำหนดค่า Docker มีอยู่ที่ doogle-docker
สมมติว่าคุณได้ติดตั้งและกำหนดค่า Docker v3.9 (หรือสูงกว่า) แล้ว
git clone https://github.com/safesploit/doogle-docker.git
cd doogle-docker
sh build.sh
ขณะนี้ Doogle สามารถเข้าถึงได้ผ่าน localhost:8000
สำหรับการดีบัก phpMyAdmin ก็รวมอยู่ใน localhost:8001 ด้วย
v1.0.0-beta.1 รองรับและทดสอบใน PHP 7.4, 8.0 และ 8.1
โปรดดู XAMPP สำหรับเว็บเซิร์ฟเวอร์ เซิร์ฟเวอร์ PHP และการกำหนดค่าเซิร์ฟเวอร์ MySQL XAMPP เป็นวิธีที่ง่ายที่สุด เนื่องจากต้องใช้เซิร์ฟเวอร์หลายเครื่องจึงจะใช้ Doogle ได้
การตั้งค่า MySQL บน XAMPP จะใช้ PHPMyAdmin เป็นวิธี GUI ในการตั้งค่าฐานข้อมูล
เมื่อเข้าสู่ระบบฐานข้อมูลผ่าน 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 หน้า อย่างไรก็ตาม หากไม่มีการพิจารณาสถานการณ์ Edge Case UI สำหรับระบบการแบ่งหน้าจะอนุญาตให้เลื่อนผ่านหน้าต่างๆ ที่ไม่มีอยู่ ซึ่งจะส่งคืนผลลัพธ์ที่ว่างเปล่า
ในการจัดการกับกรณี Edge ตรรกะต่อไปนี้จะถูกนำไปใช้ใน while-loop:
if($currentPage + $pagesLeft > $numPages + 1)
$currentPage = $numPages + 1 - $pagesLeft;
while($pagesLeft != 0 && $currentPage <= $numPages)
{ ... }
เพื่อให้การค้นหารูปภาพมีข้อมูลมากขึ้น แท็ก 'alt' เป็นส่วนหนึ่งของข้อความค้นหา ดังที่แสดงใน ./classes/ImageResultsProvider.php บรรทัดที่ 34
ในตาราง 'รูปภาพ' มีแถว 'เสียหาย' ซึ่งติดตามรูปภาพที่ส่งกลับข้อผิดพลาด
เนื่องจากรูปภาพถูกโหลดด้วยโซลูชันฝั่งเซิร์ฟเวอร์อย่างแท้จริง จึงต้องใช้ AJAX โดยการโหลดรูปภาพแบบไดนามิก ซึ่งแสดงใน ./assets/js/script.js
การค้นหารูปภาพกำลังใช้ Masonry - ไลบรารีเค้าโครงตารางแบบเรียงซ้อน
การก่ออิฐช่วยให้รูปภาพมีเค้าโครงตารางซึ่งตอบสนองเนื่องจาก jQuery รูปภาพด้านล่างแสดงเค้าโครงตัวอย่าง:
ดังที่แสดงในภาพตัวอย่าง Doogle เมื่อทำการค้นหาไซต์จะส่งกลับ (ชื่อ URL และคำอธิบาย) สำหรับแต่ละผลลัพธ์
อย่างไรก็ตาม เพื่อให้อ่านผลลัพธ์บางอย่างได้ง่ายขึ้น จึงมีกระบวนการตัดแต่ง ภายใน ./classes/SiteResultsProvider.php ฟังก์ชัน trimField() เรียกว่า:
ชื่อเรื่องถูกตัดออกที่ 55 อักขระ และคำอธิบายถูกตัดออกที่ 230 อักขระ
ทั้งตาราง 'รูปภาพ' และ 'ไซต์' ในฐานข้อมูลมีแถวที่มี 'คลิก' สำหรับแต่ละคอลัมน์
ฟิลด์ 'คลิก' จะเพิ่มขึ้นทุกครั้งที่มีการเยี่ยมชมไซต์หรือดูตัวอย่างรูปภาพ
เมื่อทำการค้นหา ผลลัพธ์ที่ส่งคืนจะถูกจัดเรียงตามลำดับการคลิกจากมากไปหาน้อย ลักษณะการทำงานนี้แสดงโดย $query ภายใน ./classes/SiteResultsProvider.php ฟังก์ชัน getResultsHtml() ดูบรรทัดที่ 43
ภายใน ./classes/DomDocumentParser.php จะมีข้อมูลตัวแทนผู้ใช้ที่ใช้ระหว่างการรวบรวมข้อมูลอยู่ ตามที่ระบุไว้ในบรรทัดที่ 9:
การแสดงตัวอย่างภาพทำได้โดยใช้ Fancybox
ชื่อ URL รูปภาพ และ URL ของไซต์อยู่ที่มุมซ้ายล่าง
โดยปกติแล้ว ข้อความค้นหาบางคำอาจส่งคืนผลลัพธ์จำนวนมาก เช่น 'bbc'
ซึ่ง Doogle จะแสดงเพียง 20 ไซต์ ต่อหน้า ที่ด้านล่างของหน้าเราจะดูอีก 10 หน้าถัดไปได้
แบบฟอร์ม HTML เพื่อส่ง URL สำหรับการรวบรวมข้อมูล
การสาธิตการค้นหา Doogle - YouTube