Sometime we need to capture the screenshot of a website. In this tutorial we will learn how to capture screenshot of a website using php. We will user ScreenshotLayer to capture screenshot of a website. In this we will use PHP class “screenshot.class.php”. It will send an web request to ScreenshotLayer API to grab the website screenshot in JPG, GIF or PNG formats.
Get ScreenshotLayer API key:
Now you need the api key to access this class code. Using this api key an HTTP request send to screenshotLayer service to capture the screen. First you have to login to the website and choose the plan as per requirement. after login you will get an API key that you can use further to capture the screenshot of the website.
To get api key SignUp here: https://screenshotlayer.com/product
Use ScreenShotLayer Php Class code:
In the below screenshot.class.php code, Just use you own API-KEY in this file and include this file in your screen capture sample.php file.
<?php
class screenShot{
//*********************************************************
// Settings
//*********************************************************
//Your screenshotLayer API key
//Available at https://screenshotlayer.com/product
private $apiKey = 'YOUR_API_KEY_HERE';
//API endpoint
//only needs to change if the API changes location
private $endPoint = 'http://api.screenshotlayer.com/api/capture';
//Secret Keyword defined in your screenshotLayer dashboard
//leave blank if you have not activated this feature
private $secretKey = '';
//API key/value pair params
public $params = array();
//response capture
public $capture;
//image info
public $imageInfo;
/*
method: class construction
usage: screenShot([string url]);
params: url = URL to web video
The screenshotLayer API requires a valid webpage URL to capture.
returns: null
*/
public function __construct($url='',$format='PNG'){
$this->params['url'] = $url;
if( !empty($this->secretKey) ){
$secret = md5($url.$this->secretKey);
$this->params['secret_key'] = $secret;
}
}
/*
method: displayImage
usage: displayImage(void);
params: none
This method will write an image tag with the correct request url.
Note: this method will not verify the request is to a valid url and
will return a broken image if not.
returns: null
*/
public function displayImage(){
$request = $this->buildRequest();
echo '<img src="'.$request.'">';
}
/*
method: captureScreen
usage: captureScreen(void);
params: none
This method will query the api for the binary code of the captured webpage.
returns: null
*/
public function capturePage(){
$request = $this->buildRequest();
$this->capture = file_get_contents($request);
$this->imageInfo = getimagesizefromstring($this->capture);
if( empty($this->imageInfo) ){
if( empty($this->capture) ){
throw new Exception('An unknown error has occured');
}else{
$response = json_decode($this->capture);
throw new Exception($response->error->info);
}
}
}
/*
method: downloadCapture
usage: downloadCapture([string fileName='']);
params: fileName = The name of the file written to disk
This method will download the captured image to the client.
returns: null
*/
public function downloadCapture($fileName=''){
$fileName = ( empty($fileName) ) ? 'capture' : $fileName;
if( empty($this->capture) ){
throw new Exception('No image has been captured');
}
header('Content-Type: '.$this->imageInfo['mime']);
header('Content-Disposition: attachment; filename="'.$fileName.'"');
header('Content-Transfer-Encoding: binary');
echo $this->capture;
}
/*
method: displayCapture
usage: displayCapture(void);
params: none
This method will display the captured image to the browser.
returns: null
*/
public function displayCapture(){
if( empty($this->capture) ){
throw new Exception('No image has been captured');
}
header('Content-Type: '.$this->imageInfo['mime']);
echo $this->capture;
}
/*
method: buildRequest
usage: buildRequest(void);
params: none
This method will build the api request url.
returns: api request url
*/
public function buildRequest(){
if( empty($this->params['url']) ){
throw new Exception('API requires URL to video');
}
$request = $this->endPoint.'?access_key='.$this->apiKey;
foreach( $this->params as $key=>$value ){
if( $key == 'url' ){
$request .= '&url='.urlencode($value);
}else{
$request .= '&'.$key.'='.$value;
}
}
return $request;
}
/*
method: setParam
usage: setParam(string key, string value);
params: key = key of the params key/value pair
value = value of the params key/value pair
add or change the params key/value pair specified.
returns: null
*/
public function setParam($key,$value){
$this->params[$key] = $value;
}
}
?>
Write PHP code to Capture Screen
After that use the below mentioend code to capture the screen. Follow below “sample.php” file code for this. we can create an object of the screenshot class by passign the url of the website, which we want to capture.
<?php
//include screenShot class
include('screenshot.class.php');
//use own website url
$screenShot = new screenShot('https://atcodex.com/');
//display html image tag for captured webpage
$screenShot->displayImage();
//$screenShot->capturePage();
//$screenShot->downloadCapture('test.png');
//$screenShot->displayCapture();
?>
Run the code and you will the get screenshot of the website. ScreenshotLayer stores your image for 30 days only untill you capture again.
You can also check complete ScreenshotLayer API documentation here: https://screenshotlayer.com/documentation.
There are multple tools and library available out there to capture the screenshot of the website. But personally i like this very easy to integrate on any website.
Recommended Posts For You
You can also visit the following related posts

