السلام عليكم
كيف أجلب محتوى موقع لا يعتمد على rss ويعتمد على php
بحيث رابط الموضوع دائما يكون كالتالي
http://www.site.com/lire.php?id=24274
وهل يمكن تحديد كلمة فقط كي لا يجلب جميع المواضيع ؟
شكرا مسبقا
السلام عليكم
كيف أجلب محتوى موقع لا يعتمد على rss ويعتمد على php
بحيث رابط الموضوع دائما يكون كالتالي
http://www.site.com/lire.php?id=24274
وهل يمكن تحديد كلمة فقط كي لا يجلب جميع المواضيع ؟
شكرا مسبقا
لا يوجد كود واحد لجلب البيانات
فالطريقة تختلف من موقع لآخر، كل حسب مكان النص او المحتوى الذي ترغب بجلبه.
يمكن استخدام get_file_contents أو الجافاسكربت (دوم)
او php dom عن طريق نسخة ال oop عن طريق الكلاس domDocument
أو نسخة الدوال المنفردة.
هذا كود كنت قد كتبته لجلب الدروس الخاصة بالشيخ محمد حسان من موقع طريق الاسلام.
صفحة الشيخ تحوي دروس ،سلاسل ومجموعات.
هذا الكود يجلب الدروس فقط:
الدالة getMedia تجلب روابط الدرس(جزء 1،جزء 2..) في مصفوفةكود PHP:
<?php
function getMedia($url){
$doc = new DOMDocument();
@$doc->loadHTMLFile($url);
$code =$doc-> getElementsByTagName("code");
$media = array();
foreach($code as $link){
if ($link->getAttribute("class")=="filePath")
$media [] = $link->nodeValue;
}
return $media;
}
$links = new SplQueue();
$doc = new DOMDocument();
@$doc->loadHTMLFile('http://www.islamway.com/?iw_s=Scholar&iw_a=lessons&scholar_id=7');
$urls = @$doc->getElementsByTagName('a');
foreach($urls as $url){
if (strpos($url->getAttribute('href'),"lesson_id")>0)
$links->enqueue($url);
}
foreach ($links as $link){
if (!strpos($link->getAttribute("href"),"islamway.com")){
$url ="http://islamway.com/".$link->getAttribute('href');
echo"<a href=".$url.">".$link->nodeValue."</a><br>";
}
}
?>
ولكن انتبه من هذه الطريقة لأنها تأخذ وقت طويل في اذا شغلتها لجميع الدروس وقد ينتهي زمن تشغيل الصفحة قبل ان تنهي عملها.
وطبعًا بعد جلب البيانات المفروض ان تحفظها في قاعدة بيانات أو ملف html ثابت حتى تسرع من تشغيل الصفحة.
هناك طريقة أخرى لتنفيذ الدالة getMedia وهي استخدام الكلاس domXpath والذي يمكن أن يعمل استعلام على كود ال html الذي في الصفحة.
على العموم لغة php ليست اللغة المثالية لصنع البوت والأفضل استخدام لغة مثل c.
لا تنس حفظ الملف بصيغة UTF-8 حتى يعمل مع النصوص العربية
السلام عليكم
شكرا استاذي على المساعدة
لكن لم افهم طريقة الاستعمال
Fatal error: Class 'SplQueue' not found in C:\AppServ\www\dz.php on line 13
ظهر هذا الخطأ
ما الذي يجب ان اغيره ؟
مشكور
لا داع لتغيير اي شيء في الكود.
كل ما في الامر اني استعملت كلاس splQueue مكان المصفوفة، وهذا الكلاس يعمل مع (PHP 5 >= 5.3.0)
انتبه ان هذا الكود يعمل مع الاصدار الخامس من php واذا لم يكن لديك هذا الاصدار فلن يعمل.
يمكنك استخدام هذا الكلاس للاصدار الرابع
http://www.php.net/manual/en/book.domxml.php
الكود بعد ان وضعت المصفوفة مكان ال"دور" - Queue:
كود PHP:
<?php
function getMedia($url){
$doc = new DOMDocument();
@$doc->loadHTMLFile($url);
$code =$doc-> getElementsByTagName("code");
$media = array();
foreach($code as $link){
if ($link->getAttribute("class")=="filePath")
$media [] = $link->nodeValue;
}
return $media;
}
$links = array();
$doc = new DOMDocument();
@$doc->loadHTMLFile('http://www.islamway.com/?iw_s=Scholar&iw_a=lessons&scholar_id=7');
$urls = @$doc->getElementsByTagName('a');
foreach($urls as $url){
if (strpos($url->getAttribute('href'),"lesson_id")>0)
$links[]=$url;
}
foreach ($links as $link){
if (!strpos($link->getAttribute("href"),"islamway.com")){
$url ="http://islamway.com/".$link->getAttribute('href');
echo"<a href=".$url.">".$link->nodeValue."</a><br>";
}
}
?>