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.
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.
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:
Se ubican en el archivo app/Http/routes.php:
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'
]);
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);
}
}
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:
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 :)