أدوات لالتقاط وتحويل الويب

استخدام PHP's Symfony Framework مع GrabzIt's Capture API

بينما تركز مكتبة GrabzIt PHP على توفير مكتبة يمكن استخدامها في أي مشروع PHP. في symfony يتم تجميع مشاريع PHP بطريقة فريدة تتطلب المزيد من العمل.

يعد Symfony واحدًا من أكبر أطر عمل PHP المستخدمة حاليًا، فهو يعمل على تسريع تطوير الويب من خلال توفير مجموعة قابلة لإعادة الاستخدام من المكتبات والمكونات. والتي أصبحت GrabzIt الآن جزءًا منها، وذلك بفضل Torben Lundsgaard TLMedia الذي أنشأ حزمة GrabzIt لـ Symfony. يستخدم هذا البرنامج مفتوح المصدر MIT الترخيص.

للحصول على حزمة GrabzIt، يجب عليك أولاً تثبيتها باستخدام الملحن.

composer require tlamedia/grabzit-bundle

ثم أضفه إلى النواة الخاصة بك.

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

الاعداد

احصل على API الرئيسية والسرية وإضافتها إلى ملف التكوين الخاص بك مثل ذلك.

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

تسجل الحزمة العديد من الخدمات التي عند استدعائها ترجع فئة 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

كيفية توليد اللقطات

مثال على كيفية إنشاء صورة مصغرة في 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;
    }
}

كيفية الحصول على لقطات مع معالج

مثال على كيفية تلقي اللقطات من GrabzIt باستخدام معالج في إطار عمل Symfony. بالطبع سوف تحتاج إلى تغيير هذا ليتناسب مع متطلباتك الخاصة.

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);
    }
}

تم توسيع مقالة المساعدة هذه من مساعدة لهذه الحزمة المفصلة على GitHub.