Secure password hashing in phpsteemCreated with Sketch.

in php •  6 years ago 

Capture Screenshot of Website from URL using PHP

Web page screenshot capture functionality is used for various purposes in the web application. There are many third party APIs are available to take a screenshot of the website. But if you wish to build your own script to get a screenshot from URL, you can do it easily using PHP using CURL.

There are many solutions to capture screenshots of Web pages. Using the Google Page Speed API is often better because internally Google uses the Chrome browser to capture exactly the way pages are presented to users, as if there was a real user seeing a given Web page. Manuel Lemos

Get Screenshot of Website from URL

To make web page snapshot, Google PageSpeed Insights API need to be called with the following params.

  • url: specify the URL of the website.
  • screenshot: specify screenshot=true to retrieve the screenshot data.
 <?php  
    $curl_init = curl_init(“[https://www.googleapis.com/pagespeedonline/v2/runPagespeed?url={$url}&screenshot=true](https://www.googleapis.com/pagespeedonline/v2/runPagespeed?url=%7B$url%7D&screenshot=true)");  
     curl_setopt($curl_init, CURLOPT_RETURNTRANSFER, true);  
     $response = curl_exec($curl_init);  
     curl_close($curl_init);  
     //call Google PageSpeed Insights API  
     //decode json data  
     $googlepsdata = json_decode($response, true);  
     //screenshot data  
     $snap = $googlepsdata[‘screenshot’][‘data’];  
     $snap = str_replace([‘_’, ‘-’], [‘/’, ‘+’], $snap);  
    echo "<img src=\"data:image/jpeg;base64,".$snap."\" />";

Capture Class

<?php

class Capture  
{  
    /**  
     * Capture web screenshot using google api.  
     *  
     * [@param](http://twitter.com/param "Twitter profile for @param") (string) $url Valid url  
     *  
     * [@return](http://twitter.com/return "Twitter profile for @return") blob  
     */  
    public function snap($url)  
    {  
        //Url value should not empty and validate url  
        if (!empty($url) && filter_var($url, FILTER_VALIDATE_URL)) {  
            $curl_init = curl_init("[https://www.googleapis.com/pagespeedonline/v2/runPagespeed?url={$url}&screenshot=true](https://www.googleapis.com/pagespeedonline/v2/runPagespeed?url=%7B$url%7D&screenshot=true)");  
            curl_setopt($curl_init, CURLOPT_RETURNTRANSFER, true);  
            $response = curl_exec($curl_init);  
            curl_close($curl_init);  
            //call Google PageSpeed Insights API  
            //decode json data  
            $googlepsdata = json_decode($response, true);  
            //screenshot data  
            $snap = $googlepsdata['screenshot']['data'];  
            $snap = str_replace(['_', '-'], ['/', '+'], $snap);

return $snap;  
        } else {  
            return false;  
        }  
    }  
}

Usage

$snap = (new Capture())->snap('[https://zestframework.xyz'](https://zestframework.xyz%27));  
if ($snap)  
    echo "<img src=\"data:image/jpeg;base64,".$snap."\" />";  
else  
    echo "Enter valid url";

Complete example

<?php

class Capture  
{  
    /**  
     * Capture web screenshot using google api.  
     *  
     * [@param](http://twitter.com/param "Twitter profile for @param") (string) $url Valid url  
     *  
     * [@return](http://twitter.com/return "Twitter profile for @return") blob  
     */  
    public function snap($url)  
    {  
        //Url value should not empty and validate url  
        if (!empty($url) && filter_var($url, FILTER_VALIDATE_URL)) {  
            $curl_init = curl_init("[https://www.googleapis.com/pagespeedonline/v2/runPagespeed?url={$url}&screenshot=true](https://www.googleapis.com/pagespeedonline/v2/runPagespeed?url=%7B$url%7D&screenshot=true)");  
            curl_setopt($curl_init, CURLOPT_RETURNTRANSFER, true);  
            $response = curl_exec($curl_init);  
            curl_close($curl_init);  
            //call Google PageSpeed Insights API  
            //decode json data  
            $googlepsdata = json_decode($response, true);  
            //screenshot data  
            $snap = $googlepsdata['screenshot']['data'];  
            $snap = str_replace(['_', '-'], ['/', '+'], $snap);

return $snap;  
        } else {  
            return false;  
        }  
    }  
}

$snap = (new Capture())->snap('[https://zestframework.xyz'](https://zestframework.xyz%27));  
if ($snap)  
    echo "<img src=\"data:image/jpeg;base64,".$snap."\" />";  
else  
    echo "Enter valid url"; 

Example with form

<?php

class Capture  
{  
    /**  
     * Capture web screenshot using google api.  
     *  
     * [@param](http://twitter.com/param "Twitter profile for @param") (string) $url Valid url  
     *  
     * [@return](http://twitter.com/return "Twitter profile for @return") blob  
     */  
    public function snap($url)  
    {  
        //Url value should not empty and validate url  
        if (!empty($url) && filter_var($url, FILTER_VALIDATE_URL)) {  
            $curl_init = curl_init("[https://www.googleapis.com/pagespeedonline/v2/runPagespeed?url={$url}&screenshot=true](https://www.googleapis.com/pagespeedonline/v2/runPagespeed?url=%7B$url%7D&screenshot=true)");  
            curl_setopt($curl_init, CURLOPT_RETURNTRANSFER, true);  
            $response = curl_exec($curl_init);  
            curl_close($curl_init);  
            //call Google PageSpeed Insights API  
            //decode json data  
            $googlepsdata = json_decode($response, true);  
            //screenshot data  
            $snap = $googlepsdata['screenshot']['data'];  
            $snap = str_replace(['_', '-'], ['/', '+'], $snap);

return $snap;  
        } else {  
            return false;  
        }  
    }  
}

if (isset($_POST['submit']) && !empty($_POST['url'])) {  
    $snap = (new Capture())->snap($_POST['url']);  
    if ($snap)  
        echo "<img src=\"data:image/jpeg;base64,".$snap."\" />";  
    else  
        echo "Enter valid url";  
}  
?>  
<form method="post" action="" >  
<p>Website URL: <input type="text" name="url" value="" /></p>  
<input type="submit" name="submit" value="CAPTURE">  
</form>

Conclusion

In this post you have learn about how you can capture the website Screenshort/Snap in php by using Google Page Speed API, also we built simple class for performing this to able to reuse our code

gist: https://gist.github.com/Lablnet/a43c1e04ce508c95e7beafb70a7a1459

github: https://github.com/Lablnet/PHP-URL

phpclasses:https://www.phpclasses.org/package/10655-PHP-Manipulate-URLs-and-capture-a-screenshot-of-a-page.html

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!