گرفتن اسکرین شات از سایت از URL توسط php

  • آپدیت شده در تاریخ

گرفتن اسکرین شات از سایت از URL توسط php

گرفتن اسکرین شات از صفحه وب یکی از قابلیت های کاربردی است که در وب اپلیکیشن ها به هدف های مختلفی استفاده می شود. API های زیادی برای گرفتن اسکرین شات از سایت از URL وجود دارند . اما اگر شما قصد دارید که اسکریپت خودتان را بسازید . این کار را به راحتی با Google PageSpeed Insights API انجام بدید.

عموما Google PageSpeed Insights API برای تست سرعت سایت استفاده می شود که در مقاله هم به آن اشاره کردیم. اما می توانید از این API برای گرفتن اسکرین شات از سایت از URL بهره ببرید. در این آموزش، یاد میگیرید چگونه این قابلیت را پیاده سازی کنید.

 

گرفتن اسکرین شات از سایت از URL

برای گرفتن تصویر لحظه ای ، این API نیاز به دو پارامتر ورودی دارد.

  • url : آدرس سایت مورد نظر
  • Screenshot : قرار دادن screenshot=true برا گرفتن داده های عکس

 

نمایش اسکرین شات از سایت

در این مثال از اسکریپت ، به شما نشان خواهیم داد چگونه یک فرم برای گرفتن آدرس سایت و نمایش اسکرین شات به کاربر بسازید.

HTML :

کد html زیر یک فیلد برای دریافت آدرس URL سایت و یک دکمه برای ارسال آدرس وارد شده به اسکریپت php ما دارد.

 

PHP (getScreenshot.php) :

قبل از فراخوانی Google PageSpeed Insights API ، مقدار input وارد شده چک می شود که آیا یک آدرس URL صحیح است یا نه . داده های مربوط به اسکرین شات از API خوانده و عکس اسکرین شات از وب سایت نمایش داده می شود.

 

موفق باشید

حسن شفیعی توسعه دهنده وب و موبایل مدیر سایت علاقه خاصی به برنامه نویسی وب و موبایل دارم و هر روز تلاش می کنم به این حوزه مسلط تر شوم و اطلاعاتم را به شکل کاربردی برای علاقه مندان در وب به اشتراک بگذارم. اگر نیاز به برنامه نویس برای انجام پروژه و نوشتن اسکریپت های سمت وب, اپلیکیشن های اندروید و ios, پیدا کردن راه حل توسعه و غیره داشتید حتما از طریق تماس با ما/ واتساپ/ تلگرام بهم پیام بدید. برایتهیه هاست مطمین و پرسرعت کلیک کنید
مطالب زیر را حتما بخوانید
دیدگاه کاربران (۲۵)

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

  1. هاشم شیخی ۱۶ اسفند ۱۴۰۰

    سلام
    جناب این api کار نمی‌کنه

    پاسخ
    1. حسن شفیعی ۱۷ اسفند ۱۴۰۰

      سلام.
      تست شد مشکلی نداره.
      روی لوکال جواب نمیده و هاستتون هم باید خارجی باشه

      پاسخ
  2. امیرحسین ۲۲ آذر ۱۴۰۰

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

    پاسخ
    1. حسن شفیعی ۲۲ آذر ۱۴۰۰

      سلام.
      در این روش از api خود گوگل استفاده میشه و هنوز هم کار میکنه

      پاسخ
  3. شبنم ۲۵ آبان ۱۳۹۹

    سلام و وقت بخیر
    من در اجرای کد اسکرین شات بهم پیغام trying to get property of non object رو نمایش میده. ولی قبلا همین کد تا چند ماه اجرا میشد بدون هیچ خطایی. چند روزی است که این خطا رو برام نمایش میده. در صورتیکه من تغییری توش ایجاد نکردم. ممنون میشم راهنماییم کنین.

    پاسخ
    1. حسن شفیعی ۲۶ آبان ۱۳۹۹

      سلام. طبق گفته گوگل ورژن قبلی این api منسوخ شده و باید از ورژن ۵ استفاده کنید.
      برای انجام تغییر در کد همان آدرس https://googleapis.com/pagespeedonline/v2/runPagespeed?url=$siteURL&screenshot=true را که داخلش v2 هست رو به v5 تغییر بدید تا قابل استفاده باشه.
      تغییرات در کد اصلی این پست هم انجام شد.
      موفق باشید.

      پاسخ
    2. شبنم ۲۸ آبان ۱۳۹۹

      سلام
      خیلی ممنون از پاسخ گوییتون.
      آقای شفیعی من یک کد php نوشتم که روی هاستم اجرا میشد بدون مشکل. ولی الان ۲ الی ۳ روزه که دچار مشکل شده و خطای trying to get property of non object رو میده. این در حالیه که من هیچ تغییری در کد و سرورم ندادم. ولی همین کد روی لوکال هاست با xampp بدن کوچکترین مشکلی اجرا میشه.
      خیلی دنبال علتش هستم. ولی واقعا الان نمی دونم مشکل از کجاست. چون تا همین دو روز پیش مشکلی نداشت. در ضمن روی لوکال هم داره اجرا میشه…..
      گفتم با شما در میون بزارم ببینم نظرتون چیه.
      خیلی ممنونم.
      واسه همین اینجا پیام گذاشتم که شما راهنماییم کنین.

      پاسخ
      1. حسن شفیعی ۲۸ آبان ۱۳۹۹

        سلام.
        تا کد بررسی نشه نمی توان چیزی گفت. ولی حتما بررسی کنید که ورژن php روی لوکال با هاست یک باشند.

        پاسخ
      2. شبنم ۲۸ آبان ۱۳۹۹

        ورژن هر دو رو بررسی کردم.
        هر دو ۷٫۱ هستن.
        این هم کدش:

        ‘gfgZmlUhw3ztqHApearpA254h1R9mrWQBbTW0ihhqGZyM1utvd’,
        ‘url’ => ‘https://www.google.com/’

        );
        $payload = json_encode($payload);
        $ch = curl_init(‘http://screeenly.com/api/v1/fullsize’);

        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, “POST”);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array( ‘Content-Type: application/json’, ‘Content-Length: ‘ . strlen($payload)) );
        $result = curl_exec($ch);
        //var_dump($result);
        $result = json_decode($result);
        $path = $result->path;

        ?>

        <img src="” alt=”Screenshot”>

        ممنون میشم کمکم کنین. چون نمی دونم چرا این خطا رو میده: Trying to get property ‘path’ of non-object

        پاسخ
      3. حسن شفیعی ۱ آذر ۱۳۹۹

        سلام. کد شما رو بنده تست نکردم ولی بهتره از apiی که ارایه شده استفاده کنید

        پاسخ
  4. احمد ۲۰ تیر ۱۳۹۹

    سلام
    کار نمی کنه

    پاسخ
    1. حسن شفیعی ۲۰ تیر ۱۳۹۹

      سلام. بله انگار این api که مربوط به گوگل هست از کار افتاده به جای آن از این اسکریپت استفاده کنید :
      https://github.com/microweber/screen

      پاسخ
  5. زینب ۹ آبان ۱۳۹۸

    باسلام
    خیلی ممنونم از مطالب مفیدتون
    یک سوالی دارم
    من هر کدی واسه اسکرین شات مینوسیم تو هر محیطی, آدرس سایت مورد نظرم رو میدم واسم خالی عکس می گیره.یعنی محتویات داخلش رو بهم نشون نمیده.ولی مشکل و جالب اینجاست که آدرس هر سایت دیگه ای رو که میزارم مشکلی نداره و عکس رو می گیره
    میخواستم بدونم ممکنه خود سرور این کارو کرده باشه که نشه اسکرین بگیرم از اون سایت؟؟
    خودم خیلی دنبال دلیل این مشکلم.ولی واقعا الان به این نتیجه رسیدم که شاید قفلش کردن
    ممنون میشم راهنماییم کنین اگه نظری دارین………

    پاسخ
    1. حسن شفیعی ۹ آبان ۱۳۹۸

      سلام خوشحالیم که مفید واقع شده.
      احتمالا خود سایت این دسترسی را برای چنین ربات هایی بسته و نمی تونید این عملیات رو روی سایت مورد نظر انجام بدید.
      موفق باشید.

      پاسخ
  6. شهرزاد ۱۳ مرداد ۱۳۹۸

    باسلام
    ممنون از سایت خوبتون
    یه سوال دارم
    چجوری میشه عکسی که از صفحه ی وب گرفتم رو به صورت خوکار ذخیره کنم-چون من میخام هر پنج دقیقه عکش بگیره از صفحه ام و خوکار در یک مسیری ذخیره کنه
    ممنون میشم راهنماییم کنین

    پاسخ
    1. حسن شفیعی ۱۳ مرداد ۱۳۹۸

      سلام. خوشحالیم که مفید واقع شده.
      مقدار رشته خروجی برگشت داده شده را با تابع file_put_contents داخل یک فایل مثلا img1.png ذخیره کنید . میتونید اسم فایل رو بصورت رندوم با تابع rand() تعیین کنید.
      همچنین برای هر پنج دقیقه هم از کرون جاب میتونید استفاده کنید
      لینک آموزش های مربوطه بصورت زیر است :
      تابع file_get_contents
      توابع ریاضی در php
      آموزش cron job در php
      موفق باشید.

      پاسخ
  7. فرهاد ۱۰ آذر ۱۳۹۷

    با سلام و خسته نباشید من با https://github.com/microweber/screen با استفاده از demo تونستم اسکرین بگیرم و عالی کار کرد ولی وقتی فرستادم تو هاست کلا ارور داد ایا برای فرستادن روی هاست قبلش باید کار خاصی انجام بدم من فقط پوشه vendor و چند تا فایل رو فرستادم دقیقا که تو local اجرا کردم
    Fatal error: Uncaught Screen\Exceptions\PhantomJsException in /home4/****/public_html/vendor/microweber
    /screen/src/Capture.php:259 Stack trace: #0
    ممنون میشم راهنمایی کنید

    پاسخ
    1. حسن شفیعی ۱۰ آذر ۱۳۹۷

      سلام. ممنون. ورژن php را مقابسه کنید و همچنین خط و فایل مورد نظر را بررسی کنید. موفق باشید.

      پاسخ
  8. علی ۲۴ تیر ۱۳۹۷

    خب این جور سایتا زیاد هستند ولی متاسفانه همه شون پولیه و باید اکانت های vip رو بخریم 🙁
    مشکل من php نیست من دنبال API هستم ، شما رایگان سراغ ندارید ؟

    پاسخ
    1. حسن شفیعی ۲۴ تیر ۱۳۹۷

      به ایمیل های الکی و اسپم پاسخ داده نمیشه (ایمیل اصلی alikeshtkaroXX…)به هر حال در جواب سوالتون در اینصورت میتونید از کتابخانه های آماده استفاده کنید و به پروژه تون اضافه کنید تا نیازی به سرویس خارجی نباشه مثل این کتابخانه php که میتونید با کامپوزر به پروزه استفاده کنید و از متدهاش برای گرفتن اسکرین شات بهره ببرید

      https://github.com/microweber/screen

      موفق باشید.

      پاسخ
      1. علی ۲۷ تیر ۱۳۹۷

        اها منظورتون رو فهمیدم
        من از اون ایمیل ها استفاده میکنم تا بتونم جوابم رو تو تلگرام دریافت کنم 😁

        پاسخ
      2. علی ۲۷ تیر ۱۳۹۷

        من اینو دانلود کردم ولی موقع استفاده از کامپوزر به مشکل میخورم:
        وقتی دستور composer install رو تو پوشه کتابخونه میزنم ارور میده

        پاسخ
      3. حسن شفیعی ۲۹ تیر ۱۳۹۷

        اگر فولدر مورد نظر در رابطه با این پکیج در /vendor ساخته شده باشه و بتونید از کلاس هاش یه آبجکت بسازید پس مطمینا مشکلی خاصی نداره و پکیج نصب شده چرا که از دستور chmod فقط برای دادن پرمیشن اجرا (x : execution) استفاده کرده(دستوری در لینوکس) که در ویندوز معنایی نداره و میتونید نادیده بگیرید.

        همچنین سعی کنید آخرین نسخه از کامپوزر را نصب داشته باشید.

        موفق باشید.

        پاسخ
  9. علی ۲۴ تیر ۱۳۹۷

    سلام
    این Api اسکرین رو با سایز کوچیک میده ، api میتونید معرفی کنید برای اسکرین شات در سایز های بزرگ ؟

    پاسخ
    1. حسن شفیعی ۲۴ تیر ۱۳۹۷

      سلام . بله میتونید از این سرویس https://browshot.com/api/documentation استفاده کنید که کدهای نمونه php هم داره
      موفق باشید.

      پاسخ
دوره های آموزشی