1

Cómo integrar la API de Vimeo con Laravel

Vimeo además de ser una gran red social de videos, es un buen lugar para alojar nuestros videos y utilizarlos de "forma privada" en la aplicación que queramos.


Instalación


Primero instalaremos el paquete vinkla/vimeo via Composer, que es un "puente" del repositorio oficial de Vimeo para PHP. Además en su página lo recomiendan como oficial para trabajar con Laravel.

composer require vinkla/vimeo


Luego agregamos el Service Provider al archivo config/app.php en el array providers:

Vinkla\Vimeo\VimeoServiceProvider::class


Para usar el paquete desde su Facade, puedes agregar esta línea en los aliases del mismo archivo:

'Vimeo' => Vinkla\Vimeo\Facades\Vimeo::class


La API nos pedirá nuestras credenciales de acceso, las cuales pondremos en el archivo config/vimeo.php, que podemos generar con el siguiente comando:

php artisan vendor:publish


Las credenciales de Vimeo que vas a agregar son las siguientes

'main' => [
  'client_id' => 'your-client-id',
  'client_secret' => 'your-client-secret',
  'access_token' => 'your-acces-token'
]


Ten presente que para contar estas credenciales debes tener una cuenta en Vimeo y pedir la autorización para la nueva App que vas a crear.


Para este tutorial he creado un proyecto de ejemplo con todo lo necesario para probar la integración de la API de Vimeo con Laravel, lo único que debes agregar son las credenciales de tu cuenta. En este proyecto hay 4 cosas importantes: la configuración de la API, las rutas, el controlador y la comunicación entre estos elementos y la vista con JavaScript.


Solicitud y configuración del API Vimeo



En el enlace My Apps puedes revisar las Apps que has creado, modificarlas y en este caso realizar la petición a Vimeo de una nueva:





Cuando te han aceptado la solicitud de la nueva App (aproximadamente un par de días), puedes tener acceso a las credenciales que te permitirán manipular la API de Vimeo.



En el enlace de "Authentication" de la nueva App vas a generar los “tokens” según los permisos que quieras darle a la aplicación o partes de la aplicación:



Las Rutas


Se ubican en el archivo app/Http/routes.php:

Route::get('/', [
   'as' => 'vimeo.home',
   'uses' => '[email protected]'
]);
Route::post('request', [
   'as' => 'vimeo.request',
   'uses' => '[email protected]'
]);
Route::post('complete', [
   'as' => 'vimeo.completeUpload',
   'uses' => '[email protected]'
]);
Route::post('update/{videoId}', [
   'as' => 'vimeo.updateVideoData',
   'uses' => '[email protected]'
]);


El controlador VimeoController


Creamos el controlador con php artisan make:controller VimeoController  el cual contendrá:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Vinkla\Vimeo\Facades\Vimeo;

class VimeoController extends Controller
{
   public function index()
   {
       return view('vimeo.home');
   }

   private function getResponseVimeo(array $responseVimeo)
   {
    return response($responseVimeo['body'], $responseVimeo['status'], $responseVimeo['headers']);
   }

   public function request(Request $request)
   {
       $responseVimeo = Vimeo::request('/me/videos', $request->all(), 'POST');
       return response()->json($responseVimeo['body'], $responseVimeo['status']);
   }

   public function completeUpload(Request $request)
   {
    $responseVimeo = Vimeo::request($request->get('complete_uri'), [], 'DELETE');
    return $this->getResponseVimeo($responseVimeo);
   }

   public function updateVideoData(Request $request, $videoId)
   {
    $responseVimeo = Vimeo::request('/videos/' . $videoId, $request->all(), 'PATCH');
    return $this->getResponseVimeo($responseVimeo);
   }
}


La comunicación JS con nuestras rutas


Esta última parte es muy importante ya que es lo hará dinámica la aplicación y que sea agradable subir los videos para nuestros usuarios.


Para esto he utilizado el paquete vimeo-upload de Websemantics y lo he adaptado a nuestras necesidades. Este paquete consta de 2 archivos importantes:


  • upload.js: Las funciones básicas de comunicación Ajax con nuestro servidor, el cual se debe ubicar en el directorio public/js
  • home.blade.php: La vista con el formulario que nos permitirá subir nuestro video, que debe estar en el directorio resources/views/vimeo


Como había dicho antes este paquete lo puedes clonar y probarlo enseguida desde este repositorio y aquí el demo funcional.


Espero que sea de gran ayuda. Saludos :)

Escribe tu comentario
+ 2