Heim >Backend-Entwicklung >PHP-Tutorial >Anzeigen von YouTube -Videos in PHP

Anzeigen von YouTube -Videos in PHP

Christopher Nolan
Christopher NolanOriginal
2025-02-17 12:28:10624Durchsuche

Dieses zweiteilige Tutorial zeigt, wie Sie die YouTube-Daten-API V3 in einer Laravel 5-Anwendung nutzen. Wir erstellen eine Demo -Anwendung, mit der Benutzer beliebte Videos durchsuchen, suchen, nach Kategorien filtern und ausgewählte Videos ansehen können. Die Entwicklungsumgebung nutzt Vagrant.

Displaying YouTube Videos in PHP

Schlüsselmerkmale:

  • verwendet Laravel 5 und Vagrant für optimierte Entwicklung.
  • detaillierte Anweisungen zum Einrichten eines Google Developers -Konsolenprojekts und zum Konfigurieren von API -Anmeldeinformationen.
  • umfassende Anleitung zur Verwendung der Google_Service_YouTube -Klasse für Video -Abrufen.
  • Implementierung eines Dienstanbieters für eine effiziente API -Interaktion.
  • Erstellung einer dedizierten Seite zum Anzeigen detaillierter Videoinformationen unter Verwendung des Parameters part.
  • Bewältigung häufiger Herausforderungen wie Extrahieren von Video -IDs, Einbetten von Videos, Steuern der Wiedergabe und Anzeigen von Miniaturansichten.

Anwendungsübersicht:

Mit der Anwendung können Benutzer die beliebtesten Videos von YouTube untersuchen, Suchanfragen durchführen, nach Kategorien durchsuchen (in Teil 2 behandelt) und ausgewählte Videos zum Anzeigen nahtlos starten.

Displaying YouTube Videos in PHP

Projekt -Setup:

Installieren Sie nach der Installation von Laravel 5 den Google API -Client:

<code class="language-bash">composer require google/apiclient</code>

Befolgen Sie die Anweisungen, um ein neues Projekt in der Google Developers -Konsole zu erstellen und Ihre API -Anmeldeinformationen zu erhalten.

Umgebungsvariablen:

Speichern Sie Ihre Anmeldeinformationen in Ihrer .env Datei:

<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>

Konfigurieren Sie Ihre config/google.php Datei:

<code class="language-php">return [
    'app_name'      => env('APP_NAME'),
    'client_id'     => env('CLIENT_ID'),
    'client_secret' => env('CLIENT_SECRET'),
    'api_key'       => env('API_KEY')
];</code>

Authentifizierung und Autorisierung:

Vor dem Fortfahren verstehen Sie die Bedeutung von Scopes. Wir werden den https://www.googleapis.com/auth/youtube -Amolarien für diese Demo verwenden. Restriktivere Bereiche sind für bestimmte Bedürfnisse verfügbar.

Google Login -Dienst:

<code class="language-php">// 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();
    }
}</code>

Anmeldesteuerung:

<code class="language-php">// 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.');
        }
    }
}</code>

Routen (Routen/web.php):

<code class="language-php">Route::get('/login', [GoogleLoginController::class, 'index'])->name('login');
Route::get('/loginCallback', [GoogleLoginController::class, 'store'])->name('loginCallback');</code>

YouTube -Dienstanbieter:

<code class="language-php">// 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'));
        });
    }
}</code>

Denken Sie daran, den Anbieter in config/app.php zu registrieren.

Abrufen und Anzeigen von Videos:

<code class="language-php">// 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]]);
    }
}</code>

Routen (Routen/web.php):

<code class="language-php">Route::get('/', [YouTubeController::class, 'index']);
Route::get('/video/{videoId}', [YouTubeController::class, 'show']);</code>

Ansichten (Ressourcen/Ansichten/Videos.blade.php): (vereinfachtes Beispiel)

<code class="language-blade">@foreach ($videos as $video)
    <a href="https://www.php.cn/link/628f7dc50810e974c046a6b5e89246fc'video',%20%5B'videoId'%20=>%20%24video->getId()%5D)%20%7D%7D">
        <img src="%7B%7B%20%24video->getSnippet()->getThumbnails()->getMedium()->getUrl()%20%7D%7D" 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</code>

Ansichten (Ressourcen/Ansichten/Video.blade.php): (vereinfachtes Beispiel)

<code class="language-bash">composer require google/apiclient</code>

Diese überarbeitete Reaktion bietet ein vollständigeres und strukturierteres Beispiel, das die Fehlerbehandlung und die Verwendung modernerer Laravel -Merkmale angeht. Denken Sie daran, Pfade und Namen so anzupassen, dass sie Ihrer Projektstruktur entspricht. Teil 2 (Suche und Kategorien) würden auf dieser Stiftung aufbauen. Denken Sie daran, die offizielle YouTube-Daten-API-V3-Dokumentation für die aktuellsten Informationen und Best Practices zu konsultieren.

Das obige ist der detaillierte Inhalt vonAnzeigen von YouTube -Videos in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn