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 unen de una manera única que requiere un poco más de trabajo.

Symfony es uno de los Frameworks PHP más grandes que se utilizan actualmente, acelera el desarrollo web al proporcionar un conjunto reutilizable de bibliotecas y componentes. De lo que ahora forma parte GrabzIt, 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 Bundle, primero debe instalarlo con Composer.

composer require tlamedia/grabzit-bundle

Luego agréguelo a su núcleo.

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

Configuración

Consigue tu 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 llama, devuelve la clase GrabzIt adecuada.

Identificador de servicio Clase GrabzIt
tla_grabzit.client GrabzItClient
tla_grabzit.imageoptions GrabzItImageOptions
tla_grabzit.pdfoptions 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 el Marco de Symfony.

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(1024);
        $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 controlador

Un ejemplo de cómo recibir capturas de GrabzIt usando un controlador en el marco de Symfony. Por supuesto, necesitaría 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 ayuda para este paquete detallado en GitHub.