Herramientas para capturar y convertir la web

Uso del framework Symfony de PHP con la API de captura de GrabzIt

Mientras que la biblioteca PHP de GrabzIt se enfoca en proporcionar una biblioteca que pueda usarse en cualquier proyecto PHP. Symfony Los proyectos PHP se organizan de una manera única que requiere un poco más de trabajo.

Symfony es uno de los marcos PHP más importantes que se utilizan actualmente y acelera el desarrollo web al proporcionar un conjunto reutilizable de bibliotecas y componentes. Del cual GrabzIt ahora forma parte, gracias a Torben Lundsgaard de TLAMedia quien creó un paquete de GrabzIt para Symfony. Este software de código abierto utiliza el MIT License.

Para obtener el paquete GrabzIt, primero debes instalarlo con Composer.

composer require tlamedia/grabzit-bundle

Luego agréguelo a su kernel.

public function registerBundles()
{
$bundles = array(
//...
new Tla\GrabzitBundle\TlaGrabzitBundle(),
//…

Configuración

Conviertete Clave API y secreto y agréguelos a su archivo de configuración así.

# config.yml
tla_grabzit:
    key: 'Sign in to view your Application Key'
    secret: 'Sign in to view your Application Secret'

El paquete registra varios servicios que, cuando se llaman, devuelven la clase GrabzIt adecuada.

Identificador de servicio Clase GrabzIt
tla_grabzit.cliente GrabzItClient
tla_grabzit.imageoptions GrabzItImageOptions
tla_grabzit.pdfopciones GrabzItPDFOptions
tla_grabzit.docxoptions GrabzItDOCXOptions
tla_grabzit.animationoptions GrabzItAnimationOptions
tla_grabzit.tableoptions GrabzItTableOptions

Cómo generar capturas

Un ejemplo de cómo generar una miniatura en Symfony Framework.

namespace App\Service;

use Symfony\Component\DependencyInjection\ContainerInterface as Container;

class ThumbnailGenerator
{
    private $container;

    public function __construct(Container $container)
    {
        $this->router = $router;
        $this->container = $container;
    }

    public function generateThumbnail($url)
    {
        $grabzItHandlerUrl = 'https://www.my-grabzit-thumbnail-site.com/api/thumbmail-ready';

        $options = $this->container->get('tla_grabzit.imageoptions');
        $options->setBrowserWidth(1366);
        $options->setBrowserHeight(768);
        $options->setFormat("png");
        $options->setWidth(320);
        $options->setHeight(240);
        $options->setCustomId($domain);

        $grabzIt = $this->container->get('tla_grabzit.client');
        $grabzIt->URLToImage($url, $options);
        $grabzIt->Save($grabzItHandlerUrl);

        try {
            $grabzIt->URLToImage($url, $options);
            $grabzIt->Save($grabzItHandlerUrl);
            $result = true;
        } catch (\Throwable $t) {
            $result = false;
        }

        return $result;
    }
}

Cómo recibir capturas con un handler

Un ejemplo de cómo recibir capturas de GrabzIt usando un controlador en el framework Symfony. Por supuesto, deberá modificar esto para que coincida con sus propios requisitos.

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class ApiController extends Controller
{
    public function thumbnailReadyAction(Request $request)
    {
        $id = urldecode($request->query->get('id'));
        $customId = $request->query->get('customid');
        $thumbnailFormat = $request->query->get('format');

        if ($id && $customId && $thumbnailFormat) {

            $grabzItApplicationKey = $this->container->getParameter('tla_grabzit.key');

            if (0 === strpos($id, $grabzItApplicationKey)) {

                $grabzIt = $this->container->get('tla_grabzit.client');
                $result = $grabzIt->GetResult($id);

                if ($result) {
                    $rootPath = $this->get('kernel')->getRootDir() . '/../';
                    $thumbnailsPath = $rootPath . 'var/thumbnails/';
                    $fileName = $customId. '.' .$thumbnailFormat;
                    
                    file_put_contents($thumbnailsPath . $fileName, $result);
                } else {
                    throw $this->createNotFoundException('GrabzIt did not return a file');
                }
            } else {
                throw $this->createNotFoundException('Wrong key - Unauthorized access');
            }
        } else {
            throw $this->createNotFoundException('Missing parameters');
        }
        return new Response(null, 200);
    }
}

Este artículo de ayuda se ha ampliado desde el ayuda para este paquete detallada en GitHub.