Remarque:L'API YouTube Content ID est destinée aux partenaires de contenu YouTube. Elle n'est pas accessible à tous les développeurs ni à tous les utilisateurs YouTube. Si l'API YouTube Content ID n'apparaît pas dans la console Google APIs, consultez le Centre d'aide YouTube pour en savoir plus sur le Programme Partenaire YouTube.
Ce tutoriel par étapes vous explique comment créer un script qui se connecte à ContentOwnersService
et récupère des informations sur un propriétaire de contenu donné. Un exemple de code complet est fourni à la fin du tutoriel. Bien que ce code soit écrit en Python, des bibliothèques clientes sont également disponibles pour d'autres langages de programmation courants.
Conditions requises
- Python 2.5 ou version ultérieure
- google-api-python-client
Créer un script pour envoyer des requêtes API
Pour créer un script permettant d'envoyer une requête API YouTube Content ID, procédez comme suit :
Étape 1: Créez le script de base
Le script ci-dessous accepte les paramètres de ligne de commande suivants et définit des valeurs sur la variable globale FLAGS
:
- Le paramètre
content_owner_id
est obligatoire et identifie le propriétaire de contenu du CMS au sujet duquel vous récupérez les informations. - Le paramètre
logging_level
spécifie le niveau de détail de la journalisation pour le script. - Le paramètre
help
permet au script de générer une liste des paramètres compris.
#!/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)
Étape 2: Activez l'authentification et l'autorisation des utilisateurs
Dans cette étape, nous allons intégrer l'autorisation OAuth 2.0 dans le script. Ainsi, l'utilisateur qui exécute le script pourra l'autoriser à exécuter les requêtes API attribuées au compte de l'utilisateur.
Étape 2a: Créer un fichier client_secrets.json
L'API YouTube Content ID nécessite un fichier client_secrets.json
, qui contient des informations de la console API, pour effectuer l'authentification. Vous devez également enregistrer votre application. Pour en savoir plus sur le fonctionnement de l'authentification, consultez le guide sur l'authentification.
{ "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" } }
Étape 2b: Ajoutez un code d'authentification à votre script
Pour activer l'authentification et l'autorisation des utilisateurs, vous devez ajouter les instructions import
suivantes:
from oauth2client.file import Storage from oauth2client.client import flow_from_clientsecrets from oauth2client.tools import run
Nous allons ensuite créer un objet FLOW
à l'aide des codes secrets du client configurés à l'étape 2a. Si l'utilisateur autorise notre application à envoyer des requêtes API en son nom, les identifiants obtenus sont stockés dans un objet Storage
pour une utilisation ultérieure. Si les identifiants expirent, l'utilisateur devra autoriser à nouveau notre application.
Ajoutez le code suivant à la fin de la fonction 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)
Étape 2c: Créez un objet httplib2
et associez des identifiants
Une fois que l'utilisateur a autorisé notre script, nous créons un objet httplib2.Http
qui gère les requêtes API, et nous associons les identifiants d'autorisation à cet objet.
Ajoutez la déclaration d'importation suivante :
import httplib2
Ajoutez le code suivant à la fin de la fonction main
:
# Create httplib2.Http object to handle HTTP requests and # attach auth credentials. http = httplib2.Http() http = credentials.authorize(http)
Étape 3: Obtenir un service
La fonction build
de la bibliothèque cliente Python construit une ressource pouvant interagir avec une API. Une fois que l'utilisateur a autorisé notre application, nous créons l'objet service
, qui fournit des méthodes d'interaction avec ContentOwnerService
.
Ajoutez la déclaration d'importation suivante :
from apiclient.discovery import build
Ajoutez le code suivant à la fin de la fonction main
:
service = build("youtubePartner", "v1", http=http, static_discovery=False) contentOwnersService = service.contentOwners()
Étape 4: Exécutez une requête API
Maintenant, nous allons créer une requête de service et l'exécuter. Le code suivant crée et exécute une requête contentOwnersService.get()
, qui récupère les informations sur le propriétaire de contenu spécifié.
Ajoutez ce code à la fin de la fonction 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'])
Finaliser la demande
Cette section présente l'application complète, avec des informations sur les licences et des commentaires supplémentaires dans le script. Il existe deux façons d'exécuter le programme:
-
Cette commande ouvre une fenêtre de navigateur à travers laquelle vous pouvez vous authentifier, si nécessaire, et autoriser l'application à envoyer des requêtes API. Si vous autorisez l'application, les identifiants sont automatiquement transmis au script.
python yt_partner_api.py --content_owner_id=CONTENT_OWNER_ID.
Remarque:Vous trouverez la valeur
CONTENT_OWNER_ID
de votre compte sur la page Paramètres de compte de votre compte CMS. La valeur est indiquée commePartner Code
dans la section des informations de compte de cette page. -
Cette commande génère une URL que vous pouvez ouvrir dans un navigateur et vous invite également à saisir un code d'autorisation. Lorsque vous accédez à l'URL, cette page vous permet d'autoriser l'application à envoyer des requêtes API en votre nom. Si vous accordez cette autorisation, la page affiche le code d'autorisation que vous devez saisir lorsque vous y êtes invité pour finaliser le flux d'autorisation.
python yt_partner_api.py --content_owner_id=CONTENT_OWNER_ID --noauth_local_webserver.
Remarque:Le module
oauth2client
reconnaît le paramètrenoauth_local_webserver
même s'il n'est pas mentionné dans le 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)