Cómo integrar la API de Vimeo con Laravel 5.2 y no morir en el intento

Hola amigos, este año me he hecho una promesa de compartir las cosas que voy aprendiendo en mis proyectos y que me han costado varios días de investigar y probar… Así que al grano:

  1. Creamos nuestro Proyecto en Laravel:
composer create-project --prefer-dist laravel/laravel laravel-vimeo-upload

2. Instalamos el paquete vinkla/vimeo para Laravel

composer require vinkla/vime
  • Agregamos el Service Provider al archivo config/app.php
Vinkla\Vimeo\VimeoServiceProvider::class
  • Si quieres usar el paquete desde su Facade, puede agregar esta linea en los aliases del mismo archivo
'Vimeo' => Vinkla\Vimeo\Facades\Vimeo::class
  • Generamos nuestro archivo de configuración de Vimeo
php artisan vendor:publish
  • Y agregamos nuestras credenciales de Vimeo (client_id, client_secret, acces_token) en el archivo config/vimeo.php
'main' => [
‘client_id’ => ‘your-client-id’,
‘client_secret’ => ‘your-client-secret’,
‘access_token’ => ‘your-acces-token‘
]

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

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 unos 3 días), puedes tener acceso a las credenciales que te permitirán manipular la API de Vimeo.

En Vimeo vas a generar los “tokens” según los permisos que quieras darle a la aplicación o partes de la aplicación:

3. Realizamos nuestras rutas y el Controller que administraran los accesos a la Api de Vimeo.

<?php
/*
| — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
| Routes File
| — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -
*/
Route::get(‘/’, [‘as’ => ‘vimeo.home’, ‘uses’ => ‘VimeoController@index’]);
Route::post(‘request’, [‘as’ => ‘vimeo.request’, ‘uses’ => ‘VimeoController@request’]);
Route::post(‘complete’, [‘as’ => ‘vimeo.completeUpload’, ‘uses’ => ‘VimeoController@completeUpload’]);
Route::post(‘update/{videoId}’, [‘as’ => ‘vimeo.updateVideoData’, ‘uses’ => ‘VimeoController@updateVideoData’]);

VimeoController.php

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

4. Por último y lo más importante la comunicación en JS con nuestras rutas de Laravel, las cuales mantendrán el dinamismo de la aplicación. Para esto he hecho un fork del paquete vimeo-upload de Websemantics y lo he adaptado a nuestras necesidades.

Este paquete consta de 2 archivos importantes:

  • upload.js: La API básica de comunicación Ajax con nuestro servidor
  • home.blade.php: La vista con el formulario que nos permitirá subir nuestro video.

El ejemplo completo lo he compartido en mi Github personal para que lo puedas clonar y probar con tus propias credenciales de Vimeo. También puedes ver una vista previa del Proyecto completo aquí.

Espero que este te sea de gran ayuda, igualmente puedes compartirme cualquier duda y con gusto te colaboro.

Saludos :)

Show your support

Clapping shows how much you appreciated Andrés Pinzón’s story.