Eine erste Anfrage senden

Hinweis:Die YouTube Data API ist für YouTube-Inhaltspartner vorgesehen und nicht für alle Entwickler oder YouTube-Nutzer verfügbar. Für den Zugriff ist ein YouTube Content-Manager-Konto erforderlich. Wenn Sie ein YouTube Content Manager-Konto haben, die YouTube Data API aber nicht als einer der Dienste in der Google Cloud Console aufgeführt ist, wenden Sie sich an Ihren zugewiesenen Partnermanager oder den Partnersupport.

In dieser Schritt-für-Schritt-Anleitung wird beschrieben, wie Sie ein Skript erstellen, das eine Verbindung zu ContentOwnersService herstellt und Informationen zu einem bestimmten Rechteinhaber abruft. Ein vollständiges Codebeispiel finden Sie am Ende des Tutorials. Dieser Code ist in Python geschrieben. Clientbibliotheken für andere gängige Programmiersprachen sind ebenfalls verfügbar.

Voraussetzungen

Script zum Senden von API-Anfragen erstellen

In den folgenden Schritten wird beschrieben, wie Sie ein Skript erstellen, um eine YouTube Data API-Anfrage zu senden:

Schritt 1: Das grundlegende Skript erstellen

Das folgende Skript akzeptiert die folgenden Befehlszeilenargumente:

  • Der Parameter content_owner_id ist erforderlich und gibt den CMS-Rechteinhaber an, für den Sie Informationen abrufen.
  • Der Parameter logging_level gibt die Detailgenauigkeit des Loggings für das Skript an.
  • Der Parameter help bewirkt, dass das Skript eine Liste der Parameter ausgibt, die es versteht.
#!/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()

Schritt 2: Nutzerauthentifizierung und ‑autorisierung aktivieren

In diesem Schritt wird die OAuth 2.0-Autorisierung in das Script eingebunden. So kann der Nutzer, der das Skript ausführt, das Skript autorisieren, API-Anfragen auszuführen, die dem Konto des Nutzers zugeordnet sind.

Schritt 2a: Datei „client_secrets.json“ erstellen

Für die YouTube Data API ist eine client_secrets.json-Datei erforderlich, die Informationen aus der Cloud Console enthält, um die Authentifizierung durchzuführen. Außerdem müssen Sie Ihre Anwendung registrieren. Eine ausführlichere Erklärung zur Funktionsweise der Authentifizierung finden Sie im Authentifizierungsleitfaden.

 {
  "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"
  }
}

Schritt 2b: Authentifizierungscode zum Skript hinzufügen

Damit die Nutzerauthentifizierung und ‑autorisierung aktiviert werden, müssen Sie die folgenden import-Anweisungen hinzufügen:

from datetime import datetime
from oauth2client.file import Storage
from oauth2client.client import flow_from_clientsecrets
from oauth2client.tools import argparser, run_flow

Als Nächstes erstellen wir ein FLOW-Objekt mit den in Schritt 2a konfigurierten Clientschlüsseln. Wenn der Nutzer unsere Anwendung autorisiert, API-Anfragen in seinem Namen zu senden, werden die resultierenden Anmeldedaten zur späteren Verwendung in einem Storage-Objekt gespeichert. Wenn die Anmeldedaten ablaufen, muss der Nutzer unsere Anwendung noch einmal autorisieren.

Fügen Sie am Ende der Funktion main den folgenden Code ein:

  # 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)

Schritt 2c: httplib2-Objekt erstellen und Anmeldedaten anhängen

Nachdem der Nutzer unser Skript autorisiert hat, erstellen wir ein httplib2.Http-Objekt, das API-Anfragen verarbeitet, und hängen die Autorisierungsanmeldedaten an dieses Objekt an.

Fügen Sie die folgende Importanweisung hinzu:

  import httplib2

Fügen Sie diesen Code am Ende der Funktion main ein:

  # Create httplib2.Http object to handle HTTP requests and
  # attach auth credentials.
  http = httplib2.Http()
  http = credentials.authorize(http)

Schritt 3: Dienst abrufen

Die Funktion build der Python-Clientbibliothek erstellt eine Ressource, die mit einer API interagieren kann. Nachdem der Nutzer unsere Anwendung autorisiert hat, erstellen wir das service-Objekt, das Methoden für die Interaktion mit dem ContentOwnerService bereitstellt.

Fügen Sie die folgende Importanweisung hinzu:

from apiclient.discovery import build

Fügen Sie diesen Code am Ende der Funktion main ein:

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

Schritt 4: API-Anfrage ausführen

Jetzt erstellen wir eine Serviceanfrage und führen sie aus. Der folgende Code erstellt und führt eine contentOwnersService.get()-Anfrage aus, mit der Informationen zum angegebenen Rechteinhaber abgerufen werden.

Fügen Sie diesen Code am Ende der Funktion main ein:

  # 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']))

Vollständiger Antrag

In diesem Abschnitt sehen Sie die vollständige Anwendung mit einigen Lizenzinformationen und zusätzlichen Kommentaren im Skript. Es gibt zwei Möglichkeiten, das Programm auszuführen:

  • Mit diesem Befehl wird ein Browserfenster geöffnet, über das Sie sich bei Bedarf authentifizieren und die Anwendung autorisieren können, API-Anfragen zu senden. Wenn Sie die Anwendung autorisieren, werden die Anmeldedaten automatisch an das Skript zurückgegeben.

    python3 yt_partner_api.py --content_owner_id=CONTENT_OWNER_ID

    Hinweis:Den CONTENT_OWNER_ID-Wert für Ihr Konto finden Sie in Ihrem CMS-Konto auf der Seite Kontoeinstellungen. Der Wert wird auf dieser Seite im Abschnitt „Kontoinformationen“ als Partner Code aufgeführt.

  • Mit diesem Befehl wird eine URL ausgegeben, die Sie in einem Browser öffnen können. Außerdem werden Sie aufgefordert, einen Autorisierungscode einzugeben. Wenn Sie die URL aufrufen, können Sie die Anwendung auf dieser Seite autorisieren, API-Anfragen in Ihrem Namen zu senden. Wenn Sie diese Autorisierung erteilen, wird auf der Seite der Autorisierungscode angezeigt, den Sie an der Eingabeaufforderung eingeben müssen, um den Autorisierungsvorgang abzuschließen.

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

    Hinweis:Das Modul oauth2client erkennt den Parameter noauth_local_webserver, obwohl er im Skript nicht erwähnt wird.

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()