Come scaricare video da YouTube con PHP puro senza mal di testa
Una storia familiare: devi aggiungere il download di video al tuo progetto o semplicemente ottenere un URL di streaming diretto. La prima cosa che viene in mente è il buon vecchio youtube-dl. Ma i problemi iniziano subito. Devi gestire chiamate di sistema, gestire installazioni Python nel tuo container e sperare che il binario non si rompa nel momento peggiore possibile.
Recentemente ho scoperto il repository youtube- down- loader dello sviluppatore Athlon1600. È un tentativo di costruire una libreria vera e propria in PHP puro che non trascina dietro un sacco di dipendenze esterne e strumenti esterni.
Qual è lo scopo di questo progetto
L'autore lo dice chiaramente: la maggior parte delle librerie PHP per YouTube sono要么 abbandonate da cinque anni fa o semplicemente avvolgono chiamate a script Python. Questo progetto segue un'idea diversa. Non ci sono interpreter JavaScript o chiamate shell. Solo PHP e richieste HTTP standard.
Il progetto è ispirato da giganti come yt-dlp, ma adattato per le specificità dei server web. Se hai bisogno di integrare rapidamente funzionalità di download in un'applicazione PHP esistente, questa è probabilmente la strada più semplice.
Cosa può fare la libreria
Lo strumento copre le esigenze di base che gli sviluppatori affrontano quando lavorano con siti di video hosting.
Ottenere link diretti
Lo scenario più comune è fornire un URL video e ottenere un elenco di formati disponibili. La libreria restituisce un oggetto DownloadOptions contenente link a video di diverse qualità, tracce audio e stream combinati.
Il caso d'uso più comune è fornire un URL video e ottenere un elenco di formati disponibili. La libreria restituisce un oggetto DownloadOptions contenente link a video di diverse qualità, tracce audio e stream combinati.
Streaming video attraverso il server
A volte non puoi esporre il link diretto all'utente (ad esempio per evitare di esporre l'IP del tuo server o aggirare restrizioni). La libreria ha un YouTubeStreamer integrato che ti permette di fare da proxy allo stream attraverso il tuo backend.
A volte non puoi mostrare il link diretto all'utente (ad esempio per evitare di esporre l'IP del tuo server o per aggirare restrizioni). La libreria dispone di un YouTubeStreamer integrato che ti permette di instradare lo stream attraverso il tuo backend.
Lavorare con restrizioni e cookie
YouTube non ama l'automazione. Se un video ha restrizioni di età o è disponibile solo per utenti autorizzati, una richiesta normale restituirà un errore. La libreria ti permette di fornire un file di cookie esportato dal tuo browser. È un modo "hacky" ma funzionante per far pensare al servizio che la richiesta provenga da una persona reale.
Tra l'altro, c'è anche un metodo consentCookies() che clicca programmaticamente il pulsante "Accetta" nei banner dei cookie europei. Una piccola cosa, ma fa risparmiare tempo nel debugging.
Come funziona sotto il cofano
Invece di analizzare la pagina con regex (che è inaffidabile), la libreria cerca di imitare il comportamento del client. Analizza le strutture dati interne di YouTube, trova le firme e decodifica i link. Se sei curioso di come funziona effettivamente il reverse engineering del protocollo YouTube, l'autore ha lasciato una ottima raccolta di link ad articoli e codice sorgente di altri parser nel README.
Casi d'uso pratici
Dove questo può davvero tornare utile:
- Bot Telegram. Se stai scrivendo un bot per il download di video, una libreria PHP ti permette di evitare di creare microservizi in Python.
- Servizi di anteprima. Quando hai bisogno di ottenere rapidamente metadati o uno screenshot di un video senza usare la pesante e limitata API di YouTube.
- Archiviazione contenuti. Creare copie locali di video importanti per esigenze aziendali interne.
Vale la pena usarla
Il progetto sembra attivo: i test passano, i commit arrivano regolarmente (cosa critica per strumenti come questo dato che YouTube cambia costantemente il suo markup).
Come svantaggio: c'è attualmente un problema con la velocità di download. YouTube spesso limita le richieste a 100 kbps se sembrano sospette. L'autore ne è a conoscenza e lo ha nella lista delle cose da fare. Inoltre, non c'è ancora un merging integrato di video e audio tramite ffmpeg, quindi se hai bisogno del 4K (dove audio e video arrivano sempre separati), dovrai scrivere questa logica da solo.
Se hai bisogno di una soluzione PHP semplice e diretta senza overhead extra, youtube- down- loader è un ottimo candidato per il tuo composer.json.
Progetti correlati