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

Affichage des vidéos YouTube en php

Feb 17, 2025 pm 12:28 PM

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'      =&gt; env('APP_NAME'),
    'client_id'     =&gt; env('CLIENT_ID'),
    'client_secret' =&gt; env('CLIENT_SECRET'),
    'api_key'       =&gt; 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-&gt;client = $client;
        $this-&gt;client-&gt;setClientId(config('google.client_id'));
        $this-&gt;client-&gt;setClientSecret(config('google.client_secret'));
        $this-&gt;client-&gt;setDeveloperKey(config('google.api_key'));
        $this-&gt;client-&gt;setRedirectUri(url('/loginCallback'));
        $this-&gt;client-&gt;setScopes(['https://www.googleapis.com/auth/youtube']);
        $this-&gt;client-&gt;setAccessType('offline');
    }

    public function isLoggedIn()
    {
        if (session()-&gt;has('token')) {
            $this-&gt;client-&gt;setAccessToken(session('token'));
        }
        return !$this-&gt;client-&gt;isAccessTokenExpired();
    }

    public function login($code)
    {
        $this-&gt;client-&gt;authenticate($code);
        $token = $this-&gt;client-&gt;getAccessToken();
        session(['token' =&gt; $token]);
        return $token;
    }

    public function getLoginUrl()
    {
        return $this-&gt;client-&gt;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-&gt;isLoggedIn()) {
            return redirect('/');
        }
        return view('login', ['loginUrl' =&gt; $googleLogin-&gt;getLoginUrl()]);
    }

    public function store(GoogleLogin $googleLogin)
    {
        if (request()-&gt;has('error')) {
            abort(403, request('error')); // Handle errors appropriately
        }

        if (request()-&gt;has('code')) {
            $googleLogin-&gt;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'])-&gt;name('login');
Route::get('/loginCallback', [GoogleLoginController::class, 'store'])-&gt;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-&gt;app-&gt;bind('GoogleClient', function () {
            $client = new Google_Client();
            $client-&gt;setAccessToken(session('token'));
            return $client;
        });

        $this-&gt;app-&gt;bind('youtube', function ($app) {
            return new Google_Service_YouTube($app-&gt;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-&gt;isLoggedIn()) {
            return redirect()-&gt;route('login');
        }

        $options = ['chart' =&gt; 'mostPopular', 'maxResults' =&gt; 16];
        if ($request-&gt;has('pageToken')) {
            $options['pageToken'] = $request-&gt;input('pageToken');
        }

        $response = $youtube-&gt;videos-&gt;listVideos('id, snippet, player', $options);
        return view('videos', ['videos' =&gt; $response-&gt;getItems(), 'nextPageToken' =&gt; $response-&gt;getNextPageToken(), 'prevPageToken' =&gt; $response-&gt;getPrevPageToken()]);
    }


    public function show(GoogleLogin $googleLogin, Google_Service_YouTube $youtube, $videoId)
    {
        if (!$googleLogin-&gt;isLoggedIn()) {
            return redirect()-&gt;route('login');
        }

        $options = ['part' =&gt; 'id,snippet,player,contentDetails,statistics,status', 'id' =&gt; $videoId];
        $response = $youtube-&gt;videos-&gt;listVideos($options);
        if (count($response-&gt;getItems()) === 0) {
            abort(404);
        }
        return view('video', ['video' =&gt; $response-&gt;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-&gt;getSnippet()-&gt;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

Article chaud

Musée de deux points: Guide de localisation de Bungle Wasteland
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Musée de deux points: Guide de localisation de Bungle Wasteland
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

11 meilleurs scripts de raccourcissement d'URL PHP (gratuit et premium) 11 meilleurs scripts de raccourcissement d'URL PHP (gratuit et premium) Mar 03, 2025 am 10:49 AM

11 meilleurs scripts de raccourcissement d'URL PHP (gratuit et premium)

Travailler avec les données de session Flash dans Laravel Travailler avec les données de session Flash dans Laravel Mar 12, 2025 pm 05:08 PM

Travailler avec les données de session Flash dans Laravel

6 compétences supplémentaires que chaque développeur PHP devrait avoir 6 compétences supplémentaires que chaque développeur PHP devrait avoir Feb 28, 2025 am 10:52 AM

6 compétences supplémentaires que chaque développeur PHP devrait avoir

Comprendre les tableaux en php Comprendre les tableaux en php Feb 28, 2025 am 10:53 AM

Comprendre les tableaux en php

Misque de réponse HTTP simplifié dans les tests Laravel Misque de réponse HTTP simplifié dans les tests Laravel Mar 12, 2025 pm 05:09 PM

Misque de réponse HTTP simplifié dans les tests Laravel

Construisez une application React avec un Laravel Back End: Partie 2, React Construisez une application React avec un Laravel Back End: Partie 2, React Mar 04, 2025 am 09:33 AM

Construisez une application React avec un Laravel Back End: Partie 2, React

12 meilleurs scripts de chat PHP sur Codecanyon 12 meilleurs scripts de chat PHP sur Codecanyon Mar 13, 2025 pm 12:08 PM

12 meilleurs scripts de chat PHP sur Codecanyon

Curl dans PHP: Comment utiliser l'extension PHP Curl dans les API REST Curl dans PHP: Comment utiliser l'extension PHP Curl dans les API REST Mar 14, 2025 am 11:42 AM

Curl dans PHP: Comment utiliser l'extension PHP Curl dans les API REST

See all articles