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 als einer der in der Google API Console aufgeführten Dienste angezeigt wird, findest du in der YouTube-Hilfe weitere Informationen zum YouTube-Partnerprogramm.
In dieser Schritt-für-Schritt-Anleitung wird erklärt, wie du ein Script erstellst, das eine Verbindung zu ContentOwnersService
herstellt und Informationen zu einem bestimmten Rechteinhaber abruft. Ein vollständiges Codebeispiel finden Sie am Ende der Anleitung. Obwohl dieser Code in Python geschrieben wurde, sind auch Clientbibliotheken für andere gängige Programmiersprachen verfügbar.
Voraussetzungen
- Python 2.5 oder höher
- google-api-python-client
Skript zum Senden von API-Anfragen erstellen
In den folgenden Schritten wird erklärt, wie du ein Skript zum Senden einer YouTube Content ID API-Anfrage erstellst.
Schritt 1: Einfaches Script erstellen
Das folgende Skript akzeptiert die folgenden Befehlszeilenparameter und legt Werte für die globale FLAGS
-Variable fest:
- Der Parameter
content_owner_id
ist erforderlich und identifiziert den CMS-Rechteinhaber, zu dem du Informationen abrufst. - Der Parameter
logging_level
gibt die Protokolldetailebene für das Skript an. - Der Parameter
help
sorgt dafür, dass das Skript eine Liste mit Parametern 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 binden wir die OAuth 2.0-Autorisierung in das Skript ein. Dadurch 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
Die YouTube Content ID API erfordert eine client_secrets.json
-Datei mit Informationen aus der API-Konsole, um die Authentifizierung durchzuführen. Außerdem müssen Sie Ihre Anwendung registrieren. Eine ausführlichere Erläuterung der 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
Fügen Sie die folgenden import
-Anweisungen hinzu, um die Nutzerauthentifizierung und -autorisierung zu aktivieren:
from oauth2client.file import Storage from oauth2client.client import flow_from_clientsecrets from oauth2client.tools import run
Als Nächstes erstellen wir mit den in Schritt 2a konfigurierten Clientschlüsseln ein FLOW
-Objekt. Wenn der Nutzer unsere Anwendung autorisiert, API-Anfragen im Namen des Nutzers zu senden, werden die resultierenden Anmeldedaten zur späteren Verwendung in einem Storage
-Objekt gespeichert. Der Nutzer muss unsere Anwendung noch einmal 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 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 in Anspruch nehmen
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 ContentOwnerService
bietet.
Fügen Sie die folgende Importanweisung hinzu:
from apiclient.discovery import build
Und fügen Sie diesen Code am Ende der main
-Funktion 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, 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=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'])
Antrag ausfüllen
Dieser Abschnitt zeigt die vollständige Anwendung mit einigen Lizenzinformationen und zusätzlichen Kommentaren im Skript. 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ückgegeben.
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 wird auf dieser Seite im Abschnitt mit den Kontoinformationen alsPartner 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, in Ihrem Namen API-Anfragen zu senden. Wenn Sie die Autorisierung erteilen, wird auf der Seite der Autorisierungscode angezeigt, den Sie in die 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 Modul
oauth2client
erkennt den Parameternoauth_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/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)