Invio di una prima richiesta

Nota:l'API YouTube Data è destinata all'uso da parte dei partner di contenuti di YouTube e non è accessibile a tutti gli sviluppatori o a tutti gli utenti di YouTube. L'accesso richiede un account YouTube Content Manager. Se hai un account YouTube Content Manager, ma non vedi l'API YouTube Data tra i servizi elencati nella console Google Cloud, contatta il tuo partner manager o l'assistenza partner.

Questo tutorial passo passo spiega come creare uno script che si connette a ContentOwnersService e recupera informazioni su un determinato proprietario dei contenuti. Alla fine del tutorial viene fornito un esempio di codice completo. Sebbene questo codice sia scritto in Python, sono disponibili anche librerie client per altri linguaggi di programmazione popolari.

Requisiti

Creazione di uno script per inviare richieste API

I seguenti passaggi spiegano come creare uno script per inviare una richiesta all'API YouTube Data:

Passaggio 1: crea lo script di base

Lo script seguente accetta i seguenti argomenti della riga di comando:

  • Il parametro content_owner_id è obbligatorio e identifica il proprietario dei contenuti CMS di cui 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 riconosce.
#!/usr/bin/env python3

import argparse
import logging
import sys

# Define command-line arguments using argparse. Run this program with
# the '--help' argument to see all parameters that it understands.
parser = argparse.ArgumentParser(
    description='Simple command-line sample for YouTube Data API.')
parser.add_argument(
    '--content_owner_id',
    required=True,
    help='Required. Identifies the content owner whose details are printed out.')
parser.add_argument(
    '--logging_level',
    default='ERROR',
    choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'],
    help='Set the level of logging detail.')


def main():
  args = parser.parse_args()

  # Set the logging according to the command-line flag
  logging.getLogger().setLevel(getattr(logging, args.logging_level))

if __name__ == '__main__':
  main()

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

L'API YouTube Data richiede un file client_secrets.json, che contiene informazioni della console Cloud, per eseguire l'autenticazione. Devi anche registrare la tua applicazione. 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 datetime import datetime
from oauth2client.file import Storage
from oauth2client.client import flow_from_clientsecrets
from oauth2client.tools import argparser, run_flow

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 archiviate in un oggetto Storage per un utilizzo successivo. Se le credenziali scadono, l'utente dovrà autorizzare nuovamente la nostra applicazione.

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(FLOW, storage, args)

Passaggio 2c: crea l'oggetto httplib2 e allega le credenziali

Dopo che l'utente autorizza il nostro script, creiamo un oggetto httplib2.Http, che gestisce le richieste API, e colleghiamo le credenziali di autorizzazione a questo 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: ottieni 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 e la eseguiremo. Il seguente codice crea ed esegue una richiesta contentOwnersService.get(), che recupera informazioni sul proprietario dei contenuti specificato.

Aggiungi questo codice alla fine della funzione main:

  # Create and execute get request.
  request = contentOwnersService.get(contentOwnerId=args.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']))

Domanda completa

Questa sezione mostra l'applicazione completa con alcune informazioni sulle licenze e commenti aggiuntivi nel copione. Esistono due modi per eseguire il programma:

  • Questo comando avvia una finestra del browser tramite la quale puoi autenticarti, se necessario, e autorizzare l'applicazione a inviare richieste API. Se autorizzi l'applicazione, le credenziali vengono trasmesse automaticamente allo script.

    python3 yt_partner_api.py --content_owner_id=CONTENT_OWNER_ID

    Nota:puoi trovare il valore di CONTENT_OWNER_ID per il tuo account nella pagina Impostazioni account del tuo account CMS. Il valore è indicato come Partner Code nella sezione delle informazioni sull'account della pagina.

  • Questo comando restituisce un URL che puoi aprire in un browser e ti chiede anche di inserire un codice di autorizzazione. Quando vai all'URL, la pagina ti consente di autorizzare l'applicazione a inviare richieste API per tuo conto. Se concedi l'autorizzazione, nella pagina viene visualizzato il codice di autorizzazione che devi inserire al prompt per completare il flusso di autorizzazione.

    python3 yt_partner_api.py --content_owner_id=CONTENT_OWNER_ID --noauth_local_webserver

    Nota:il modulo oauth2client riconosce il parametro noauth_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/env python3
#
# 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 Data API.

Command-line application that retrieves the information
about given content owner.

Usage:
  $ python3 yt_partner_api.py --content_owner_id=[contentOwnerId]
  $ python3 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:

  $ python3 yt_partner_api.py --help

To get detailed log output run:

  $ python3 yt_partner_api.py --logging_level=DEBUG \
    --content_owner_id=[contentOwnerId]
"""

import argparse
from datetime import datetime
import logging
import os
import sys

from apiclient.discovery import build
import httplib2
from oauth2client.client import flow_from_clientsecrets
from oauth2client.file import Storage
from oauth2client.tools import argparser, run_flow

# Define parser.
parser = argparse.ArgumentParser(
    parents=[argparser],
    description='Simple command-line sample for YouTube Data API.')
parser.add_argument(
    '--content_owner_id',
    required=True,
    help='Required. Identifies the content owner id whose details are printed out.')
parser.add_argument(
    '--logging_level',
    default='ERROR',
    choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'],
    help='Set the level of logging detail.')


def main():
  args = parser.parse_args()

  # Set the logging according to the command-line flag
  logging.getLogger().setLevel(getattr(logging, args.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(FLOW, storage, args)

  http = httplib2.Http()
  http = credentials.authorize(http)

  service = build("youtubePartner", "v1", http=http, static_discovery=False)
  contentOwnersService = service.contentOwners()

  # Create and execute get request.
  request = contentOwnersService.get(contentOwnerId=args.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()