Hide this notice

مرحبا أنت تستخدم انترنت اكسبلورر ٦ و هو متصفح اصدر في العام 2001 الا يبدو لك ذلك قديما .

نحن ننصحك بقوة بترقية متصفحك إلى نسخة أحدث مثل أنترنت اكسيلورر ٨ أو فايرفوكس و الذي سيتيح لك تصفح أفضل ليس لموقعنا فقط بل في كل أرجاء الأنترنت..

لو كنت لا تريد أو لا تملك الصلاحية لترقية المتصفح يمكنك أن تستمر في التصفح على الرحب و السعة لكن تذكر قد لا تتمكن من استعراض بعض خدمات الموقع بالشكل المطلوب . بالطبع يمكنك إخفاء هذه الرسالة و تستمر في التصفح و لن تظهر لك هذه الرسالة مرة أخرى .

Post Pic

استخدام php لسحب محتوى صفحة

أحدى الطرق التي تستطيع من خلالها سحب محتوى صفحة أو جزء من الصفحة من أي صفحة أنترنت .

الدالة file_get_contents

لسحب محتوى أي صفحة انترنت أو ملف و وضعها في متغير .الدالة تعادل الدالةfile مع فارق أن الثانية تقرأ الملف إلى متسلسلة array أما دالتنا تقرأ المحتوى إلى متغير من نوع نصي  string و حسب وثائق  php  فالدالة file_get_conetnets هي المفضلة لانها تستخدم تقنية تحافظ على الذاكرة .

في الأحوال العادية علينا فقط استدعاء الدالة مع العنوان الذي نريد مثلا


$page=file_get_contents('http://thepage.com');

و سيظهر محتوى الصفحة في المتغير page  . حيث عنوان الصفحة هو http://thepage.com  مع مراعاة أن كان عنوان الصفحة يحتوي على فراغات أو اي حروف خاصة يجب استخدام الدالة  urlencode على العنوان قبل استخدام الدالة . مثلا :


$url =urlencode ('http://thepage.com');
$page=file_get_contents($url);

استخلاص النتائج

و الآن بعد ان حصلنا على محتوى الصفحة كاملا قد نريد فقط جزء من الصفحة مثلا الجزء الذي يحتوي على الاخبار أو على الارقام التي أريد .

مثلا لو أننا استخدمنا الدالة السابقة لعرض من يتبع أو ما اتبع على تويتر  ( هناك طرق أفضل للقيام بذلك لكن دعنا نقوم بذلك كمثال).

t01

$url='http://twitter.com/fatma_qatar';
// تنظيف العنوان و التأكد من عدم احتواءه على حروف خاصة
//$url =urlencode ('http://twitter.com/fatma_qatar');
//استخلاص الصفحة كاملة
$page=file_get_contents($url);

لكننا لا نريد أن نعرض الصفحة كاملة فقط العداد الذي يعرض المتابعين لي و بالتالي نريد دالة تستخلص هذه المنطقة فقط .علينا أولا ان نستعرض شفرة الصفحة على تويتر و قد وجدت أن العداد يعرض بين الوسم

<div class="stats">

و

</div>

t02

وجدت خلال بحثي هذه الدالة


function findit($mytext,$starttag,$endtag) {
 $posLeft  = stripos($mytext,$starttag)+strlen($starttag);
 $posRight = stripos($mytext,$endtag,$posLeft+1);
 return  substr($mytext,$posLeft,$posRight-$posLeft);
}

وهي دالة وجدتها منذ بضع سنوات و اجريت عليها تعديلات طفيفة و أنا استخدمها بنجاح منذ زمن . الدالة تطلب ٣ متغيرات الاول هو النص و هو في حالتنا الصفحة و الثاني الوسم الأول و الاخير الوسم الثاني .

الشفرة النهائية

// الدالة التي ستظهر ستستخلص لنا الجزء المطلوب

function findit($mytext,$starttag,$endtag) {
 $posLeft  = stripos($mytext,$starttag)+strlen($starttag);
 $posRight = stripos($mytext,$endtag,$posLeft+1);
 return  substr($mytext,$posLeft,$posRight-$posLeft);
}
// العنوان
$url='http://twitter.com/fatma_qatar';
// تنظيف العنوان و التأكد من عدم احتواءه على حروف خاصة
//$url =urlencode ('http://twitter.com/fatma_qatar');
//استخلاص الصفحة كاملة
$page=file_get_contents($url);
// استخلاص الجزء المطلوب.
$result= findit($page,'<div>','</div>');
//طباعة النتيجة.
echo $result;

في البداية استخلصنا الصفحة بواسطة file_get_contents  ثم استخدامنا الدالة findit


<span>$result= findit($page,'<div>','</div>');

و في النهاية طبعنا النتائج ..

تحميل ملف المثال

بقلم : فاطمة العمادي

أم و زوجة .. مصممة حرة و مصورة .. عرف الناس كتاباتي التقنية من خلال شخصية خيالية هي الدكتور نت . اصمم المواقع منذ العام ١٩٩٩م .

أوسمة : , ,

تعليقات الزوار (10)

[+] أضف تعليقك من فضلك



  1. بصراحة كانك تجيبين على اسئلتى فانا اعلم كيف اسحب محتوى موقع ولكنى لم اكن اعلم كيف اختار شئ معين فى هذا الكود
    http://www.sa7afa.net


  2. حسام :
    اسعدني ذلك :) وشكرا لمتابعتك


  3. RedMan كتب:

    شرح موفقك …. جزاك الله خيراً


  4. أحمد شريف كتب:

    لي تعليق على الدالة findit وهي أنها تصلح لغرض وحيد فقط قد يؤدي إلى خطأ إذا احتوى الوسم div المطلوب على div آخر. الأفضل في هذه الحالة هو استعمال DOM extension الموجود في الـ PHP. يعطي نتائج أفضل بكثير من findit. بغض النظر عن كل هذا، فإن هناك طرق أسهل وأسرع بكثير من findit وDOM لإيجاد الـ following والـ followers.


  5. نعم اخ احمد انا ذكرت ان هناك طريق طرق افضل للحصول ما نريد من توتر . لكني هذا كان مثال فقط ..
    بالنسبة للدالة نعم كلامك صحيح و قد نسيت ذكر ذلك عذرا . نعم DOM extension افضل لكن الغرض من الموضوع فهم دوال الphp ولم اذكر ان ذلك هو الحل الامثل و اشكرك على اثراء الموضوع :)


  6. للاسف هذه الاكواد لا تعمل عندى لان هذه الاكواد غير مفعلة على السيرفر
    فهل توجد بدائل اخرى
    http://www.sa7afa.net


  7. استخدم عادتاً ال REGEX مع PREG_MATCH و PREG_REPLACE
    لأستخراج ما اريد من صفحات طويلة واريده في مصفوفة مع تحديد عدة امور في المرة الواحدة لتجلب في مصفوفة كبيرة فيها كل ما اريد

    جزيل الشكر علي الدرس


  8. المستبدة كتب:

    لو سمحتي اختي الفاضلة ماهي الدالة التي تعطيني الصفحة التي فيها معلومات مخزنة عند تحديثهاولك الشكر


  9. سلام كتب:

    اختي كيف يمكنني سحب من Rss ووضعه في صفحة
    http://www.kingar.org