Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

YouTube API per Java, gestire video e dati degli utenti

Gestire i video e le informazioni dei profili degli utenti direttamente dalle nostre applicazioni
Gestire i video e le informazioni dei profili degli utenti direttamente dalle nostre applicazioni
Link copiato negli appunti

YouTube ci permette da sempre di includere i video sulle nostre pagine, ma le API di YouTube espandono il concetto di embedding dei contenuti e ci permettono di accedere e di riutilizzare le informazioni disponibili sul social network.

Grazie a questa libreria è possibile, ad esempio, accedere al profilo di un utente e visualizzare l'elenco dei suoi video preferiti, ricercare un video, commentarlo, votarlo oppure addirittura caricarne uno nuovo.

Troviamo le Data API su Google Code, disponibili per diverse piattaforme: Java, .NET, PHP e Python. Naturalmente in questo articolo esaminiamo le tecniche principali per Java, utilizzando alcuni snippet di codice.

Prima di utilizzare le API, dobbiamo richiedere un account Google, se non ne abbiamo già uno. Grazie al nostro account possiamo ottenere una developer key. Una volta inserito un nome (name) e un indirizzo internet di riferimento (website) sarà generata la chiave che useremo per comunicare con il servizio, come vedremo negli esempi.

Finalmente possiamo a scaricare l'ultima versione della libreria (attualmente la 1.40.3), comprensiva di documentazione ed esempi d'uso.

Adesso abbiamo tutto il necessario, iniziamo con qualche esempio pratico, preso dalla sezione Getting Started di Google Code. Per accedere alle informazioni, ci si può servire dei canali di servizio, detti FEED. Alcuni di questi feed sono protetti e richiedono l'autenticazione al servizio.

L'Autenticazione

Per la connessione al servizio è necessario creare un'istanza della classe com.google.gdata.client.youtube.YouTubeService. Il costruttore di tale classe riceve in ingresso le nostre credenziali di sviluppatori: il CLIENT_ID ed il DEVELOPER_KEY.

YouTubeService service = new YouTubeService(CLIENT_ID, DEVELOPER_KEY);

Nota: il CLIENT_ID corrisponde all'identificativo (name) che abbiamo utilizzato per generare la chiave.

Per effettuare l'autenticazione è necessario impostare il nome utente (o l'indirizzo e-mail) e la password. Per avviare l'autenticazione occorre invocare il metodo setUserCredentials(username, password). Questo metodo potrebbe sollevare l'eccezione GoogleService$InvalidCredentialsException, qualora le credenziali di accesso non fossero corrette.

try
{
  service.setUserCredentials(USERNAME, PASSWORD);
}
catch (AuthenticationException e)
{
  System.out.println("Impossibile eseguire l'autenticazione al sistema. Le credenziali non sono valide");
  e.printStackTrace();
}

Accedere al profilo di un utente

Per ad un profilo utente, abbiamo a disposizione il feed users.

http://gdata.youtube.com/feeds/api/users/username

L'ultima parte dell'URL, username, va sostituito con il nome dell'utente del quale si vuole richiedere il profilo. Sostituendo l'username con la parola default, si accede al profilo dell'utente autenticato.

Effettuare le richieste

Per inviare le richiesta è sufficiente lanciare il metodo getEntry() della classe YouTubeService che abbiamo creato precedentemente. Il metodo riceve in ingresso due parametri:

  • l'URL della richiesta (feed)
  • la classe che verrà restituita

Se chiediamo informazioni relative al profilo, ad esempio, la libreria ci restituirà un'istanza della classe UserProfileEntry. Questa classe ha tutti i metodi necessari per accedere agli attributi dell'utente, come ad esempio nome, username, età, etc.

È possibile accedere alle statistiche dell'utente con il metodo getStatistics() che restituisce un oggetto di tipo YtUserProfileStatistics.

String profileUrl = "http://gdata.youtube.com/feeds/api/users/default";
UserProfileEntry profileEntry = null;
try
{
	profileEntry = service.getEntry(new URL(profileUrl), UserProfileEntry.class);
}
catch (MalformedURLException e) {	e.printStackTrace(); }
catch (IOException e) { e.printStackTrace(); }
catch (ServiceException e) { e.printStackTrace(); }
if (null != profileEntry)
{
	System.out.println("Username    : " + profileEntry.getUsername());
	System.out.println("Età         : " + profileEntry.getAge());
	System.out.println("Sesso       : " + profileEntry.getGender());
	System.out.println("Single      : " + profileEntry.getRelationship());
	System.out.println("Hobby       : " + profileEntry.getHobbies());
	System.out.println("Professione : " + profileEntry.getOccupation());
	System.out.println("Scuola      : " + profileEntry.getSchool());
	YtUserProfileStatistics stats = profileEntry.getStatistics();
	if(stats != null)
	{
		System.out.println("Numero di sottoscrizioni : " + stats.getSubscriberCount());
		System.out.println("Data ultimo accesso      : " + stats.getLastWebAccess().toUiString());
	}
}

Aggiornare il profilo utente

È possibile anche aggiornare i dati nel profilo dell'utente. Oltre ad i metodi 'get', infatti, sono disponibili anche i metodi 'set'. Dopo aver valorizzato l'oggetto è sufficiente invocare il metodo update() per rendere persistente la modifica.

profileEntry.setHobbies("Calcio");
try
{
	profileEntry.update();
	System.out.println("Profilo aggiornato");
}
catch (IOException e) { e.printStackTrace(); }
catch (ServiceException e) { e.printStackTrace(); }

Accedere alle informazioni dei video

Ciascun video pubblicato da YouTube, è contraddistinto da una chiave univoca mediante la quale è possibile accedere alle sue informazioni. L'URL da richiamare è:

http://gdata.youtube.com/feeds/api/videos/VIDEOID

Naturalmente, al posto di VIDEOID va inserita la chiave che identifica univocamente il video. In questo caso, la libreria ci restituirà un'istanza della classe VideoEntry.

String videoEntryUrl = "http://gdata.youtube.com/feeds/api/videos/cJXqFGYenRY";
VideoEntry videoEntry = null;
try
{
	videoEntry = service.getEntry(new URL(videoEntryUrl), VideoEntry.class);
}
catch (MalformedURLException e) { e.printStackTrace(); }
catch (IOException e) { e.printStackTrace(); }
catch (ServiceException e) { e.printStackTrace(); }

L'oggetto che otteniamo contiene tutti i metodi che permetto di accedere alle informazioni del video, come il titolo e la data di pubblicazione.

Anche in questo caso è possibile accedere alle statistiche del video (numero di sottoscrizioni, numero di visualizzazioni).

if (null != videoEntry)
{
	System.out.println("Titolo             : " + videoEntry.getTitle().getPlainText());
	System.out.println("Data pubblicazione : " + videoEntry.getPublished().toUiString());
	YtStatistics stats = videoEntry.getStatistics();
	if(stats != null)
	{
		System.out.println("Numero di sottoscrizioni  : " + stats.getFavoriteCount());
		System.out.println("Numero di visualizzazioni : " + stats.getViewCount());
	}
}

I video più visualizzati

Come ultimo esempio vediamo come ottenere l'elenco dei video più visualizzati in generale. Il feed corrispondente è

http://gdata.youtube.com/feeds/api/standardfeeds/most_viewed

L'oggetto restituito dalla libreria, in questo caso, è VideoFeed che contiene una collezione di oggetti VideoEntry. È possibile ottenere un iterator semplicemente invocando il metodo getEntries().iterator().

String feedUrl = "http://gdata.youtube.com/feeds/api/standardfeeds/most_viewed";
VideoFeed videoFeed = null;
try
{
	videoFeed = service.getFeed(new URL(feedUrl), VideoFeed.class);
}
catch (MalformedURLException e) {	e.printStackTrace(); }
catch (IOException e) {	e.printStackTrace(); }
catch (ServiceException e) { e.printStackTrace(); }	
if (null != videoFeed)
{
	System.out.println("Video trovati: " + videoFeed.getEntries().size());
	Iterator it = videoFeed.getEntries().iterator();
	while (it.hasNext())
	{
		VideoEntry videoEntry = (VideoEntry) it.next();
		System.out.println("Titolo             : " + videoEntry.getTitle().getPlainText());
		System.out.println("Data pubblicazione : " + videoEntry.getPublished().toUiString());
		YtStatistics stats = videoEntry.getStatistics();
		if(stats != null)
		{
			System.out.println("Numero di sottoscrizioni  : " + stats.getFavoriteCount());
			System.out.println("Numero di visualizzazioni : " + stats.getViewCount());
		}
	}
}

Altri feed utili

Ecco un breve elenco di feed tra i più interessanti tra gli standardfeeds:

Tipologia di video Feed Identifier
Più visualizzati most_viewed
Più votati top_rated
Visibili dal cellulare watch_on_mobile
Più commentati most_discussed
Più presenti nella lista dei favoriti top_favorites
Più recenti most_recent

li richiamiamo sostiduendo il feed identifier nell'ultima parte dell'indirizzo:

http://gdata.youtube.com/feeds/api/standardfeeds/FEED_IDENTIFIER

Ti consigliamo anche