Skip to content

Alles für WordPress, Webentwicklung — und mehr

🔍 Suche nach Videos auf YouTube mit der Data API v3: eine vollständige Anleitung

🔍 Suche nach Videos auf YouTube mit der Data API v3: eine vollständige Anleitung

Ihre Website benötigt einen YouTube-Video-Feed, aber es gibt kein fertiges Plugin für diese Aufgabe, und Sie stellen sich bereits eine Woche voller Kampf mit OAuth, Tokens und sperrigen Bibliotheken vor. Die YouTube Data API v3 erledigt diese Aufgabe in etwa einer Stunde. Kein OAuth, keine Benutzer-Tokens, keine externen Abhängigkeiten. Nur ein API-Schlüssel und eine korrekt zusammengestellte URL.

Der Search-Endpunkt liefert Videos, Kanäle und Playlists anhand von Schlüsselwörtern zurück. Er filtert nach Datum, Dauer und Kanal. Er sortiert nach Relevanz oder Aufrufzahlen. In der Praxis deckt dies die meisten Szenarien ab, vom Video-Feed eines bestimmten Kanals bis hin zu einer Zusammenstellung von „WordPress-Tutorials" aus dem letzten Monat.

Nachfolgend finden Sie eine Schritt-für-Schritt-Anleitung mit Live-Request-Beispielen und PHP-Code. Am Ende haben Sie ein funktionierendes Suchmodul: strukturiertes JSON rein, Video-Galerie raus, null Drittanbieter-Bibliotheken.

💡 Kurzüberblick:

  • Erstellen Sie ein Projekt in der Google Cloud Console, aktivieren Sie die YouTube Data API v3 und besorgen Sie sich einen API-Schlüssel.
  • Bauen Sie die Such-Request-URL zusammen: Endpunkt /youtube/v3/search, erforderliche Parameter part=snippet, key und q (seit Juni 2025 ist q Pflicht; ohne diesen Parameter liefert die API ein leeres Array zurück).
  • Fügen Sie Filter hinzu: type (video/channel/playlist), channelId, publishedAfter/publishedBefore, maxResults, order, videoDuration, videoEmbeddable.
  • Führen Sie den Request via cURL in PHP aus, parsen Sie die JSON-Antwort, zeigen Sie die Ergebnisse an und richten Sie ein Caching über WordPress-Transients ein.

Schritt 1: Ihren API-Schlüssel erhalten

Ohne Schlüssel geht kein API-Request raus. Der Schlüssel ist an ein Projekt in der Google Cloud Console gebunden und identifiziert Ihre Anwendung; mehr als die Anmeldung mit einem Google-Konto ist nicht erforderlich.

So gehen Sie vor:

  • Öffnen Sie die Google Cloud Console und erstellen Sie ein neues Projekt oder wählen Sie ein bestehendes aus.
  • Gehen Sie zu APIs & Services → Bibliothek, suchen Sie nach „YouTube Data API v3" und klicken Sie auf Aktivieren.
  • Öffnen Sie APIs & Services → Anmeldedaten, klicken Sie auf Anmeldedaten erstellen → API-Schlüssel.
  • Kopieren Sie den Schlüssel. Richten Sie sofort eine Einschränkung ein: Schlüssel einschränken → YouTube Data API v3, damit der Schlüssel nicht für andere Google-Dienste verwendet werden kann.

Der Schlüssel sieht aus wie eine Zeichenfolge wie AIzaSyD-... und wird bei jedem Request über den Parameter key übergeben. Für die öffentliche Videosuche reicht das aus; OAuth ist nicht nötig. Wenn Sie jedoch Requests im Namen eines Nutzers planen (Video-Upload, Playlist-Verwaltung), benötigen Sie OAuth 2.0.

Schnelltest: Senden Sie einen GET-Request an den search-Endpunkt mit einem beliebigen Suchbegriff. Wenn Sie JSON mit einem items-Array erhalten, funktioniert der Schlüssel.

Schritt 2: Such-Request-URL und erforderliche Parameter

Endpunkt für die Suche:

1GET https://www.googleapis.com/youtube/v3/search

Zwei Parameter sind immer erforderlich:

Parameter

Zweck

part

Welche Ressourceneigenschaften in die Antwort aufgenommen werden sollen. Für die Suche benötigen Sie snippet. Das Snippet enthält Titel, Beschreibung, Thumbnails und channelTitle.

key

Ihr API-Schlüssel.

q

Die Suchanfrage. Akzeptiert Freitext, genau wie die Suchleiste auf youtube.com.

Der Parameter q akzeptiert Freitext, genau wie die Suchleiste auf youtube.com. Sie können mehrere Wörter durch Leerzeichen oder Pluszeichen getrennt übergeben: q=wordpress+speed+optimization. Groß- und Kleinschreibung spielt keine Rolle.

Minimal funktionierender Request:

1https://www.googleapis.com/youtube/v3/search?part=snippet&q=wordpress&key=YOUR_KEY

Er liefert 5 Ergebnisse zurück (der Standardwert), das ist das, was die API zurückgibt, wenn maxResults nicht überschrieben wird.

Der Parameter type grenzt den gesuchten Ressourcentyp ein:

  • video, nur Videos;
  • channel, nur Kanäle;
  • playlist, nur Playlists.

Sie können mehrere Werte durch Kommas getrennt angeben: type=video,channel. Wird er weggelassen, durchsucht die API alles. Die übrigen Parameter sind optional, machen aber aus einer rohen Abfrage ein präzises Werkzeug.

Schritt 3: Videos nach Schlüsselwörtern suchen

Ein klassisches Szenario: Ein Nutzer gibt auf Ihrer Website einen Suchbegriff ein, Sie senden ihn an die YouTube-API und zeigen eine Auswahl von Videos an.

Beispiel-Request für die Suche nach Videos mit dem Wort „swimming":

1https://www.googleapis.com/youtube/v3/search?part=snippet&q=swimming&type=video&key=YOUR_KEY

Die Antwort kommt als JSON. In items[] befindet sich ein Array gefundener Ressourcen. Für jedes Video haben Sie:

  • id.videoId, die eindeutige Kennung (eingesetzt in https://www.youtube.com/watch?v=...);
  • snippet.title, den Videotitel;
  • snippet.description, die Beschreibung;
  • snippet.thumbnails, Vorschaubilder in mehreren Auflösungen (default, medium, high);
  • snippet.channelTitle, den Kanalnamen.

In PHP holt man die Antwort am einfachsten mit file_get_contents. Hier ist ein minimaler Verarbeitungscode:

1$apiKey = 'YOUR_KEY';
2$query = 'swimming';
3$url = "https://www.googleapis.com/youtube/v3/search?part=snippet&q={$query}&type=video&key={$apiKey}";
4
5$response = file_get_contents($url);
6$data = json_decode($response, true);
7
8foreach ($data['items'] as $item) {
9 echo '<h3>' . htmlspecialchars($item['snippet']['title']) . '</h3>';
10 echo '<p>' . htmlspecialchars($item['snippet']['description']) . '</p>';
11 echo '<img src="' . $item['snippet']['thumbnails']['medium']['url'] . '" alt="">';
12 echo '<a href="https://www.youtube.com/watch?v=' . $item['id']['videoId'] . '">Watch</a>';
13}

file_get_contents ist für Tests und kleine Projekte in Ordnung. Im Produktivbetrieb nutzen Sie cURL: Es gibt Ihnen Kontrolle über Timeouts, Header und Fehlerbehandlung. Und ja, wenn allow_url_fopen auf Ihrem Hosting deaktiviert ist, funktioniert file_get_contents für externe URLs nicht. In diesem Fall ist cURL Ihre einzige Option.

Schritt 4: Videos von einem bestimmten Kanal abrufen

Um alle Videos eines Kanals zu sammeln, übergeben Sie den Parameter channelId. Die Kanal-Kennung zu finden, ist einfach: Öffnen Sie die Kanalseite auf YouTube und kopieren Sie den Wert nach /channel/ aus der Adresszeile (zum Beispiel UC3VyA8KN_VgCF93EurnAQXw).

Request:

1https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=UC3VyA8KN_VgCF93EurnAQXw&type=video&order=date&key=YOUR_KEY

Der Parameter order=date sortiert nach Veröffentlichungsdatum, neueste zuerst. Ohne ihn liefert die API die relevantesten Ergebnisse, aber für einen Kanal-Feed ist die chronologische Reihenfolge sinnvoller.

Derselbe Request in PHP mit cURL und grundlegender Fehlerbehandlung:

1$apiKey = 'YOUR_KEY';
2$channelId = 'UC3VyA8KN_VgCF93EurnAQXw';
3$url = "https://www.googleapis.com/youtube/v3/search?part=snippet&channelId={$channelId}&type=video&order=date&key={$apiKey}";
4
5$ch = curl_init();
6curl_setopt_array($ch, [
7 CURLOPT_URL => $url,
8 CURLOPT_RETURNTRANSFER => true,
9 CURLOPT_TIMEOUT => 15,
10 CURLOPT_SSL_VERIFYPEER => true,
11]);
12
13$response = curl_exec($ch);
14$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
15curl_close($ch);
16
17if ($httpCode !== 200) {
18 echo 'Request error. Code: ' . $httpCode;
19 exit;
20}
21
22$data = json_decode($response, true);
23
24foreach ($data['items'] as $item) {
25 printf(
26 '<div><a href="https://www.youtube.com/watch?v=%s">%s</a></div>',
27 $item['id']['videoId'],
28 htmlspecialchars($item['snippet']['title'])
29 );
30}

Ein Kanal kann Hunderte von Videos haben, aber ein einzelner Request liefert maximal 50 zurück. Um alle abzurufen, nutzen Sie das Feld pageToken aus der API-Antwort: Übergeben Sie dessen Wert im nächsten Request als pageToken=<token>. Wiederholen Sie dies, bis nextPageToken leer ist.

Schritt 5: Limits, Sortierung und Quotas

Auf einer echten Website brauchen Sie selten „alle Videos zu einer Suchanfrage". Häufiger wollen Sie die Top 10 des letzten Monats oder eine Auswahl, die Shorts ausschließt. Dafür bietet die API fünf Feinjustierungsparameter.

maxResults: wie viele Einträge zurückgegeben werden sollen. Gültige Werte: 1 bis 50. Standard ist 5. Für eine Galerie oder einen Feed setzen Sie 20-30, aber behalten Sie die Quotas im Auge.

order: Sortierfeld:

Wert

Was es bewirkt

relevance

Nach Relevanz zur Suchanfrage (Standard)

date

Neueste zuerst

rating

Nach Bewertung (Likes/Dislikes)

viewCount

Nach Anzahl der Aufrufe

title

Alphabetisch nach Titel

publishedAfter** / **publishedBefore: Filter nach Veröffentlichungsdatum. Format: ISO 8601 (RFC 3339). Beispiel: publishedAfter=2026-01-01T00:00:00Z. Schneidet archivierte Videos ab, wenn Sie nur frische Inhalte benötigen.

videoDuration: Filter nach Länge:

  • short, unter 4 Minuten;
  • medium, von 4 bis 20 Minuten;
  • long, über 20 Minuten;
  • nicht angegeben, alle.

videoEmbeddable mit dem Wert true wählt nur Videos aus, die zur Einbettung auf Drittseiten zugelassen sind. Für eine Website, die den YouTube-Player einbettet, ist dies ein erforderlicher Parameter.

Kombinierter Request: 10 einbettbare Videos über WordPress, nicht älter als 2026, länger als 4 Minuten, sortiert nach Aufrufzahlen:

1https://www.googleapis.com/youtube/v3/search?part=snippet&q=wordpress+tutorial&type=video&videoEmbeddable=true&videoDuration=medium&publishedAfter=2026-01-01T00:00:00Z&maxResults=10&order=viewCount&key=YOUR_KEY

Quotas: So vermeiden Sie einen leeren Bildschirm

Jeder search.list-Aufruf kostet 100 Einheiten Ihres täglichen Quotas. Standardmäßig erhält ein Google-Cloud-Projekt 10.000 Einheiten pro Tag kostenlos, das sind rund 100 Suchaufrufe. Für eine Website mit mehr als hundert Besuchern pro Tag reicht das nicht.

Die Lösung ist, API-Antworten zu cachen. In WordPress funktionieren Transients dafür perfekt:

1$cache_key = 'yt_search_' . md5($query);
2$videos = get_transient($cache_key);
3
4if ($videos === false) {
5 $response = wp_remote_get($url);
6 $body = json_decode(wp_remote_retrieve_body($response), true);
7 $videos = $body['items'] ?? [];
8
9 set_transient($cache_key, $videos, 6 * HOUR_IN_SECONDS);
10}
11
12// Display $videos in a gallery...

Ein sechsstündiger Transient bedeutet maximal 4 API-Requests pro Tag für eine einzelne Suchphrase. Selbst mit zehn verschiedenen Suchanfragen über die Seiten der Website hinweg bleiben Sie unter 40 Aufrufen, weniger als die Hälfte des täglichen Quotas. Wenn Sie mehr benötigen, beantragen Sie eine Quota-Erhöhung über die Google Cloud Console: Quotas → YouTube Data API v3 → Bearbeiten.

Das obige Live-Beispiel zeigt, wie Sie in 15 Minuten eine Kanal-Video-Galerie über die Data API v3 in PHP aufbauen.

⁉️🤔 Häufig gestellte Fragen

Ist OAuth erforderlich, um über die YouTube-API nach Videos zu suchen?

Nein. Für Suchanfragen an /youtube/v3/search reicht ein API-Schlüssel. OAuth ist nur für Operationen auf Nutzerebene erforderlich: Videos hochladen, Playlists verwalten, Abonnements. Einen API-Schlüssel erhalten Sie in der Google Cloud Console in wenigen Minuten und können ihn sofort verwenden.

Wie viele Requests pro Tag können kostenlos durchgeführt werden?

Jedes Google-Cloud-Projekt erhält 10.000 Quota-Einheiten pro Tag kostenlos. Ein search.list-Aufruf kostet 100 Einheiten, also rund 100 Such-Requests pro Tag. Mit Caching über WordPress-Transients reicht das für eine durchschnittliche Website. Wenn Sie mehr benötigen, beantragen Sie eine Quota-Erhöhung über die Google Cloud Console (Bereich Quotas).

Wie erhalte ich mehr als 50 Ergebnisse aus einer einzelnen Suchanfrage?

Über Paginierung. In der JSON-Antwort liefert die API ein Feld nextPageToken zurück. Übergeben Sie dessen Wert als Parameter pageToken im nächsten Request, um die nächste Seite zu erhalten. Wiederholen Sie dies, bis nextPageToken leer ist. Ein vollständiger Durchlauf durch einen Kanal mit 500 Videos benötigt 10 Requests und 1.000 Quota-Einheiten.

Kann ich nach Videos in anderen Sprachen als Englisch suchen?

Ja. Der Parameter q akzeptiert jede Sprache, einschließlich Russisch. Der Suchalgorithmus von YouTube bestimmt die Sprachrelevanz automatisch. Um gezielt einzugrenzen, fügen Sie den Parameter relevanceLanguage=ru hinzu; die Ergebnisse werden dann zugunsten russischsprachiger Inhalte gewichtet.

Warum liefert die API ein leeres Array zurück, obwohl der Request korrekt ist?

Die häufigste Ursache: publishedAfter ist auf ein zukünftiges Datum oder auf das heutige Datum mit einer genauen Uhrzeit gesetzt. Verwenden Sie den Tagesbeginn: T00:00:00Z. Die zweite Ursache: eine Kombination von Filtern, die alle Ergebnisse ausschließt. Zum Beispiel können videoDuration=long und videoEmbeddable=true zusammen mit der channelId eines kleinen Kanals null Treffer ergeben. Vereinfachen Sie den Request auf part=snippet&q=...&key=... und fügen Sie Filter einzeln hinzu, wobei Sie die Ergebnisse bei jedem Schritt prüfen.

Suche in einer Stunde aufbauen: Welches Werkzeug zu welcher Aufgabe passt

Ihre Wahl der Werkzeuge hängt davon ab, was genau Sie bauen. Wenn Sie eine einfache Video-Galerie für einen Kanal auf einer kleinen Unternehmenswebsite benötigen, greifen Sie zu einem fertigen PHP-Wrapper wie madcoda/php-youtube-api: ein Composer-Paket, drei Codezeilen, Ergebnis in fünf Minuten. Wenn Sie eine benutzerdefinierte Suche mit Filtern, Caching und Paginierung bauen, schreiben Sie Ihren eigenen Handler mit cURL plus WordPress-Transients. Für eine stark frequentierte Website mit Zehntausenden Besuchern fügen Sie eine Redis-Cache-Schicht oberhalb der Transients hinzu und richten eine Hintergrundsynchronisation via WP-Cron ein; dann laden Seiten in Millisekunden, und API-Quotas werden nur für die Cache-Invalidierung verbraucht.

Sie haben bereits Ihren API-Schlüssel. Das Caching ist konfiguriert. Es bleibt nur noch, die URL für Ihre Aufgabe zusammenzustellen und die Ausgabeschleife zu schreiben. Das Ergebnis ist ein Live-Video-Feed, der nicht von Drittanbieterdiensten abhängt und keine Quota-Limits sprengt.