Maison > développement back-end > tutoriel php > Affichage des vidéos YouTube en php

Affichage des vidéos YouTube en php

Christopher Nolan
Libérer: 2025-02-17 12:28:10
original
618 Les gens l'ont consulté

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.

Displaying YouTube Videos in PHP

Caractéristiques de clé:

  • utilise Laravel 5 et Vagrant pour le développement rationalisé.
  • Instructions détaillées pour la configuration d'un projet de console Google Developers et la configuration des informations d'identification de l'API.
  • Guide complète sur l'utilisation de la classe Google_Service_YouTube pour la récupération vidéo.
  • Implémentation d'un fournisseur de services pour une interaction API efficace.
  • Création d'une page dédiée pour afficher des informations vidéo détaillées, en utilisant le paramètre part.
  • résoudre des défis courants, tels que l'extraction d'identifices vidéo, l'intégration de vidéos, le contrôle de la lecture et l'affichage des miniatures.

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.

Displaying YouTube Videos in PHP

Configuration du projet:

Après l'installation de Laravel 5, installez le client de l'API Google:

composer require google/apiclient
Copier après la connexion
Copier après la connexion

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>
Copier après la connexion

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')
];
Copier après la connexion

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();
    }
}
Copier après la connexion

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.');
        }
    }
}
Copier après la connexion

Routes (routes / web.php):

Route::get('/login', [GoogleLoginController::class, 'index'])->name('login');
Route::get('/loginCallback', [GoogleLoginController::class, 'store'])->name('loginCallback');
Copier après la connexion

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'));
        });
    }
}
Copier après la connexion

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]]);
    }
}
Copier après la connexion

Routes (routes / web.php):

Route::get('/', [YouTubeController::class, 'index']);
Route::get('/video/{videoId}', [YouTubeController::class, 'show']);
Copier après la connexion

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
Copier après la connexion

Vues (ressources / vues / vidéo.blade.php): (exemple simplifié)

composer require google/apiclient
Copier après la connexion
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal