Ce didacticiel en deux parties montre comment tirer parti de l'API de données YouTube V3 dans une application Laravel 5. Nous allons créer une application de démonstration permettant aux utilisateurs de parcourir des vidéos populaires, de rechercher, de filtrer par catégorie et de regarder des vidéos sélectionnées. L'environnement de développement utilise un vagabond.
Caractéristiques de clé:
Google_Service_YouTube
pour la récupération vidéo. part
. Présentation de l'application:
L'application permet aux utilisateurs d'explorer les vidéos les plus populaires de YouTube, d'effectuer des recherches, de parcourir par catégorie (couverte dans la partie 2) et de lancer de manière transparente des vidéos sélectionnées pour la visualisation.
Configuration du projet:
Après l'installation de Laravel 5, installez le client de l'API Google:
composer require google/apiclient
Suivez les instructions pour créer un nouveau projet dans la console Google Developers et obtenez vos informations d'identification API.
Variables d'environnement:
Stockez vos informations d'identification dans votre fichier .env
:
<code>APP_DEBUG=true APP_NAME='Your App Name (Optional)' CLIENT_ID='Your Client ID' CLIENT_SECRET='Your Client Secret' API_KEY='Your API Key'</code>
Configurez votre fichier config/google.php
:
return [ 'app_name' => env('APP_NAME'), 'client_id' => env('CLIENT_ID'), 'client_secret' => env('CLIENT_SECRET'), 'api_key' => env('API_KEY') ];
Authentification et autorisation:
Avant de continuer, comprenez l'importance des portées. Nous utiliserons la portée https://www.googleapis.com/auth/youtube
pour cette démo. Des portées plus restrictives sont disponibles pour des besoins spécifiques.
Service de connexion Google:
// app/Services/GoogleLogin.php namespace App\Services; use Config; use Google_Client; use Session; use Input; class GoogleLogin { protected $client; public function __construct(Google_Client $client) { $this->client = $client; $this->client->setClientId(config('google.client_id')); $this->client->setClientSecret(config('google.client_secret')); $this->client->setDeveloperKey(config('google.api_key')); $this->client->setRedirectUri(url('/loginCallback')); $this->client->setScopes(['https://www.googleapis.com/auth/youtube']); $this->client->setAccessType('offline'); } public function isLoggedIn() { if (session()->has('token')) { $this->client->setAccessToken(session('token')); } return !$this->client->isAccessTokenExpired(); } public function login($code) { $this->client->authenticate($code); $token = $this->client->getAccessToken(); session(['token' => $token]); return $token; } public function getLoginUrl() { return $this->client->createAuthUrl(); } }
Contrôleur de connexion:
// app/Http/Controllers/GoogleLoginController.php namespace App\Http\Controllers; use App\Services\GoogleLogin; class GoogleLoginController extends Controller { public function index(GoogleLogin $googleLogin) { if ($googleLogin->isLoggedIn()) { return redirect('/'); } return view('login', ['loginUrl' => $googleLogin->getLoginUrl()]); } public function store(GoogleLogin $googleLogin) { if (request()->has('error')) { abort(403, request('error')); // Handle errors appropriately } if (request()->has('code')) { $googleLogin->login(request('code')); return redirect('/'); } else { abort(400, 'Missing code parameter.'); } } }
Routes (routes / web.php):
Route::get('/login', [GoogleLoginController::class, 'index'])->name('login'); Route::get('/loginCallback', [GoogleLoginController::class, 'store'])->name('loginCallback');
Fournisseur de services YouTube:
// app/Providers/YouTubeServiceProvider.php namespace App\Providers; use Google_Client; use Google_Service_YouTube; use Illuminate\Support\ServiceProvider; class YouTubeServiceProvider extends ServiceProvider { public function register() { $this->app->bind('GoogleClient', function () { $client = new Google_Client(); $client->setAccessToken(session('token')); return $client; }); $this->app->bind('youtube', function ($app) { return new Google_Service_YouTube($app->make('GoogleClient')); }); } }
N'oubliez pas d'enregistrer le fournisseur dans config/app.php
.
récupérer et afficher des vidéos:
// app/Http/Controllers/YouTubeController.php namespace App\Http\Controllers; use App\Services\GoogleLogin; use Google_Service_YouTube; use Illuminate\Http\Request; class YouTubeController extends Controller { public function index(GoogleLogin $googleLogin, Google_Service_YouTube $youtube, Request $request) { if (!$googleLogin->isLoggedIn()) { return redirect()->route('login'); } $options = ['chart' => 'mostPopular', 'maxResults' => 16]; if ($request->has('pageToken')) { $options['pageToken'] = $request->input('pageToken'); } $response = $youtube->videos->listVideos('id, snippet, player', $options); return view('videos', ['videos' => $response->getItems(), 'nextPageToken' => $response->getNextPageToken(), 'prevPageToken' => $response->getPrevPageToken()]); } public function show(GoogleLogin $googleLogin, Google_Service_YouTube $youtube, $videoId) { if (!$googleLogin->isLoggedIn()) { return redirect()->route('login'); } $options = ['part' => 'id,snippet,player,contentDetails,statistics,status', 'id' => $videoId]; $response = $youtube->videos->listVideos($options); if (count($response->getItems()) === 0) { abort(404); } return view('video', ['video' => $response->getItems()[0]]); } }
Routes (routes / web.php):
Route::get('/', [YouTubeController::class, 'index']); Route::get('/video/{videoId}', [YouTubeController::class, 'show']);
Vues (ressources / vues / vidéos.blade.php): (exemple simplifié)
@foreach ($videos as $video) <a href="https://www.php.cn/link/628f7dc50810e974c046a6b5e89246fc'video', ['videoId' => $video->getId()]) }}"> <img src="{{ $video- alt="Affichage des vidéos YouTube en php" >getSnippet()->getThumbnails()->getMedium()->getUrl() }}" alt="{{ $video->getSnippet()->getTitle() }}"> {{ $video->getSnippet()->getTitle() }} </a> @endforeach @if ($nextPageToken) <a href="https://www.php.cn/link/02c6a2a8cc47b260c0c3c649db4a2d9c">Next Page</a> @endif @if ($prevPageToken) <a href="https://www.php.cn/link/c71c14199fd7d86b0be2a0d4ee4c738f">Previous Page</a> @endif
Vues (ressources / vues / vidéo.blade.php): (exemple simplifié)
composer require google/apiclient
Cette réponse révisée fournit un exemple plus complet et structuré, en abordant la gestion des erreurs et en utilisant des fonctionnalités de Laravel plus modernes. N'oubliez pas d'ajuster les chemins et les noms pour correspondre à la structure de votre projet. La partie 2 (recherche et catégories) s'appuyerait sur cette fondation. N'oubliez pas de consulter la documentation officielle de l'API de données YouTube pour les informations les plus récentes et les meilleures pratiques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!