چگونه با PHP از سایتای دیگه اطلاعات بدزدیم؟!

میخوایم از سایتای دیگه مطلب بدزدیم!!! میتونیم سایتمون رو طوری درست کنیم که وقتی داریم استراحت میکنیم خودش بره توی سایتای دیگران و مطالب سایت ها رو بگیره و توی سایت ما ذخیره کنه و نشون بده. خب این کار چجوریه؟ به نظرتون برا عملی کردنش باید چیکار کنیم؟ میریم توی سایت مورد نظر مطلبش رو کپی میکنیم میایم توی سایت خودمون میزاریم به همین راحتی 🙂 خب حالا چجوری میشه این کار رو با PHP انجام داد؟ میرم سر اصل مطلب و چند روش رو براتون به صورت ساده توضیح میدم.

اگه بخوایم کل مطالب یه صفحه رو از یه سایت دیگه بگیریم و توی صفحه شخصی خودمون نمایش بدیم میتونیم از  تابع file_get_contents به صورت زیر استفاده کنیم:

خب همونطور که میبینید اول با دستور file_get_contents محتوای صفحه اول سایت رو گرفتم و با قرار دادن یه دستور echo محتوا رو توی صفحه ی شخصی خودم چاپ کردم. به همین راحتی:-)

بعضی سایتا برای اینکه نتونیم اطلاعاتشون رو بدزدیم میان و یه لایه ی امن خریداری میکنن (همون لایه ی SSL که پروتکل HTTPS ازش استفاده میکنه) ما هم برای اینکه بتونیم اطلاعاتشون رو بگیریم از کتابخانه ی معروف Curl که در سیستم عامل لینوکس قرار داره استفاده میکنیم .

اول اومدیم یه تابع ساختیم و توش از دستورات Curl استفاده کردیم. خب این تابع رو به این صورت ساختیم که آدرس یه صفحه رو بهش میدیم و محتوای اون صفحه رو بهمون تحویل میده.

خب حالا اگه بخوایم یه قسمت خاصی از محتوای یه سایت رو بگیریم چیکار میکنیم؟ روش های مختلفی برای گرفتن اطلاعات سایت های دیگه وجود داره مثلا قسمت خبرخوان (RSS) یک سایت رو بگیریم و داده ها رو از توش بکشیم بیرون یا اینکه مستقیما صفحه مورد نظر رو دریافت کنیم و با توابع مختلف PHP اون رو تجزیه کنیم و عکس ها و متن هاشو بکشیم بیرون. یه کتابخونه ای که خیلی مورد استفاده قرار میگیره کتابخونه Simple HTML DOM parser هست.

توی دستورات بالا ابتدا زمان مورد نیاز برای تحلیل صفحه رو منفی یک قرار دادم که به معنای بی نهایت هست. این برای مواقعی استفاده میشه که نمیدونیم چقد طول میکشه تا دستوراتمون اجرا بشه. بعدش نوع صفحه رو html تنظیم کردم و محتوا رو از نوع uft-8 گذاشتم که فارسی رو ساپورت کنه. در قسمت بعد کتابخونه simple DOM HTML رو اظافه کردم و ازش استفاده کردم تا همه ی عکسای صفحه رو بگیرم. حالا وقتی که کد اجرا بشه همه ی عکسای سایت طرح‌چه رو توی صفحه میتونید ببینید. میتونید کد مربوط به این مثال رو از پایین همین صفحه دانلود کنید و آزمایش کنید.

شما میتونید با استفاده از این آموزش به صورت اتوماتیک مطالب و عکسای سایتای دیگه رو بگیرید و توی سایت خودتون نمایش بدید به همین راحتی به همین خوشمزگی 🙂

میتونید کتابخونه DOM HTML به همراه مثال بالا رو از پایین دانلود کنید.

 

دانلود کتابخانه PHP DOM HTML
دانلود کتابخانه PHP DOM HTML
simple_html_dom_1_5.zip
Version: 1.5
335.7 KiB
155 Downloads
اطلاعات بیشتر
اسکریپت گرفتن عکسهای سایت ها
اسکریپت گرفتن عکسهای سایت ها
php get site images.zip
Version: 1.0
15.2 KiB
127 Downloads
اطلاعات بیشتر
به اشتراک بگذارید:Email this to someoneShare on FacebookTweet about this on TwitterShare on Google+Digg thisShare on LinkedInPin on PinterestShare on StumbleUponFlattr the authorShare on RedditBuffer this pageShare on TumblrPrint this pageShare on YummlyShare on VK
  1. علی طبا

    سلام
    من بطور مثال می خوام جدول Royal Exchange – currency exchange rate of the moment از آدرس
    http://www.sarafiroyal.com/Default_en.html
    را برای صفحات خودم استفاده کنم. باید از چه راهی استفاده کنم ؟ با این نمونه ها نمیشه.
    ممنون

  2. سلام … خیلی ممنون … خیلی مفید بود
    میشه لطفا در مورد استفاده از file_get_contents برا دریافت اطلاعات و ذخیره در بانک اطلاعات بیشتر توضیح بدین …

    • توسط دستور file_get_contents میتونید اطلاعاتی رو از سایت هایی که غیر از https هستند دریافت کنید و درون یک متغیر قرار بدید و سپس هرجا که خواستید ذخیره کنید. دقت کنید که نوع فیلدی که درون دیتابیس برای ذخیره سازی داده ها استفاده می شود باید با نوع داده ای که قرار است درون آن ذخیره شود یکسان باشد.

  3. خیلی ممنون که سریع جواب میدین و پیگیر سوالات بچه ها هستین … اگه میشه تو چند خط همین روند گرفت و ذخیره کردن اطلاعات توضیح بدین … واقعا ممنون میشم

  4. سلام. روند انجام این کار به دو صورت خواهد بود
    روش اول: دریافت اطلاعات و ذخیره آنها درون یک فایل:

    file_put_contents(file_get_contents('http://tarhche.ir'),'file.txt');

    روش دوم دریافت اطلاعات و ذخیره در دیتابیس: ذخیره در دیتابیس رو خودتون باید با توجه به ساختار جدول های دیتابیس بسازید در اینجا من فقط دریافتش رو میگم

    $content=file_get_contents('http://tarhche.ir');

    سپس میتونید اطلاعات درون متغییر content رو در دیتابیس ذخیره کنید.

  5. سلام دوباره … منم دقیقا مشکلم همین جاست (روش دوم ) داخل content چی ذخیره میشه و چطور باید ازش استفاده کرد … واقعا ببخشید که دارم وقتتون میگیرم … روش های که گذاشتین امتحان کردم همشون جواب داد .. این روش ذهنم درگیر کرده اگه میشه توضیح بدین …

    • اگه میخواید بدونید که داخل content چی قرار میگیره کافیه که متغیر content رو با دستور print_r چاپ کنید به صورت زیر:

      print_r(content)

  6. علیرضا

    سلام
    چطوری میشه محتویاتی که به صورت Ajax لود میشه رو گرفت؟
    فرضا اطلاعاتی که تو یه جدول هست ajax data رو بخوام بگیرم

    • سلام دوست عزیز. اطلاعاتی که توسط ajax لود میشه از یک لینک یا آدرس گرفته میشه. فقط کافیه که لینکی که ajax اطلاعات رو ازش دریافت میکنه بدست بیارید. برای دیدن هرگونه تبادل اطلاعات از نوع ajax بعد از اینکه سایت کامل لود شد کلیک راست کنید و Inspect Element رو بزنید و سپس به سربرگ network برید, هرگونه تبادل اطلاعاتی که بین صفحه و سرور صورت بگیره توی قسمت network نمایش داده خواهد شد.

      • علیرضا

        ممنون از جوابتون
        اما من میزنم هر کاری کردم نتونستم بفهمم از کجا لود میکنه
        میشه یه مثال بزنین؟

        یه سئوال دیگه
        چطوری میشه خروجی یه فیلد از سایت دیگه بگیریم؟
        فرض کنین سایت x.com یه فیلد سرچی داره ، که سابمیت میشه تو سایتش میاد اطلاعات از دیتابیسش نشون میده به یوزر
        حالا من بخوام اون فیلد رو لود کنم تو سایت خودم که وصل بشه به همون سایت بعد از سابمیت اما نمایش اطلاعات خروجی تو سایت من باشه چی کار میشه کرد؟

        • سلام به شما دوست عزیز. برای اینکه با نحوه ی استفاده اشنا بشید میتونید این تایپیک از فروم ما رو ببینید (کلیک کنید)
          اگه میخواید که محتوایی که بعد از پر کردن یک فرم دریافت میشه رو بگیرید باید با Curl فرم رو پرکنید و بعدش محتوا رو دریافت کنید. میتونید لینک فرم مورد نظرتون رو توی فروم ما مطرح کنید تا پاسخ دریافت کنید. به دلیل اینکه اینجا بخش نظرات هست مقدور نیستم کد نویسی کنم چون به ظاهر سایت اسیب میرسه. موفق باشید.

          • علیرضا

            رجیستر کردم اما ایمیل وریفای که میاد میره تو اسپم
            آی پی وبسرور ایمیلیتون اسپمه

          • اسپم ها رو هم باید چک کنید، متاسفانه برای برخی افراد اسپم میشه 🙂 اسپم ها رو هم چک کنید چیز سختی نیست عزیز

        • علیرضا

          متاسفانه من هر چقدر سعی کردم تو فروم شما مطلب موردنظرمو بنویسم نشد!
          پرلودش هی میچرخه اما سابمیت نمیشه!
          ببینین من میخوام خروجی که از یه فیلد یه سایته رو تو سایتم نشون بدم چطوری میشه این کار رو انجام داد؟

          • ادرس اون سایتی که میخواید فید رو ازش بخونید بزارید تا یه نمونه مثال براتون بسازم. همچنین میتونید از این پست استفاده کنید(کلیک کنید) , توی این پست نحوه ی دریافت خروجی از فید یا rss سایت ها رو نشون دادم. بازم اگه سایتی مد نظر دارید میتونید لینکش رو بزارید تا براتون یه نمونه بسازم.
            فروم سالم هست من تست کردم! مرورگر خودتون رو بروز رسانی کنید شاید از مرورگر باشه. حتما یه لینک بدید براتون فیدخوان بسازم حالشو ببرید 😀 موفق باشید دوست عزیز.

  7. علیرضا

    سلام دوست عزیز
    مطلب بسیار پر کاربرد عالی بود

    من مشکلی که دارم اینه که می خوام از یک سایت که روی ssl هست سورس پیجشو بگیرم
    ولی انگار باید فایل certificate بهش معرفی کنی و من نمیدونم چجوری
    ممنون میشم کمکم کنی

    • سلام. شما میتونید با استفاده از cURL این کار رو انجام بدید. در همین پست یه مثال از cURL درج شده که میتونید ازش استفاده کنید. اگه لینک سایت مورد نظرتون رو درج کنید مشکل شما رو بررسی و حل خواهم کرد و یک برنامه به شما ایمیل میکنم.

  8. امیر.م

    چطور میشه چند تا المنت یک صفحه رو درخواست نمایش داد ؟
    چطور میتونیم یک المنت مثلا img که تو هیچ کلاسی و آی دی نیست و خودش هم هیچ کلاس و آی دی نداره رو نشون بدیم ( به طور مشخص ) ؟
    تشکر

    • شما میتونید از متد find که درون کتابخونه simple html dom هست استفاده کنید. بررسی کنید که والد النت شما چیه. مثلا فرض کنید المنت img شما درون یک المنت div قرار گرفته , در این صورت میتونید از کلاس یا ID تگ div استفاده کنید تا به المنت img خودتون برسید. فقط کافیه که به صورت سلسله مراتبی حرکت کنید , مثل سلکتور های CSS عمل کنید . اگه متوجه نشدید بگید تا یک مثال کامل براتون شرح بدم. موفق باشید.

  9. امیر.م

    تا قسمتی متوجه شدم اما ممکنه یک مثال بدید ؟

  10. میثم

    چطور میشه یه فایل رو که دریافت میکنیم رو قسمتیش رو دریافت نکنیم مثلا این کد در یک صفحه اچ تی ام ال هست که من میخوام فقط متن داخل تگ p رو دریافت کنم ولی اون تگ span هم باهاش دریافت میشه چکار کنم که اون تگ span رو دریافت نکنم
    امتیاز فیلم : ۷٫۰/۱۰

    بنده همینطور که شما گفتید عمل کردم
    foreach($html->find(‘p’) as $e){
    echo $e->outertext . ”;
    }

    تگ های p رو میگیره ولی اون تگ span هم چون داخل p هست گرفته مشه در صورتی که من نمیخوام اون تگ span گرفته نشه و فقط همون اطلاعات توی p گرفته بشه

    • میتونید بجای outertext
      از plaintext استفاده کنین.

      همچنین میتونین از strip_tags استفاده کنین :
      echo strip_tags($e->outertext)

  11. میثم

    جواب بنده رو نمیدید؟دیگاه قبلیم هم که مثل اینکه حذف شده.

می‌خواهید دیدگاهتان را بیان کنید؟