Panoramica dell'API YouTube Data

Introduzione

Questo documento è destinato agli sviluppatori che intendono scrivere applicazioni che interagiscano con YouTube. Illustra i concetti basilari di YouTube e dell'API stessa. Offre inoltre una panoramica delle diverse funzioni supportate dall'API.

Prima di iniziare

  1. Per accedere alla Console delle API di Google, richiedere una chiave API e registrare l'applicazione è necessario avere un Account Google.

  2. Crea un progetto in Google Developers Console e ottieni le credenziali di autorizzazione in modo che la tua applicazione possa inviare richieste API.

  3. Dopo aver creato il progetto, assicurati che l'API YouTube Data sia uno dei servizi registrati dalla tua applicazione:

    1. Vai alla Console API e seleziona il progetto che hai appena registrato.
    2. Visita la pagina relativa alle API abilitate. Nell'elenco delle API, assicurati che lo stato sia ON per la API YouTube Data v3.

  4. Se la tua applicazione utilizzerà metodi dell'API che richiedono l'autorizzazione utente, leggi la guida per l'autenticazione per imparare a implementare l'autorizzazione OAuth 2.0.

  5. Seleziona una libreria client per semplificare l'implementazione dell'API.

  6. Acquisisci familiarità con i concetti fondamentali del formato dati JSON (JavaScript Object Notation). JSON è un formato dati comune indipendente dal linguaggio che fornisce una semplice rappresentazione testuale delle strutture di dati arbitrari. Per ulteriori informazioni, visita il sito json.org.

Risorse e tipi di risorse

Una risorsa è una singola entità dati con un identificatore univoco. La tabella seguente descrive i diversi tipi di risorse con cui puoi interagire utilizzando l'API.

Risorse
activity Contiene informazioni su un'azione intrapresa da un determinato utente sul sito di YouTube. Le azioni degli utenti indicate nei feed delle attività includono la valutazione di un video, la condivisione di un video, il contrassegno di un video come preferito e la pubblicazione di un bollettino sul canale.
channel Contiene informazioni su un singolo canale YouTube.
channelBanner Identifica l'URL da utilizzare per impostare un'immagine appena caricata come banner per un canale.
channelSection Contiene informazioni su una serie di video che un canale ha scelto di mostrare. Ad esempio, una sezione può presentare gli ultimi caricamenti, i caricamenti più popolari o i video di una o più playlist del canale.
guideCategory Identifica una categoria che YouTube associa ai canali in base ai relativi contenuti o ad altri indicatori, come la popolarità. Le categorie guida cercano di organizzare i canali in modo da consentire agli utenti di YouTube di trovare più facilmente i contenuti che cercano. Anche se i canali potrebbero essere associati a una o più categorie guida, non ne è garantito che facciano parte di questa categoria.
i18nLanguage Identifica una lingua dell'applicazione supportata dal sito web di YouTube. La lingua dell'applicazione può anche essere definita lingua dell'interfaccia utente.
i18nRegion Identifica una regione che un utente di YouTube può selezionare come regione di contenuti preferita. L'area geografica dei contenuti può anche essere definita come lingua dei contenuti.
playlist Rappresenta una singola playlist di YouTube. Una playlist è una raccolta di video che può essere visualizzata in sequenza e condivisa con altri utenti.
playlistItem Identifica una risorsa, ad esempio un video, che fa parte di una playlist. La risorsa playlistItem contiene inoltre dettagli che spiegano in che modo la risorsa inclusa viene utilizzata nella playlist.
search result Contiene informazioni su un video, un canale o una playlist di YouTube che corrispondono ai parametri di ricerca specificati in una richiesta API. Anche se un risultato di ricerca rimanda a una risorsa identificabile in modo univoco, ad esempio un video, non dispone di dati permanenti.
subscription Contiene informazioni sull'iscrizione di un utente di YouTube. Le iscrizioni vengono avvisate quando un nuovo utente viene aggiunto a un canale o quando un altro utente intraprende una delle varie azioni su YouTube, ad esempio carica un video, valuta un video o commenta un video.
thumbnail Identifica le immagini in miniatura associate a una risorsa.
video Rappresenta un singolo video di YouTube.
videoCategory Identifica una categoria che è stata o potrebbe essere associata ai video caricati.
watermark Identifica un'immagine visualizzata durante la riproduzione dei video di un canale specificato. Inoltre, il proprietario può specificare un canale di destinazione a cui rimanda l'immagine, nonché i dettagli sulla tempistica che stabiliscono quando la filigrana viene visualizzata durante le riproduzioni dei video e il periodo di tempo in cui è visibile.

Tieni presente che, in molti casi, una risorsa contiene riferimenti ad altre risorse. Ad esempio, la proprietà snippet.resourceId.videoId di una risorsa playlistItem identifica una risorsa video che, a sua volta, contiene informazioni complete sul video. Come ulteriore esempio, un risultato di ricerca contiene una proprietà videoId, playlistId o channelId che identifica una determinata risorsa video, playlist o canale.

Operazioni supportate

La tabella seguente mostra i metodi più comuni supportati dall'API. Alcune risorse supportano anche altri metodi che svolgono funzioni più specifiche. Ad esempio, il metodo videos.rate associa una valutazione dell'utente a un video, mentre il metodo thumbnails.set carica una miniatura del video su YouTube e la associa a un video.

Suite operativa
list Recupera (GET) un elenco di zero o più risorse.
insert Crea (POST) una nuova risorsa.
update Modifica (PUT) una risorsa esistente per riflettere i dati nella richiesta.
delete Rimuove (DELETE) una risorsa specifica.

L'API attualmente supporta i metodi per elencare ciascuno dei tipi di risorse supportati e supporta le operazioni di scrittura per molte risorse.

La tabella seguente identifica le operazioni supportate per diversi tipi di risorse. Le operazioni che inseriscono, aggiornano o eliminano le risorse richiedono sempre l'autorizzazione dell'utente. In alcuni casi, i metodi list supportano sia le richieste autorizzate sia quelle non autorizzate, in cui le richieste non autorizzate recuperano solo i dati pubblici, mentre le richieste autorizzate possono recuperare informazioni sull'utente attualmente autenticato.

Operazioni supportate
list insert update delete
activity
caption
channel
channelBanner
channelSection
comment
commentThread
guideCategory
i18nLanguage
i18nRegion
playlist
playlistItem
search result
subscription
thumbnail
video
videoCategory
watermark

Utilizzo quota

YouTube Data API utilizza una quota per garantire che gli sviluppatori utilizzino il servizio come previsto e non creino applicazioni che riducono ingiustamente la qualità del servizio o ne limitano l'accesso ad altri. Per tutte le richieste API, incluse quelle non valide, è previsto un costo relativo alla quota di almeno un punto. Puoi trovare la quota disponibile per la tua applicazione in API Console.

I progetti che abilitano l'API YouTube Data hanno un'allocazione della quota predefinita di 10.000 unità al giorno, una quantità sufficiente per la stragrande maggioranza degli utenti dell'API. La quota predefinita, che è soggetta a modifiche, ci aiuta a ottimizzare le allocazioni delle quote e a scalare la nostra infrastruttura in modo più significativo per i nostri utenti API. Puoi visualizzare l'utilizzo delle quote nella pagina Quote della console API.

Nota: se raggiungi il limite di quota, puoi richiedere una quota aggiuntiva compilando il modulo di richiesta di estensione di quota per i Servizi API di YouTube.

Calcolo dell'utilizzo della quota

Google calcola l'utilizzo della quota assegnando un costo a ogni richiesta. Tipi di operazioni diversi hanno costi di quota diversi. Ad esempio:

  • Un'operazione di lettura che recupera un elenco di risorse (canali, video, playlist) costa in genere 1 unità.
  • Un'operazione di scrittura che crea, aggiorna o elimina una risorsa di solito costa 50 unità.
  • Una richiesta di ricerca costa 100 unità.
  • Il caricamento di un video costa 1600 unità.

La tabella Costi delle quote per richieste API mostra il costo della quota di ogni metodo API. Tenendo presenti queste regole, puoi stimare il numero di richieste che la tua applicazione potrebbe inviare ogni giorno senza superare la quota.

Risorse parziali

L'API consente, e in realtà richiede, il recupero di risorse parziali in modo che le applicazioni non trasferiscano, analizzino e archivino dati non necessari. Questo approccio garantisce inoltre che l'API utilizzi le risorse di rete, CPU e di memoria in modo più efficiente.

L'API supporta due parametri di richiesta, illustrati nelle sezioni seguenti, che consentono di identificare le proprietà della risorsa da includere nelle risposte dell'API.

  • Il parametro part identifica i gruppi di proprietà che devono essere restituiti per una risorsa.
  • Il parametro fields filtra la risposta API in modo che restituisca solo proprietà specifiche all'interno delle parti della risorsa richieste.

Come utilizzare il parametro part

Il parametro part è un parametro obbligatorio per qualsiasi richiesta API che recupera o restituisce una risorsa. Il parametro identifica una o più proprietà delle risorse di primo livello (non nidificate) che devono essere incluse in una risposta API. Ad esempio, una risorsa video ha le seguenti parti:

  • snippet
  • contentDetails
  • fileDetails
  • player
  • processingDetails
  • recordingDetails
  • statistics
  • status
  • suggestions
  • topicDetails

Tutte queste parti sono oggetti che contengono proprietà nidificate e puoi considerarli come gruppi di campi di metadati che il server API potrebbe (o non dovrebbe) recuperare. Pertanto, il parametro part richiede la selezione dei componenti di risorse effettivamente utilizzati dalla tua applicazione. Questo requisito ha due scopi principali:

  • Riduce la latenza impedendo al server API di perdere tempo per recuperare i campi di metadati che la tua applicazione non utilizza.
  • Riduce l'utilizzo della larghezza di banda riducendo (o eliminando) la quantità di dati non necessari che la tua applicazione potrebbe recuperare.

Nel tempo, man mano che le risorse aggiungono altre parti, questi vantaggi aumenteranno solo perché la tua applicazione non richiederà proprietà appena introdotte che non supportano.

Come utilizzare il parametro fields

Il parametro fields filtra la risposta API, che contiene solo le parti della risorsa identificate nel valore parametro part, in modo che la risposta includa solo un insieme specifico di campi. Il parametro fields consente di rimuovere le proprietà nidificate da una risposta API, riducendo così l'utilizzo della larghezza di banda. Il parametro part non può essere utilizzato per filtrare le proprietà nidificate da una risposta.

Le seguenti regole spiegano la sintassi supportata per il valore parametro fields, che si basa su una sintassi di XPath:

  • Utilizza un elenco separato da virgole (fields=a,b) per selezionare più campi.
  • Utilizza un asterisco (fields=*) come carattere jolly per identificare tutti i campi.
  • Utilizza le parentesi (fields=a(b,c)) per specificare un gruppo di proprietà nidificate che verranno incluse nella risposta API.
  • Utilizza una barra (fields=a/b) per identificare una proprietà nidificata.

In pratica, queste regole consentono spesso diversi valori parametro fields per recuperare la stessa risposta API. Ad esempio, se vuoi recuperare l'ID, il titolo e la posizione di ogni elemento della playlist, puoi utilizzare uno dei seguenti valori:

  • fields=items/id,playlistItems/snippet/title,playlistItems/snippet/position
  • fields=items(id,snippet/title,snippet/position)
  • fields=items(id,snippet(title,position))

Nota: come per tutti i valori dei parametri di ricerca, il valore del parametro fields deve essere codificato tramite URL. Per una migliore leggibilità, gli esempi in questo documento omettono la codifica.

Richieste parziali di esempio

I seguenti esempi mostrano come utilizzare i parametri part e fields per assicurare che le risposte dell'API includano solo i dati utilizzati dall'applicazione.

  1. L'esempio 1 restituisce una risorsa video che include quattro parti e le proprietà kind e etag.
  2. L'esempio 2 restituisce una risorsa video che include due parti e le proprietà kind e etag.
  3. L'esempio 3 restituisce una risorsa video che include due parti ma esclude le proprietà kind e etag.
  4. L'esempio 4 restituisce una risorsa video che include due parti ma esclude kind e etag, nonché alcune proprietà nidificate nell'oggetto snippet della risorsa.
Esempio 1
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
&part=snippet,contentDetails,statistics,status
Description: This example retrieves a video resource and identifies several resource parts that should be included in the API response. API response:
{ "kind": "youtube#videoListResponse", "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/sDAlsG9NGKfr6v5AlPZKSEZdtqA\"", "videos": [ { "id": "7lCDEYXw3mM", "kind": "youtube#video", "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/iYynQR8AtacsFUwWmrVaw4Smb_Q\"", "snippet": { "publishedAt": "2012-06-20T22:45:24.000Z", "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw", "title": "Google I/O 101: Q&A On Using Google APIs", "description": "Antonio Fuentes speaks to us and takes questions on working with Google APIs and OAuth 2.0.", "thumbnails": { "default": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/default.jpg" }, "medium": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/mqdefault.jpg" }, "high": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/hqdefault.jpg" } }, "categoryId": "28" }, "contentDetails": { "duration": "PT15M51S", "aspectRatio": "RATIO_16_9" }, "statistics": { "viewCount": "3057", "likeCount": "25", "dislikeCount": "0", "favoriteCount": "17", "commentCount": "12" }, "status": { "uploadStatus": "STATUS_PROCESSED", "privacyStatus": "PRIVACY_PUBLIC" } } ] }
Esempio 2
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
&part=snippet,statistics
Description: This example modifies the part parameter value so that the contentDetails and status properties are not included in the response. API response:
{ "kind": "youtube#videoListResponse", "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/sDAlsG9NGKfr6v5AlPZKSEZdtqA\"", "videos": [ { "id": "7lCDEYXw3mM", "kind": "youtube#video", "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/iYynQR8AtacsFUwWmrVaw4Smb_Q\"", "snippet": { "publishedAt": "2012-06-20T22:45:24.000Z", "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw", "title": "Google I/O 101: Q&A On Using Google APIs", "description": "Antonio Fuentes speaks to us and takes questions on working with Google APIs and OAuth 2.0.", "thumbnails": { "default": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/default.jpg" }, "medium": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/mqdefault.jpg" }, "high": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/hqdefault.jpg" } }, "categoryId": "28" }, "statistics": { "viewCount": "3057", "likeCount": "25", "dislikeCount": "0", "favoriteCount": "17", "commentCount": "12" } } ] }
Esempio 3
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
&part=snippet,statistics&fields=items(id,snippet,statistics)
Description: This example adds the fields parameter to remove all kind and etag properties from the API response. API response:
{ "videos": [ { "id": "7lCDEYXw3mM", "snippet": { "publishedAt": "2012-06-20T22:45:24.000Z", "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw", "title": "Google I/O 101: Q&A On Using Google APIs", "description": "Antonio Fuentes speaks to us and takes questions on working with Google APIs and OAuth 2.0.", "thumbnails": { "default": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/default.jpg" }, "medium": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/mqdefault.jpg" }, "high": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/hqdefault.jpg" } }, "categoryId": "28" }, "statistics": { "viewCount": "3057", "likeCount": "25", "dislikeCount": "0", "favoriteCount": "17", "commentCount": "12" } } ] }
Esempio 4
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
&fields=items(id,snippet(channelId,title,categoryId),statistics)&part=snippet,statistics
Description: This example modifies the fields parameter from example 3 so that in the API response, each video resource's snippet object only includes the channelId, title, and categoryId properties. API response:
{ "videos": [ { "id": "7lCDEYXw3mM", "snippet": { "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw", "title": "Google I/O 101: Q&A On Using Google APIs", "categoryId": "28" }, "statistics": { "viewCount": "3057", "likeCount": "25", "dislikeCount": "0", "favoriteCount": "17", "commentCount": "12" } } ] }

Ottimizzazione delle prestazioni

Utilizzo di ETag

ETags, una parte standard del protocollo HTTP, consente alle applicazioni di fare riferimento a una versione specifica di una determinata risorsa dell'API. La risorsa potrebbe essere un intero feed o un elemento del feed. Questa funzionalità supporta i seguenti casi d'uso:

  • Memorizzazione nella cache e recupero condizionale: l'applicazione può memorizzare nella cache le risorse dell'API e i relativi ETag. Quando l'applicazione richiede di nuovo una risorsa archiviata, specifica l'ETag associato a quella risorsa. Se la risorsa è stata modificata, l'API restituisce la risorsa modificata e l'ETag associato a tale versione. Se la risorsa non è stata modificata, l'API restituisce una risposta HTTP 304 (Not Modified), a indicare che la risorsa non è stata modificata. La tua applicazione può ridurre la latenza e l'utilizzo della larghezza di banda offrendo le risorse memorizzate nella cache in questo modo.

    Il supporto di ETag delle librerie client è diverso per le API di Google. Ad esempio, la libreria client JavaScript supporta i tag ETag tramite una whitelist di intestazioni delle richieste consentite che include If-Match e If-None-Match. La lista consentita consente la memorizzazione nella cache normale del browser in modo che, se l'ETag di una risorsa non è cambiato, possa essere pubblicata dalla cache del browser. Il client Obj-C, invece, non supporta i tag ETag.

  • Protezione contro modifiche involontarie delle modifiche: i tag ETag contribuiscono a garantire che più client API non sovrascrivano inavvertitamente le modifiche degli altri. Quando si aggiorna o si elimina una risorsa, l'applicazione può specificare il tag ETag della risorsa. Se l'ETag non corrisponde alla versione più recente della risorsa, la richiesta API non andrà a buon fine.

L'utilizzo di ETag nella tua applicazione offre diversi vantaggi:

  • L'API risponde più rapidamente alle richieste di risorse memorizzate nella cache ma invariate, con conseguente minore latenza e un minore utilizzo della larghezza di banda.
  • L'applicazione non sovrascriverà inavvertitamente le modifiche a una risorsa effettuate da un altro client API.

Google APIs Client Library for JavaScript supporta le intestazioni di richiesta HTTP If-Match e If-None-Match, consentendo così agli ETag di funzionare nel contesto della normale memorizzazione nella cache del browser.

Utilizzare gzip

Puoi anche ridurre la larghezza di banda necessaria per ogni risposta dell'API abilitando la compressione gzip. Anche se la tua applicazione avrà bisogno di più tempo di CPU per decomprimere le risposte dell'API, il vantaggio di consumare meno risorse di rete di solito supera il costo.

Per ricevere una risposta con codifica gzip devi svolgere due operazioni:

  • Imposta l'intestazione della richiesta HTTP Accept-Encoding su gzip.
  • Modifica il tuo user agent per contenere la stringa gzip.

Le intestazioni HTTP di esempio riportate di seguito mostrano i seguenti requisiti per abilitare la compressione gzip:

Accept-Encoding: gzip
User-Agent: my program (gzip)