Nota:l'API YouTube Content ID è destinata ai partner per i contenuti di YouTube e non è accessibile a tutti gli sviluppatori o a tutti gli utenti di YouTube. Se l'API YouTube Content ID non rientra tra i servizi elencati nella console API di Google, visita il Centro assistenza YouTube per scoprire di più sul Programma partner di YouTube.
Questo tutorial passo passo spiega come creare uno script che si connetta a ContentOwnersService
e recuperi le informazioni su un determinato proprietario dei contenuti. Alla fine del tutorial è disponibile un esempio di codice completo. Sebbene questo codice sia scritto in Python, sono disponibili anche librerie client per altri linguaggi di programmazione comuni.
Requisiti
- Python 2.5 o versioni successive
- google-api-python-client
Creazione di uno script per inviare richieste API
I seguenti passaggi spiegano come creare uno script per inviare una richiesta API Content ID di YouTube.
Passaggio 1: crea lo script di base
Lo script riportato di seguito accetta i seguenti parametri della riga di comando e imposta valori per la variabile globale FLAGS
:
- Il parametro
content_owner_id
è obbligatorio e identifica il proprietario dei contenuti CMS per il quale stai recuperando le informazioni. - Il parametro
logging_level
specifica il livello di dettaglio del logging per lo script. - Il parametro
help
fa sì che lo script restituisca un elenco dei parametri che è in grado di comprendere.
#!/usr/bin/python2.6 # -*- coding: utf-8 -*- import gflags import logging import sys import os from datetime import * # Define flags. The gflags module makes it easy to define command-line params # for an application. Run this program with the '--help' argument to see all # of the flags that it understands. FLAGS = gflags.FLAGS gflags.DEFINE_string('content_owner_id', None, ('Required flag. ' 'Identifies the content owner whose details are printed out.')) gflags.MarkFlagAsRequired('content_owner_id') gflags.DEFINE_enum('logging_level', 'ERROR', ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], 'Set the level of logging detail.') def main(argv): # Let the gflags module process the command-line arguments try: argv = FLAGS(argv) except gflags.FlagsError, e: print '%s\nUsage: %s ARGS\n%s' % (e, argv[0], FLAGS) sys.exit(1) # Set the logging according to the command-line flag logging.getLogger().setLevel(getattr(logging, FLAGS.logging_level)) if __name__ == '__main__': main(sys.argv)
Passaggio 2: attiva l'autenticazione e l'autorizzazione degli utenti
In questo passaggio, incorporeremo l'autorizzazione OAuth 2.0 nello script. Ciò consente all'utente che esegue lo script di autorizzare lo script a eseguire richieste API attribuite all'account dell'utente.
Passaggio 2a: crea un file client_secrets.json
Per eseguire l'autenticazione, l'API Content ID di YouTube richiede un file client_secrets.json
contenente informazioni della console API. Devi inoltre registrare la tua richiesta. Per una spiegazione più completa del funzionamento dell'autenticazione, consulta la guida all'autenticazione.
{ "web": { "client_id": "INSERT CLIENT ID HERE", "client_secret": "INSERT CLIENT SECRET HERE", "redirect_uris": [], "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://accounts.google.com/o/oauth2/token" } }
Passaggio 2b: aggiungi il codice di autenticazione allo script
Per abilitare l'autenticazione e l'autorizzazione degli utenti, devi aggiungere le seguenti istruzioni import
:
from oauth2client.file import Storage from oauth2client.client import flow_from_clientsecrets from oauth2client.tools import run
Successivamente, creeremo un oggetto FLOW
utilizzando i client secret configurati nel passaggio 2a. Se l'utente autorizza la nostra applicazione a inviare richieste API per suo conto, le credenziali risultanti vengono memorizzate in un oggetto Storage
per utilizzarle in un secondo momento. L'utente dovrà autorizzare di nuovo la nostra applicazione se le credenziali scadono.
Aggiungi il seguente codice alla fine della funzione main
:
# Set up a Flow object to be used if we need to authenticate. FLOW = flow_from_clientsecrets('client_secrets.json', scope='https://www.googleapis.com/auth/youtubepartner', message='error message') # The Storage object stores the credentials. If it doesn't exist, or if # the credentials are invalid or expired, run through the native client flow. storage = Storage('yt_partner_api.dat') credentials = storage.get() if (credentials is None or credentials.invalid or credentials.token_expiry <= datetime.now()): credentials = run(FLOW, storage)
Passaggio 2c: crea l'oggetto httplib2
e collega le credenziali
Dopo che l'utente ha autorizzato il nostro script, creiamo un oggetto httplib2.Http
, che gestisce le richieste API, e alleghiamo le credenziali di autorizzazione a quell'oggetto.
Aggiungi la seguente istruzione di importazione:
import httplib2
Aggiungi questo codice alla fine della funzione main
:
# Create httplib2.Http object to handle HTTP requests and # attach auth credentials. http = httplib2.Http() http = credentials.authorize(http)
Passaggio 3: richiedi un servizio
La funzione build
della libreria client Python crea una risorsa che può interagire con un'API. Dopo che l'utente ha autorizzato la nostra applicazione, creiamo l'oggetto service
, che fornisce metodi per interagire con ContentOwnerService
.
Aggiungi la seguente istruzione di importazione:
from apiclient.discovery import build
Aggiungi questo codice alla fine della funzione main
:
service = build("youtubePartner", "v1", http=http, static_discovery=False) contentOwnersService = service.contentOwners()
Passaggio 4: esegui una richiesta API
Ora creeremo una richiesta di servizio ed eseguiamola. Il codice seguente crea ed esegue una richiesta contentOwnersService.get()
, che recupera le informazioni sul proprietario dei contenuti specificato.
Aggiungi questo codice alla fine della funzione main
:
# Create and execute get request. request = contentOwnersService.get(contentOwnerId=FLAGS.content_owner_id) content_owner_doc = request.execute(http) print ('Content owner details: id: %s, name: %s, ' 'notification email: %s') % ( content_owner_doc['id'], content_owner_doc['displayName'], content_owner_doc['disputeNotificationEmails'])
Completa la richiesta
Questa sezione mostra l'applicazione completa con alcune informazioni sulla licenza e commenti aggiuntivi nello script. Esistono due modi per eseguire il programma:
-
Questo comando avvia una finestra del browser attraverso la quale puoi autenticarti, se necessario, e autorizzare l'applicazione a inviare richieste API. Se autorizzi l'applicazione, le credenziali vengono inoltrate automaticamente allo script.
python yt_partner_api.py --content_owner_id=CONTENT_OWNER_ID.
Nota: puoi trovare il valore
CONTENT_OWNER_ID
per il tuo account nella pagina Impostazioni account del tuo account CMS. Il valore è indicato comePartner Code
nella sezione dei dati dell'account in quella pagina. -
Questo comando genera un URL che puoi aprire in un browser e ti chiede anche di inserire un codice di autorizzazione. Quando accedi all'URL, la pagina ti consente di autorizzare l'applicazione a inviare le richieste API per tuo conto. Se concedi l'autorizzazione, la pagina mostra il codice di autorizzazione che devi inserire alla richiesta di completare il flusso di autorizzazione.
python yt_partner_api.py --content_owner_id=CONTENT_OWNER_ID --noauth_local_webserver.
Nota: il
oauth2client
modulo riconosce il parametronoauth_local_webserver
anche se non è menzionato nello script.
client_secrets.json
{ "web": { "client_id": "INSERT CLIENT ID HERE", "client_secret": "INSERT CLIENT SECRET HERE", "redirect_uris": [], "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://accounts.google.com/o/oauth2/token" } }
yt_partner_api.py
#!/usr/bin/python2.6 # -*- coding: utf-8 -*- # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Simple command-line sample for YouTube Content ID API. Command-line application that retrieves the information about given content owner. Usage: $ python yt_partner_api.py --content_owner_id=[contentOwnerId] $ python yt_partner_api.py --content_owner_id=[contentOwnerId] --noauth_local_webserver You can also get help on all the command-line flags the program understands by running: $ python yt_partner_api.py --help To get detailed log output run: $ python yt_partner_api.py --logging_level=DEBUG \ --content_owner_id=[contentOwnerId] """ import gflags import httplib2 import logging import sys import os from datetime import * from apiclient.discovery import build from oauth2client.file import Storage from oauth2client.client import flow_from_clientsecrets from oauth2client.tools import run # Define flags. The gflags module makes it easy to define command-line options # for an application. Run this program with the '--help' argument to see all # of the flags that it understands. FLAGS = gflags.FLAGS gflags.DEFINE_string('content_owner_id', None, ('Required flag. ' 'Identifies the content owner id whose details are printed out.')) gflags.MarkFlagAsRequired('content_owner_id') gflags.DEFINE_enum('logging_level', 'ERROR', ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], 'Set the level of logging detail.') def main(argv): # Let the gflags module process the command-line arguments try: argv = FLAGS(argv) except gflags.FlagsError, e: print '%s\nUsage: %s ARGS\n%s' % (e, argv[0], FLAGS) sys.exit(1) # Set the logging according to the command-line flag logging.getLogger().setLevel(getattr(logging, FLAGS.logging_level)) # Set up a Flow object to be used if we need to authenticate. FLOW = flow_from_clientsecrets('client_secrets.json', scope='https://www.googleapis.com/auth/youtubepartner', message='error message') # The Storage object stores the credentials. If the credentials are invalid # or expired and the script isn't working, delete the file specified below # and run the script again. storage = Storage('yt_partner_api.dat') credentials = storage.get() if (credentials is None or credentials.invalid or credentials.token_expiry <= datetime.now()): credentials = run(FLOW, storage) http = httplib2.Http() http = credentials.authorize(http) service = build("youtubePartner", "v1", http=http) contentOwnersService = service.contentOwners() # Create and execute get request. request = contentOwnersService.get(contentOwnerId=FLAGS.content_owner_id) content_owner_doc = request.execute(http) print ('Content owner details: id: %s, name: %s, ' 'notification email: %s') % ( content_owner_doc['id'], content_owner_doc['displayName'], content_owner_doc['disputeNotificationEmails']) if __name__ == '__main__': main(sys.argv)