Portada » Lenguaje PHP » Capturar pantalla del sitio web desde URL PHP

Capturar pantalla del sitio web desde URL PHP

Capturar pantalla del sitio web desde URL PHP. La captura de pantalla se utiliza para varios propósitos en la aplicación Web, por ejemplo en sistemas de publicidad es requisito mostrar la miniatura de la página que el usuario brinda a la hora de registrar dicha página.

Hay muchas API de terceros en la cual podemos obtener el mismo resultado y están disponibles para tomar una captura de pantalla de cualquier Página Web. Pero si queremos crear nuestro propio estilo, para obtener una captura de pantalla desde la URL, puede hacerlo de manera eficiente usando PHP y la librería de Google PageSpeed Insights API.

En este artículo tocaremos este tema y le daremos solución, sin embargo, usaremos Google PageSpeed Insights API que se utiliza para medir el tiempo de respuesta de una página web. Sin embargo, también se puede utilizar para obtener una captura de pantalla de manera sencilla.

La siguiente secuencia de comandos de ejemplo toma una captura de pantalla del sitio web por la dirección URL y se muestra como una imagen.

Capturar pantalla del sitio web desde URL PHP

Paso #01 Utilizando una  clase PHP.

Creamos nuestro código HTML donde contendrá el formulario para enviar el nombre de la página web mediante el método POST.

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Capturar pantalla del sitio web desde URL PHP</title>

<style type="text/css">
*{ font-family:Segoe, "Segoe UI", "DejaVu Sans", "Trebuchet MS", Verdana, sans-serif}
.main{ margin:auto; border:1px solid #7C7A7A; width:40%; text-align:left; padding:30px; background:#85c587}
input[type=submit]{ background:#6ca16e; width:100%;
padding:5px 15px;
background:#ccc;
cursor:pointer;
font-size:16px;

}
input[type=text]{ width:40%;
padding:5px 15px; height:25px;
font-size:16px;

}
</style>
</head>
<body bgcolor="#bed7c0">
<div class="main">
<h1>Capturar pantalla con PHP</h1>
<form action="" method="post">
<p><span>Url sitio web:</span><input type="text" name="site_url" /><span> <br> Ejemplo: http://www.google.com</span></p>
<p><input type="submit" name="enviar" value="Enviar URL" /></p>

</form>
<br>
<?php
if(isset($statusMsg)){
echo $statusMsg."<br>";
echo '<img src="screenshots/'.$file_name.'" width="350">';
}
?>
</div>
</body>
</html>
Capturar pantalla con PHP
Capturar pantalla con PHP

Paso #02 Script PHP para realizar la captura de pantalla.

Para la comprobación de envió del método post usaremos el ISSET y si no está declarada no realiza ninguna acciona y nos muestra solo el formulario HTML.

<?php

if (isset($_POST["enviar"])){
// Google API key
$googleApiKey = '';

// If URL input is submitted
if(isset($_POST['site_url'])){
$site_url = $_POST['site_url'];

$val_err = '';
if (filter_var($site_url, FILTER_VALIDATE_URL) === false) {
$val_err = 'Please enter a valid website URL.';
}

if(empty($val_err)){
try{
// Call Google PageSpeed Insights API
$googlePagespeedData = file_get_contents("https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=$site_url&screenshot=true&key=$googleApiKey");

// Decode json data
$googlePagespeedData = json_decode($googlePagespeedData, true);

// Retrieve screenshot image data
$screenshot = $googlePagespeedData['lighthouseResult']['audits']['final-screenshot']['details']['data'];

// Get domain name from site URL
$pieces = parse_url($site_url);
$domain = isset($pieces['host']) ? $pieces['host'] : '';
if(preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs)){
$domain = $regs['domain'];
}

// Save screenshot as an image
$screenshot_data = $screenshot;
list($type, $screenshot_data) = explode(';', $screenshot_data);
list(, $screenshot_data) = explode(',', $screenshot_data);
$screenshot_data = base64_decode($screenshot_data);

$file_name = !empty($domain)?$domain.'.png':'output.png';
$output_file = 'screenshots/'.$file_name;
file_put_contents($output_file, $screenshot_data);

$statusMsg = 'Screenshot saved as '.$output_file;
}catch(Exception $e){
$statusMsg = $e->getMessage();
}
}else{
$statusMsg = $val_err;
}
}
}
?>
Mostrando captura de pantalla con PHP
Mostrando captura de pantalla con PHP

Ya tenemos la respuesta del script que nos muestra la imagen de cualquier pagina web. De una manera sencilla podemos implementar en nuestros sistemas web.

Actualización del script captura de pantalla

Hemos realizado la actualización de este script que ahora utiliza el api de Google. por lo tanto, nos permitirá guardar la captura en nuestro disco y mostrarlo en el navegador a través de una url.

Este script del lado del servidor maneja el proceso de captura de pantalla con la API de Google PageSpeed Insights usando PHP.

Nota:

Es importante obtener la Api para que nuestro script funcione correctamente y podemos visitar esta URL para obtener su api con una cuenta de Google

https://developers.google.com/speed/docs/insights/v5/get-started?hl=es

Una vez ingresado a esa URL podemos gestionar nuestra API

Luego, elegimos y creamos un poryecto en google y obtenemos facilmente nuestra API

Una vez obtenido la api de google podemos agregarlo a nuestro script, en esta sección

// Google API key
$googleApiKey = '';

Obtener y guardar capturas de pantalla con PHP

  • Valide el valor de entrada para verificar si la URL dada es válida usando el filtro PHP FILTER_VALIDATE_URL.
  • Llame a la API de Google PageSpeed ​​Insights y obtenga datos con la función PHP file_get_contents().
  • Recupere datos de imagen de captura de pantalla del sitio web usando PHP.
  • Obtenga el nombre de dominio de la URL del sitio web y use el dominio como el nombre del archivo de captura de pantalla de salida.
  • Guarde los datos de base64 en un archivo y guarde la captura de pantalla como una imagen usando la función PHP file_put_contents().

Código Completo del script en un solo archivo.

Líneas arriba hemos comentado el api de Google es muy importante para poder obtener la captura de pantalla.

<?php


if (isset($_POST["enviar"])){
// Google API key
$googleApiKey = '';

// If URL input is submitted
if(isset($_POST['site_url'])){
$site_url = $_POST['site_url'];

$val_err = '';
if (filter_var($site_url, FILTER_VALIDATE_URL) === false) {
$val_err = 'Please enter a valid website URL.';
}

if(empty($val_err)){
try{
// Call Google PageSpeed Insights API
$googlePagespeedData = file_get_contents("https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=$site_url&screenshot=true&key=$googleApiKey");

// Decode json data
$googlePagespeedData = json_decode($googlePagespeedData, true);

// Retrieve screenshot image data
$screenshot = $googlePagespeedData['lighthouseResult']['audits']['final-screenshot']['details']['data'];

// Get domain name from site URL
$pieces = parse_url($site_url);
$domain = isset($pieces['host']) ? $pieces['host'] : '';
if(preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs)){
$domain = $regs['domain'];
}

// Save screenshot as an image
$screenshot_data = $screenshot;
list($type, $screenshot_data) = explode(';', $screenshot_data);
list(, $screenshot_data) = explode(',', $screenshot_data);
$screenshot_data = base64_decode($screenshot_data);

$file_name = !empty($domain)?$domain.'.png':'output.png';
$output_file = 'screenshots/'.$file_name;
file_put_contents($output_file, $screenshot_data);

$statusMsg = 'Screenshot saved as '.$output_file;
}catch(Exception $e){
$statusMsg = $e->getMessage();
}
}else{
$statusMsg = $val_err;
}
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Capturar pantalla del sitio web desde URL PHP</title>

<style type="text/css">
*{ font-family:Segoe, "Segoe UI", "DejaVu Sans", "Trebuchet MS", Verdana, sans-serif}
.main{ margin:auto; border:1px solid #7C7A7A; width:40%; text-align:left; padding:30px; background:#85c587}
input[type=submit]{ background:#6ca16e; width:100%;
padding:5px 15px;
background:#ccc;
cursor:pointer;
font-size:16px;

}
input[type=text]{ width:40%;
padding:5px 15px; height:25px;
font-size:16px;

}
</style>
</head>
<body bgcolor="#bed7c0">
<div class="main">
<h1>Capturar pantalla con PHP</h1>
<form action="" method="post">
<p><span>Url sitio web:</span><input type="text" name="site_url" /><span> <br> Ejemplo: http://www.google.com</span></p>
<p><input type="submit" name="enviar" value="Enviar URL" /></p>

</form>
<br>
<?php
if(isset($statusMsg)){
echo $statusMsg."<br>";
echo '<img src="screenshots/'.$file_name.'" width="350">';
}
?>
</div>
</body>
</html>

 

Captura de pantalla en PHP
Captura de pantalla en PHP

Descargar código fuente

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuarlo!

Promedio de puntuación 1 / 5. Recuento de votos: 1

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Scroll al inicio
Esta web utiliza cookies propias para su correcto funcionamiento. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Privacidad