10 commenti my script, php

Youtube mette a disposizione dei programmatori una vastissima gamma di feed grazie ai quali sarà possibile interfacciarsi con la piattaforma e leggere i dati presenti sfruttando le API di YouTube. 

 

La classe YoutubeApiReader che ho realizzato ci servirà per leggere i feed dai canali YouTube nel modo più agevole possibile. Ovviamente la classe potrebbe essere ulteriormente estesa (e perfezionata) così da adattarla alle nostre specifiche esigenze.

DOWNLOAD

 

Istanza della classe

Il costruttore della classe richiede come parametro obbligatorio il nome del canale (l'username utilizzato). Nell'esempio che segue ho impostato il canale ufficiale di google su YouTube:

require_once('lib/YoutubeApiReader.class.php');

/************************************************
ISTANZA DELLA CLASSE INDICANDO IL NOME DEL CANALE
************************************************/
$YT = New YoutubeApiReader('google');

 

Dopodichè avremo a disposizione due metodi (public):

  1. read_api_chanell(): che ci darà come return un oggetto con una serie proprietà in cui sono presenti i principali dati del nostro canale (ad esempio numero di iscritti, numero di visualizzazioni del canale, etc. etc.);
  2. read_api_video(): che ci darà come return un array di oggetti ognuno dei quali conterrà i dati che caratterizzano un singolo video da noi caricato (numero di visualizzazioni, durata, numero di commenti, etc. etc.).

 

Le informazioni sul canale 

Per ottenre i dati del canale Youtube (indicato nel costruttore) utilizzeremo il metodo read_api_chanell() il cui return sarà un oggetto con le segueti proprietà:

  • title: il titolo attribuito al canale;
  • thumbnail: l'URL dell'immagine avatar;
  • published: la data di iscrizione;
  • lastWebAccess: la data dell'ultimo accesso;
  • viewCount: numero di visualizzazioni del canale;
  • totalUploadViews: numero totale delle visualizzazioni dei video del canale;
  • uploadsCount: numero di video caricati;
  • subscriberCount: numero di iscritti al canale;
  • subscriptionsCount: numero di iscrizioni effettuate dal canale;
  • favouritesCount: numero di video che compongono i favoriti.

 

Avremo quindi:

/**************
READ CHANELL DATA
***************/
$chanell = $YT->read_api_chanell();

echo '<br />Title: '. $chanell->title;
echo '<br />Thumbnail: <img src="'. $chanell->thumbnail .'" />';
echo '<br />Published: '. $chanell->published;
echo '<br />Last web access: '. $chanell->lastWebAccess;
echo '<br />View Count: '. $chanell->viewCount;
echo '<br />Total Upload Views: '. $chanell->totalUploadViews;
echo '<br />Uploads Count: '. $chanell->uploadsCount;
echo '<br />Subscriber Count: '. $chanell->subscriberCount;
echo '<br />Subscriptions Count: '. $chanell->subscriptionsCount;
echo '<br />Favourites Count: '. $chanell->favouritesCount;

 

Se qualcuno desidera ottenere ulteriori info sul canale YouTube mi lasci un commento specificando la propria esigenza.

 

I video del canale

Per ottenere le informazioni sui singoli video caricati sul canale utilizzeremo il metodo read_api_video() il cui return sarà un array costituito di oggetti che contengono le seguenti proprietà:

  • author: l'username che ha caricato il video (in questo caso corrisponde con l'username impostato nel costruttore ma in caso di ulteriori implementazioni della classe ci tornerà utile);
  • id: codice alafanumerico che identifica un video;
  • watch: l'URL alla pagina YouTube per visualizzare il video;
  • title: titolo attirbuito al video; 
  • published: data di pubblicazione del video;
  • description: descrizione del video;
  • duration: durata in secondi del video;
  • thumbnail: un array contenente gli URL di 4 immagini di anteprima del video;
  • viewCount: numero di visualizzazioni del video;
  • commentsCount: numero di commenti del video.

Avremo altresì a disposizione il metodo get_embed() per ottenere l'embed per la visualizzazione del video. Tale metodo accetterà due parametri opzionali per fissare il width e l'height del video.

/************************
READ VIDEO CHANNELL DATA
************************/
foreach($YT->read_api_video() as $video){	
	echo '<br />Author: '. $video->author;
	echo '<br />ID video: '. $video->id;
	echo '<br />URL watch: <a href="'. $video->watch .'" target="_blank">' .$video->watch. '</a>';
	echo '<br />Title video: '. $video->title;
	echo '<br />Published: '. $video->published; 
	//SEE EXAMPLES FOR FORMATTING DATA
	echo '<br />Description: '. $video->description;
	echo '<br />Duration (seconds): ' .$video->duration;
	foreach($video->thumbnail as $thumbnail){
		echo '<br />Thumbnail: <img src="' .$thumbnail. '" />';
		}
	echo '<br />Wiev count: '. $video->viewCount;
	echo '<br />Comments count: '.$video->commentsCount;
	echo '<br />Embed: ' . $video->get_embed();
	echo '<hr />';
	}

 

Il metodo read_api_video() può essere utilizzato sfruttando i tre parametri opzionali:

  1. il primo di questi fissa il numero di video da voler estrarre il cui valore massimo è 50  (pari a  di 25 default);
  2. il secondo stabilisce la posizione a partire dalla quale desideriamo selezionare (di default pari a 1);
  3. il terzo parametro stabilisce l'ordine di estrazione e potrà assumere come valori "relevance", "published" (valore di default), "viewCount" o "rating" (basato sui mi piace/non mi piace ricevuti dal video); 'relevance' assume scarsa utilità in questo tipo di utilizzo delle API ma ci ritornerà utile in caso di ampliamenti della classe per effettuare ricerche.

 

Facciamo alcuni esempi:

// l'ultimo video pubblicato (solo 1)
print_r($YT->read_api_video(1));

// gli ultimi 5 video pubblicati
print_r($YT->read_api_video(5));

// il video più visto
print_r($YT->read_api_video(1,1,'viewCount'));

// i 5 video più visti
print_r($YT->read_api_video(5,1,'viewCount'));

// i 5 video più visti a partire dal terzo
print_r($YT->read_api_video(5,3,'viewCount'));

 

I primi due parametri utilizzati in combinato possono tornarci utili per realizzare l'impaginazione dei video. 

Per chi conosce la clausole LIMIT e ORDER BY di MySql il meccanismo è pressochè lo stesso.

 

Il formato delle date

Le date (presenti in published o lastWebAccess) sono formattate nel formato UTC e per essere convertite è possibile ricorrere a str_to_time() in combinato con date(). Ad esempio:

echo '<br />Formatted data: ' . date('j F Y', strtotime($chanell->lastWebAccess));
echo '<br />Last access (date difference): ' . ceil( (time() - strtotime($chanell->lastWebAccess)) / 86400 ) .' days ago';

 

Requisiti

E' richiesto php 5, e il parametro del php.ini allow_url_fopen abilitato.

 

La classe sfrutta l'estensione SimpleXML ed in particolare SimpleXMLElement.

 

Per ottenere il sorgente dell'XML viene impiegata file_get_contents()

Quest'ultima a seconda delle impostazioni e dei permessi del proprio server potrebbe essere disabilitata (su Altervista ad esempio) ma modificando la classe, ed in particolare il metodo load_file() in essa presente, si potrebbe utilizzate alternativamente fsockopen o cURL.

 

Conclusioni

Ho scoperto recentemente le API di YouTube e ne sono rimasto particolarmente colpito. Danno la possibilità di risalire a qualsiasi dato e manipolarli grazie ad una ampia serie di parametri (la presente classe ne utilizza solo qualcuno che ho ritenuto più utile); inoltre tali API permetto di eseguire ricerche all'interno del portale. 

Non sono semplicissime da leggere dato che utilizzano namespace particolari. 

 

Per qualsiasi dubbio o per problemi di implementazione non esistate a lasciarmi un commento e sarò lieto di potervi aiutare.

Olimpio Romanella

Sono un appassionato di Web Developing con un particolare debole per php. Mi dedico principalmente dello sviluppo back-end ed in particolare programmazione lato server con php, sviluppo di database relazionali MySql e progettazione di CMS di piccole e medie dimensioni.

Mi avvalgo del framework javascript Jquery, utilizzando molti dei suoi plugin e nei dei miei progetti utilizzo spesso il framework MVC Codeigniter.

10 Commenti presenti

avatar Alex

Alex

13 March 2020 ore 11:07

pure a me lo stesso problema: Impossible open api.

avatar Maurizio

Maurizio

21 May 2013 ore 00:11

avatar Alex

Alex

27 March 2013 ore 18:18

avatar oly1982

oly1982

27 March 2013 ore 09:49

avatar Alex

Alex

26 March 2013 ore 19:09

avatar Emanuele

Emanuele

19 September 2012 ore 23:18

avatar Andrea

Andrea

22 December 2011 ore 15:49

avatar Vincenzo

Vincenzo

25 August 2011 ore 11:47

avatar oly1982

oly1982

24 August 2011 ore 23:40

avatar Vincenzo

Vincenzo

24 August 2011 ore 22:51

Ciao scusami se ti disturbo, ma a me dopo un po di volte mi restituisce questo errore: <pre>Impossible open api. Come risolvo?