گرفتن اسکرین شات از صفحه وب یکی از قابلیت های کاربردی است که در وب اپلیکیشن ها به هدف های مختلفی استفاده می شود. API های زیادی برای گرفتن اسکرین شات از سایت از URL وجود دارند . اما اگر شما قصد دارید که اسکریپت خودتان را بسازید . این کار را به راحتی با Google PageSpeed Insights API انجام بدید.
عموما Google PageSpeed Insights API برای تست سرعت سایت استفاده می شود که در مقاله هم به آن اشاره کردیم. اما می توانید از این API برای گرفتن اسکرین شات از سایت از URL بهره ببرید. در این آموزش، یاد میگیرید چگونه این قابلیت را پیاده سازی کنید.
گرفتن اسکرین شات از سایت از URL
برای گرفتن تصویر لحظه ای ، این API نیاز به دو پارامتر ورودی دارد.
- url : آدرس سایت مورد نظر
- Screenshot : قرار دادن screenshot=true برا گرفتن داده های عکس
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//website url $siteURL = "http://www.netparadis.com/"; //call Google PageSpeed Insights API $googlePagespeedData = file_get_contents("https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=$siteURL&screenshot=true"); //decode json data $googlePagespeedData = json_decode($googlePagespeedData, true); //screenshot data $screenshot = $googlePagespeedData['screenshot']['data']; $screenshot = str_replace(array('_','-'),array('/','+'),$screenshot); //display screenshot image echo "<img src=\"data:image/jpeg;base64,".$screenshot."\" />"; |
نمایش اسکرین شات از سایت
در این مثال از اسکریپت ، به شما نشان خواهیم داد چگونه یک فرم برای گرفتن آدرس سایت و نمایش اسکرین شات به کاربر بسازید.
HTML :
کد html زیر یک فیلد برای دریافت آدرس URL سایت و یک دکمه برای ارسال آدرس وارد شده به اسکریپت php ما دارد.
1 2 3 4 |
<form method="post" action="getScreenshot.php" > <p>Website URL: <input type="text" name="url" value="" /></p> <input type="submit" name="submit" value="CAPTURE"> </form> |
PHP (getScreenshot.php) :
قبل از فراخوانی Google PageSpeed Insights API ، مقدار input وارد شده چک می شود که آیا یک آدرس URL صحیح است یا نه . داده های مربوط به اسکرین شات از API خوانده و عکس اسکرین شات از وب سایت نمایش داده می شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php if(!empty($_POST['url'])){ //website url $siteURL = $_POST['url']; if(filter_var($siteURL, FILTER_VALIDATE_URL)){ //call Google PageSpeed Insights API $googlePagespeedData = file_get_contents("https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=$siteURL&screenshot=true"); //decode json data $googlePagespeedData = json_decode($googlePagespeedData, true); //screenshot data $screenshot = $googlePagespeedData['screenshot']['data']; $screenshot = str_replace(array('_','-'),array('/','+'),$screenshot); //display screenshot image echo "<img src=\"data:image/jpeg;base64,".$screenshot."\" />"; }else{ echo "Please enter a valid URL."; } } ?> |
موفق باشید
سلام
جناب این api کار نمیکنه
سلام.
تست شد مشکلی نداره.
روی لوکال جواب نمیده و هاستتون هم باید خارجی باشه
سلام این روش از کار افتاده؟
سلام.
در این روش از api خود گوگل استفاده میشه و هنوز هم کار میکنه
سلام و وقت بخیر
من در اجرای کد اسکرین شات بهم پیغام trying to get property of non object رو نمایش میده. ولی قبلا همین کد تا چند ماه اجرا میشد بدون هیچ خطایی. چند روزی است که این خطا رو برام نمایش میده. در صورتیکه من تغییری توش ایجاد نکردم. ممنون میشم راهنماییم کنین.
سلام. طبق گفته گوگل ورژن قبلی این api منسوخ شده و باید از ورژن ۵ استفاده کنید.
برای انجام تغییر در کد همان آدرس https://googleapis.com/pagespeedonline/v2/runPagespeed?url=$siteURL&screenshot=true را که داخلش v2 هست رو به v5 تغییر بدید تا قابل استفاده باشه.
تغییرات در کد اصلی این پست هم انجام شد.
موفق باشید.
سلام
خیلی ممنون از پاسخ گوییتون.
آقای شفیعی من یک کد php نوشتم که روی هاستم اجرا میشد بدون مشکل. ولی الان ۲ الی ۳ روزه که دچار مشکل شده و خطای trying to get property of non object رو میده. این در حالیه که من هیچ تغییری در کد و سرورم ندادم. ولی همین کد روی لوکال هاست با xampp بدن کوچکترین مشکلی اجرا میشه.
خیلی دنبال علتش هستم. ولی واقعا الان نمی دونم مشکل از کجاست. چون تا همین دو روز پیش مشکلی نداشت. در ضمن روی لوکال هم داره اجرا میشه…..
گفتم با شما در میون بزارم ببینم نظرتون چیه.
خیلی ممنونم.
واسه همین اینجا پیام گذاشتم که شما راهنماییم کنین.
سلام.
تا کد بررسی نشه نمی توان چیزی گفت. ولی حتما بررسی کنید که ورژن php روی لوکال با هاست یک باشند.
ورژن هر دو رو بررسی کردم.
هر دو ۷٫۱ هستن.
این هم کدش:
‘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
سلام. کد شما رو بنده تست نکردم ولی بهتره از apiی که ارایه شده استفاده کنید
سلام
کار نمی کنه
سلام. بله انگار این api که مربوط به گوگل هست از کار افتاده به جای آن از این اسکریپت استفاده کنید :
https://github.com/microweber/screen
باسلام
خیلی ممنونم از مطالب مفیدتون
یک سوالی دارم
من هر کدی واسه اسکرین شات مینوسیم تو هر محیطی, آدرس سایت مورد نظرم رو میدم واسم خالی عکس می گیره.یعنی محتویات داخلش رو بهم نشون نمیده.ولی مشکل و جالب اینجاست که آدرس هر سایت دیگه ای رو که میزارم مشکلی نداره و عکس رو می گیره
میخواستم بدونم ممکنه خود سرور این کارو کرده باشه که نشه اسکرین بگیرم از اون سایت؟؟
خودم خیلی دنبال دلیل این مشکلم.ولی واقعا الان به این نتیجه رسیدم که شاید قفلش کردن
ممنون میشم راهنماییم کنین اگه نظری دارین………
سلام خوشحالیم که مفید واقع شده.
احتمالا خود سایت این دسترسی را برای چنین ربات هایی بسته و نمی تونید این عملیات رو روی سایت مورد نظر انجام بدید.
موفق باشید.
باسلام
ممنون از سایت خوبتون
یه سوال دارم
چجوری میشه عکسی که از صفحه ی وب گرفتم رو به صورت خوکار ذخیره کنم-چون من میخام هر پنج دقیقه عکش بگیره از صفحه ام و خوکار در یک مسیری ذخیره کنه
ممنون میشم راهنماییم کنین
سلام. خوشحالیم که مفید واقع شده.
مقدار رشته خروجی برگشت داده شده را با تابع file_put_contents داخل یک فایل مثلا img1.png ذخیره کنید . میتونید اسم فایل رو بصورت رندوم با تابع rand() تعیین کنید.
همچنین برای هر پنج دقیقه هم از کرون جاب میتونید استفاده کنید
لینک آموزش های مربوطه بصورت زیر است :
تابع file_get_contents
توابع ریاضی در php
آموزش cron job در php
موفق باشید.
با سلام و خسته نباشید من با 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
ممنون میشم راهنمایی کنید
سلام. ممنون. ورژن php را مقابسه کنید و همچنین خط و فایل مورد نظر را بررسی کنید. موفق باشید.
خب این جور سایتا زیاد هستند ولی متاسفانه همه شون پولیه و باید اکانت های vip رو بخریم 🙁
مشکل من php نیست من دنبال API هستم ، شما رایگان سراغ ندارید ؟
به ایمیل های الکی و اسپم پاسخ داده نمیشه (ایمیل اصلی alikeshtkaroXX…)به هر حال در جواب سوالتون در اینصورت میتونید از کتابخانه های آماده استفاده کنید و به پروژه تون اضافه کنید تا نیازی به سرویس خارجی نباشه مثل این کتابخانه php که میتونید با کامپوزر به پروزه استفاده کنید و از متدهاش برای گرفتن اسکرین شات بهره ببرید
https://github.com/microweber/screen
موفق باشید.
اها منظورتون رو فهمیدم
من از اون ایمیل ها استفاده میکنم تا بتونم جوابم رو تو تلگرام دریافت کنم 😁
من اینو دانلود کردم ولی موقع استفاده از کامپوزر به مشکل میخورم:
وقتی دستور composer install رو تو پوشه کتابخونه میزنم ارور میده
اگر فولدر مورد نظر در رابطه با این پکیج در /vendor ساخته شده باشه و بتونید از کلاس هاش یه آبجکت بسازید پس مطمینا مشکلی خاصی نداره و پکیج نصب شده چرا که از دستور chmod فقط برای دادن پرمیشن اجرا (x : execution) استفاده کرده(دستوری در لینوکس) که در ویندوز معنایی نداره و میتونید نادیده بگیرید.
همچنین سعی کنید آخرین نسخه از کامپوزر را نصب داشته باشید.
موفق باشید.
سلام
این Api اسکرین رو با سایز کوچیک میده ، api میتونید معرفی کنید برای اسکرین شات در سایز های بزرگ ؟
سلام . بله میتونید از این سرویس https://browshot.com/api/documentation استفاده کنید که کدهای نمونه php هم داره
موفق باشید.