Eine erste Anfrage senden

Hinweis: Die YouTube Content ID API ist für die Verwendung durch YouTube-Inhaltspartner vorgesehen und nicht für alle Entwickler oder YouTube-Nutzer zugänglich. Wenn die YouTube Content ID API nicht in der Google API Console aufgeführt ist, findest du in der YouTube-Hilfe weitere Informationen zum YouTube-Partnerprogramm.

In dieser detaillierten Anleitung wird erklärt, wie du ein Skript erstellst, das eine Verbindung zu ContentOwnersService herstellt und Informationen zu einem bestimmten Rechteinhaber abruft. Am Ende der Anleitung finden Sie ein vollständiges Codebeispiel. Dieser Code ist in Python geschrieben, es sind aber auch Clientbibliotheken für andere gängige Programmiersprachen verfügbar.

Voraussetzungen

Skript zum Senden von API-Anfragen erstellen

In den folgenden Schritten wird beschrieben, wie du ein Script erstellst, um eine YouTube Content ID API-Anfrage zu senden:

Schritt 1: Grundlegendes Skript erstellen

Das folgende Skript akzeptiert die folgenden Befehlszeilenparameter und legt Werte für die globale Variable FLAGS fest:

  • Der Parameter content_owner_id ist erforderlich und identifiziert den Rechteinhaber des CMS, zu dem du Informationen abrufst.
  • Der Parameter logging_level gibt die Detailebene der Protokollierung für das Script an.
  • Der Parameter help bewirkt, dass das Skript eine Liste der Parameter ausgibt, die es versteht.
#!/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)

Schritt 2: Nutzerauthentifizierung und -autorisierung aktivieren

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

Schritt 2a: Datei „client_secrets.json“ erstellen

Zur Authentifizierung der YouTube Content ID API ist eine client_secrets.json-Datei erforderlich, die Informationen aus der API Console enthält. 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 Script hinzufügen

Wenn Sie die Nutzerauthentifizierung und ‑autorisierung aktivieren möchten, müssen Sie die folgenden import-Anweisungen hinzufügen:

from oauth2client.file import Storage
from oauth2client.client import flow_from_clientsecrets
from oauth2client.tools import run

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

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, storage)

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

Nachdem der Nutzer unser Script 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 am Ende der Funktion main diesen Code 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 zur Interaktion mit dem ContentOwnerService bietet.

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 Dienstanfrage und führen sie aus. Mit dem folgenden Code wird eine contentOwnersService.get()-Anfrage erstellt und ausgeführt, die Informationen zum angegebenen Rechteinhaber abruft.

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

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

Vollständige Bewerbung

Dieser Abschnitt zeigt die vollständige Anwendung mit einigen Lizenzinformationen und zusätzlichen Kommentaren im Script. Es gibt zwei Möglichkeiten, das Programm auszuführen:

  • Dieser Befehl öffnet ein Browserfenster, über das Sie sich bei Bedarf authentifizieren und die Anwendung zum Senden von API-Anfragen autorisieren können. Wenn Sie die Anwendung autorisieren, werden die Anmeldedaten automatisch an das Skript zurückgesendet.

    python yt_partner_api.py --content_owner_id=CONTENT_OWNER_ID.

    Hinweis: Den CONTENT_OWNER_ID-Wert für dein Konto findest du in deinem CMS-Konto auf der Seite Kontoeinstellungen. Der Wert ist auf dieser Seite im Bereich „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 zur Eingabe eines Autorisierungscodes aufgefordert. Wenn Sie die URL aufrufen, können Sie auf dieser Seite die Anwendung autorisieren, API-Anfragen in Ihrem Namen zu senden. Wenn Sie diese Autorisierung erteilen, wird auf der Seite der Autorisierungscode angezeigt, den Sie bei der Eingabeaufforderung eingeben müssen, um den Autorisierungsvorgang abzuschließen.

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

    Hinweis: Das oauth2client-Modul erkennt den Parameter noauth_local_webserver, auch wenn er im Script 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/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)