In questo snippet vediamo come ottenere l’ID di un video YouTube, che ci potrà servire per creare un embed, per storarlo in un database, o semplicemente per verificare che l’URL YouTube inserito da un utente sia valido. Lo faremo in PHP, utilizzando due funzioni semplici, evitando così le espressioni regolari, che potrebbero creare problemi e che, come sappiamo, hanno un grado di complessità abbastanza elevato.
Partiamo dalla struttura di un semplice URL:
https://www.youtube.com/watch?v=f4Mc-NYPHaQ
Passando questo indirizzo (come stringa) alle funzioni parse_url() e poi a parse_str(), taglieremo dapprima la parte di stringa che contiene il dominio vero e proprio e otterremo soltanto la parte dei parametri, dalla quale successivamente leggeremo l’ID.
parse_url accetta come parametro una stringa e restituisce un array associativo con i seguenti indici:
- scheme – ad esempio http
- host
- port
- user
- pass
- path
- query – cioè tutto quello dopo il simbolo “?”
- fragment – tuto quello che viene dopo il cancelletto (#)
Volendo, però, possiamo passare a parse_url() un secondo valore, che dice all’interprete direttamente quale indice tra questi ottenere. In tal caso, otterremo una stringa. A noi, chiaramente interessa la parte dopo il simbolo “?” nella quale c’è l’ID del video. La utilizzeremo, perciò, così:
$query = parse_url( "https://www.youtube.com/watch?v=f4Mc-NYPHaQ", PHP_URL_QUERY );
Adesso che abbiamo isolato la query, che è v=f4Mc-NYPHaQ , vogliamo ottenere la parte dopo il “v=”.
Per farlo, utilizzeremo la funzione parse_str(), che funziona analogamente a $_GET.. ma su una stringa. Accetta, quindi, una stringa con dei valori url encoded e ne crea un array associativo, in questo modo:
parse_str($query, $dati); $id_youtube=$dati['v']; echo $id_youtube; // f4Mc-NYPHaQ
Ed ecco che “v=valore” diventa $dati[‘v’] che contiene “valore”. Mettendo tutto assieme otteniamo:
<?php $url = "https://www.youtube.com/watch?v=f4Mc-NYPHaQ"; parse_str( parse_url( $url, PHP_URL_QUERY ), $dati ); echo $dati['v']; // f4Mc-NYPHaQ ?>