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 عبر المضيف المحلي:8000.
لتصحيح الأخطاء، تم أيضًا تضمين phpMyAdmin في المضيف المحلي:8001.
يتم دعم الإصدار 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 في حقل الإدخال واضغط على زر الزحف.
في الجزء السفلي من ملفزحف-manual.php، يكون المتغير $startUrl هو مكان لصق عنوان URL لموقع الويب الذي سيتم الزحف إليه:
$startUrl = "https://thehackernews.com/";
ثم انتقل في متصفحك إلى المكان الذي تتم فيه استضافة الملف http://localhost/crawl-manual.php
ستستغرق عملية الزحف بعض الوقت، وستعتمد بشكل كامل على حجم موقع الويب الذي يتم الزحف إليه. سيستمر تحميل الصفحة (بدون إخراج) حتى ينتهي البرنامج النصي crawl.php
.
التحقق من images
الجداول sites
في قاعدة البيانات للتأكد من ملؤها.
بمجرد ملء الجداول، تفضل بزيارة صفحة Doogle الرئيسية وابحث! انظر معاينة الصور.
داخل search.php، يتم تنفيذ ترقيم الصفحات
في المثال أعلاه، الصفحة الحالية = 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" جزءًا من مصطلح البحث. كما هو موضح في ./classes/ImageResultsProvider.php السطر 34
في جدول "الصور"، يوجد صف "مكسور" يتتبع الصور التي تعرض خطأ.
نظرًا لأنه تم تحميل الصور بالفعل باستخدام حل خالص من جانب الخادم، فيجب الاستفادة من AJAX وتحميل الصور ديناميكيًا. والذي يظهر في ./assets/js/script.js
تستخدم عمليات البحث عن الصور Masonry - مكتبة تخطيط الشبكة المتتالية.
يسمح Masonry للصور بتخطيط الشبكة الذي يستجيب بسبب jQuery. توضح الصورة أدناه مثالاً للتخطيط:
كما هو موضح في صور المعاينة، فإن Doogle عند إجراء بحث في الموقع سيعرض (العنوان وعنوان URL والوصف) لكل نتيجة.
ومع ذلك، لتسهيل قراءة بعض النتائج، يتم إجراء عملية تشذيب. داخل ./classes/SiteResultsProvider.php تسمى الدالة TrimField():
يتم اقتطاع العنوان عند 55 حرفًا ويتم اقتطاع الوصف عند 230 حرفًا.
يحتوي كل من جدولي "الصور" و"المواقع" في قاعدة البيانات على صف يحتوي على "النقرات" لكل عمود.
يتم زيادة حقل "النقرات" في كل مرة تتم فيها زيارة الموقع أو معاينة الصورة.
عند إجراء بحث، يتم تنظيم النتائج التي يتم إرجاعها بترتيب تنازلي للنقرات. يتم إظهار هذا السلوك من خلال الاستعلام $ داخل وظيفة ./classes/SiteResultsProvider.php getResultsHtml(). انظر السطر 43.
داخل ./classes/DomDocumentParser.php توجد بيانات وكيل المستخدم المستخدمة أثناء الزحف. كما هو موضح في السطر 9:
تتم معاينة الصورة باستخدام Fancybox.
يتوفر العنوان وعنوان URL للصورة وعنوان URL للموقع في الزاوية اليسرى السفلية.
وبطبيعة الحال، قد تؤدي بعض مصطلحات البحث إلى ظهور العديد من النتائج مثل "bbc".
حيث يعرض Doogle 20 موقعًا فقط في كل صفحة. في أسفل الصفحة، يمكننا عرض الصفحات العشرة التالية.
نموذج HTML لإرسال عنوان URL للزحف
العرض التوضيحي لبحث Doogle - YouTube