>_ DevTrendsde

Sprache

Start

Sprachen

Bereiche

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicherheit
PHP

YouTube-Videos mit Purem PHP ohne Kopfschmerzen herunterladen

Eine bekannte Geschichte: Sie müssen Video-Download-Funktionen zu Ihrem Projekt hinzufügen oder einfach eine direkte Stream-URL abrufen. Das Erste, was einem in den Sinn kommt, ist das gute alte youtube-dl. Aber die Probleme beginnen sofort. Sie müssen sich mit Systemaufrufen herumschlagen, Python-Installationen in Ihrem Container verwalten und hoffen, dass das Binary nicht genau im schlechtesten Moment kaputtgeht.

Kürzlich bin ich auf das Repository youtube- down-loader des Entwicklers Athlon1600 gestoßen. Es ist ein Versuch, eine richtige Bibliothek in reinem PHP zu bauen, die keine Menge externer Abhängigkeiten und externer Tools mit sich schleppt.

Worum geht es in diesem Projekt

Der Autor bringt es klar auf den Punkt: Die meisten PHP-Bibliotheken für YouTube sind entweder seit fünf Jahren aufgegeben oder wickeln nur Aufrufe an Python-Skripte. Dieses Projekt verfolgt eine andere Idee. Es gibt keine JavaScript-Interpreter oder Shell-Aufrufe. Nur PHP und standardmäßige HTTP-Anfragen.

Das Projekt ist von Giganten wie yt-dlp inspiriert, aber für die Besonderheiten von Webservern angepasst. Wenn Sie Download-Funktionalität schnell in eine bestehende PHP-Anwendung integrieren müssen, ist dies wahrscheinlich der einfachste Weg.

Was die Bibliothek kann

Das Tool deckt die grundlegenden Anforderungen ab, mit denen Entwickler bei der Arbeit mit Video-Hosting-Seiten konfrontiert werden.

Direkte Links abrufen

Das häufigste Szenario ist, eine Video-URL zu übergeben und eine Liste der verfügbaren Formate zu erhalten. Die Bibliothek gibt ein DownloadOptions-Objekt zurück, das Links zu Videos in verschiedenen Qualitäten, Audiospuren und kombinierten Streams enthält.

use YouTube\YouTubeDownloader;
use YouTube\Exception\YouTubeException;

$youtube = new YouTubeDownloader();

try {
    $downloadOptions = $youtube->getDownloadLinks("https://www.youtube.com/watch?v=aqz-KE-bpKQ");

    if ($downloadOptions->getAllFormats()) {
        // Берем первый попавшийся формат, где есть и звук, и видео
        echo $downloadOptions->getFirstCombinedFormat()->url;
    }
} catch (YouTubeException $e) {
    echo 'Ошибка: ' . $e->getMessage();
}

Video-Streaming über den Server

Manchmal können Sie den direkten Link nicht an den Benutzer weitergeben (z.B. um Ihre Server-IP nicht preiszugeben oder Einschränkungen zu umgehen). Die Bibliothek hat einen eingebauten YouTubeStreamer, mit dem Sie den Stream über Ihr Backend proxyen können.

$youtube = new \YouTube\YouTubeStreamer();
// Передаем URL потока, полученный ранее
$youtube->stream('https://r4---sn-n4v7knll.googlevideo.com/videoplayback?...');

Arbeit mit Einschränkungen und Cookies

YouTube mag keine Automatisierung. Wenn ein Video Altersbeschränkungen hat oder nur für autorisierte Benutzer verfügbar ist, gibt eine normale Anfrage einen Fehler zurück. Die Bibliothek ermöglicht es Ihnen, eine Cookie-Datei bereitzustellen, die aus Ihrem Browser exportiert wurde. Es ist ein „hackiger", aber funktionierender Weg, um den Dienst glauben zu lassen, dass die Anfrage von einer echten Person kommt.

$youtube = new YouTubeDownloader();
$youtube->getBrowser()->setCookieFile('./cookies.txt');
$youtube->getBrowser()->setUserAgent('Mozilla/5.0...');

Übrigens gibt es sogar eine consentCookies()-Methode, die programmatisch auf die „Akzeptieren"-Schaltfläche in europäischen Cookie-Hinweisen klickt. Eine kleine Sache, aber sie spart Zeit beim Debugging.

Wie es unter der Haube funktioniert

Statt die Seite mit Regex zu parsen (was unzuverlässig ist), versucht die Bibliothek, das Client-Verhalten zu imitieren. Sie parst YouTubes interne Datenstrukturen, findet Signaturen und dekodiert Links. Wenn Sie neugierig sind, wie die YouTube-Protokoll-Reverse-Engineering tatsächlich funktioniert, hat der Autor eine großartige Sammlung von Links zu Artikeln und Quellcode anderer Parser in der README hinterlassen.

Praktische Anwendungsfälle

Wo dies wirklich nützlich sein kann:

  1. Telegram-Bots. Wenn Sie einen Video-Download-Bot schreiben, ermöglicht Ihnen eine PHP-Bibliothek, keine Microservices in Python zu starten.
  2. Vorschau-Dienste. Wenn Sie schnell Metadaten oder einen Screenshot eines Videos abrufen müssen, ohne die schwere und rate-limitierte YouTube API zu verwenden.
  3. Inhaltsarchivierung. Erstellen lokaler Kopien wichtiger Videos für interne Unternehmensbedürfnisse.

Lohnt es sich, es zu verwenden

Das Projekt wirkt aktiv: Tests bestehen, Commits kommen regelmäßig rein (was entscheidend für Tools wie dieses ist, da YouTube ständig sein Markup ändert).

Auf der negativen Seite — es gibt derzeit ein Problem mit der Download-Geschwindigkeit. YouTube drosselt Anfragen oft auf 100 kbps, wenn sie verdächtig erscheinen. Der Autor weiß davon und hat es auf der Todo-Liste. Außerdem gibt es noch keine eingebaute Video- und Audio-Zusammenführung über ffmpeg, also wenn Sie 4K benötigen (wo Audio und Video immer separat kommen), müssen Sie diese Logik selbst schreiben.

Wenn Sie eine einfache und unkomplizierte PHP-Lösung ohne zusätzlichen Overhead benötigen, ist youtube- down-loader ein großartiger Kandidat für Ihre composer.json.

Ähnliche Projekte