Possiamo visualizzare i nostri video o i video degli altri utenti di YouTube semplicemente accedendo al feed RSS di ciascun utente. Con PHP possiamo estrarre da questo feed l'URL con cui andremo a costruire l'URL finale di un tradizionale elemento iframe
. Vediamo come.
L'URL di ciascun feed utente è il seguente:
http://gdata.youtube.com/feeds/base/users/nomeutente/uploads?alt=rss&v=2&orderby=published&client=ytapi-youtube-profile
All'interno di questo feed abbiamo tanti elementi item
contenuti nel wrapper globale channel
che rappresentano i nostri video. Tali elementi contengono ciascuno un elemento link
con l'URL alla pagina del video:
http://www.youtube.com/watch?v=OnoUrrue3lE&feature=youtube_gdata
Ma, come saprete, l'URL degli iframe è diverso:
http://www.youtube.com/embed/OnoUrrue3lE?rel=0
Quello che li accomuna è l'ID del video, che nel nostro caso è la stringa OnoUrrue3lE
. Tutto quello che dobbiamo fare è trasformare il primo URL nel secondo. Definiamo la seguente funzione PHP:
function fetchYouTubeVideos($username='gabrieleromanato', $limit=3)
{
$feedURL = 'http://gdata.youtube.com/feeds/base/users/' . $username . '/uploads?alt=rss&v=2&orderby=published&client=ytapi-youtube-profile';
$html = '<div id="youtube">' . "\n";
if(file_get_contents($feedURL)) {
$feed = simplexml_load_file($feedURL);
$items = $feed->channel->item;
$index = -1;
$length = $limit - 1;
do {
$index++;
$html .= '<div class="video">' . "\n";
$link = $items[$index]->link;
$iframeLink = str_replace('watch?v=', 'embed/', $link);
$iframeLink = preg_replace('/&.+/', '', $iframeLink);
$html .= '<iframe src="' . $iframeLink . '?rel=0" width="560" height="315" frameborder="0" allowfullscreen></iframe>';
$html .= '</div>' . "\n";
}while($index < $length);
$html .= '</div>';
return $html;
} else {
$html .= '<p>Errore nel caricamento.</p>' . "\n";
$html .= '</div>';
return $html;
}
}
La parte interessante della funzione è la manipolazione della stringa dell'URL tramite le funzioni str_replace()
e preg_replace()
. Volendo ottimizzare la performance, potete evitare le espressioni regolari e usare solo le funzioni per le stringhe.
La gestione degli errori è rudimentale. Per una migliore gestione delle eccezioni nel parsing XML vi consiglio di usare le funzioni apposite fornite da PHP per XML.