استخدام php لسحب محتوى صفحة
أحدى الطرق التي تستطيع من خلالها سحب محتوى صفحة أو جزء من الصفحة من أي صفحة أنترنت .الدالة file_get_contents
لسحب محتوى أي صفحة انترنت أو ملف و وضعها في متغير .الدالة تعادل الدالةfile مع فارق أن الثانية تقرأ الملف إلى متسلسلة array أما دالتنا تقرأ المحتوى إلى متغير من نوع نصي string و حسب وثائق php فالدالة file_get_conetnets هي المفضلة لانها تستخدم تقنية تحافظ على الذاكرة .
في الأحوال العادية علينا فقط استدعاء الدالة مع العنوان الذي نريد مثلا
1 |
و سيظهر محتوى الصفحة في المتغير page . حيث عنوان الصفحة هو http://thepage.com مع مراعاة أن كان عنوان الصفحة يحتوي على فراغات أو اي حروف خاصة يجب استخدام الدالة urlencode على العنوان قبل استخدام الدالة . مثلا :
1 2 | $page=file_get_contents($url); |
استخلاص النتائج
و الآن بعد ان حصلنا على محتوى الصفحة كاملا قد نريد فقط جزء من الصفحة مثلا الجزء الذي يحتوي على الاخبار أو على الارقام التي أريد .
مثلا لو أننا استخدمنا الدالة السابقة لعرض من يتبع أو ما اتبع على تويتر ( هناك طرق أفضل للقيام بذلك لكن دعنا نقوم بذلك كمثال).
1 2 3 4 5 | // تنظيف العنوان و التأكد من عدم احتواءه على حروف خاصة//$url =urlencode ('http://twitter.com/fatma_qatar');//استخلاص الصفحة كاملة$page=file_get_contents($url); |
لكننا لا نريد أن نعرض الصفحة كاملة فقط العداد الذي يعرض المتابعين لي و بالتالي نريد دالة تستخلص هذه المنطقة فقط .علينا أولا ان نستعرض شفرة الصفحة على تويتر و قد وجدت أن العداد يعرض بين الوسم
1 2 3 4 5 | <div class="stats">و</div> |
وجدت خلال بحثي هذه الدالة
1 2 3 4 5 | function findit($mytext,$starttag,$endtag) { $posLeft = stripos($mytext,$starttag)+strlen($starttag); $posRight = stripos($mytext,$endtag,$posLeft+1); return substr($mytext,$posLeft,$posRight-$posLeft);} |
وهي دالة وجدتها منذ بضع سنوات و اجريت عليها تعديلات طفيفة و أنا استخدمها بنجاح منذ زمن . الدالة تطلب ٣ متغيرات الاول هو النص و هو في حالتنا الصفحة و الثاني الوسم الأول و الاخير الوسم الثاني .
الشفرة النهائية
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | // الدالة التي ستظهر ستستخلص لنا الجزء المطلوبfunction findit($mytext,$starttag,$endtag) { $posLeft = stripos($mytext,$starttag)+strlen($starttag); $posRight = stripos($mytext,$endtag,$posLeft+1); return substr($mytext,$posLeft,$posRight-$posLeft);}// العنوان// تنظيف العنوان و التأكد من عدم احتواءه على حروف خاصة//$url =urlencode ('http://twitter.com/fatma_qatar');//استخلاص الصفحة كاملة$page=file_get_contents($url);// استخلاص الجزء المطلوب.$result= findit($page,'<div>','</div>');//طباعة النتيجة.echo $result; |
في البداية استخلصنا الصفحة بواسطة file_get_contents ثم استخدامنا الدالة findit
1 | <span>$result= findit($page,'<div>','</div>'); |
و في النهاية طبعنا النتائج ..
0 تعليقات على " استخدام php لسحب محتوى صفحة "