Muestra una colección de elementos de una lista de reproducción que coinciden con los parámetros de solicitud de la API. Puedes recuperar todos los elementos de una lista de reproducción en una lista de reproducción específica o recuperar uno o más elementos de una lista de reproducción mediante sus ID únicos. Pruébalo ahora y ve un ejemplo.
Solicitud
Solicitud HTTP
GET https://www.googleapis.com/youtube/v3/playlistItems
Parámetros
La tabla a continuación muestra los parámetros compatibles con esta consulta. Todos los parámetros mencionados son parámetros de consulta.
Parámetros | ||
---|---|---|
Parámetros obligatorios | ||
part |
string El parámetro part especifica una lista separada por comas de una o más propiedades de recursos de playlistItem que la respuesta de API va a incluir. Los nombres de part que se pueden incluir en el valor del parámetro son id , snippet , contentDetails y status .Si el parámetro identifica una propiedad que contiene propiedades secundarias, estas se incluirán en la respuesta. Por ejemplo, en un recurso de playlistItem , la propiedad snippet contiene numerosos campos, incluidos title , description , position y las propiedades de resourceId . Por lo tanto, si estableces part=snippet , la respuesta de la API contendrá todas esas propiedades. |
|
Filtros (especifica exactamente uno de los siguientes parámetros) | ||
id |
string El parámetro id especifica una lista separada por comas de uno o más ID exclusivos de elementos de listas de reproducción. |
|
playlistId |
string El parámetro playlistId especifica el ID exclusivo de la lista de reproducción para la cual deseas recuperar los elementos de la lista de reproducción. Ten en cuenta que, aunque que este sea un parámetro opcional, cada solicitud para recuperar elementos de listas de reproducción debe especificar un valor para el parámetro id o el parámetro playlistId . |
|
Parámetros opcionales | ||
maxResults |
unsigned integer El parámetro maxResults especifica el número máximo de elementos que se deben mostrar en el conjunto de resultados. Los valores aceptables son 0 a 50 , ambos inclusive. El valor predeterminado es 5 . |
|
pageToken |
string El parámetro pageToken identifica una página específica en el conjunto de resultados que se debe mostrar. En una respuesta de la API, las propiedades nextPageToken y prevPageToken identifican otras páginas que se podrían recuperar. |
|
videoId |
string El parámetro videoId especifica que la solicitud debe mostrar solo los elementos de la lista de reproducción que contengan el video especificado. |
Cuerpo de la solicitud
No proporciones un cuerpo de solicitud cuando invoques este método.
Respuesta
Si se aplica correctamente, este método muestra un cuerpo de respuesta con la siguiente estructura:
{ "kind": "youtube#playlistItemListResponse", "etag": etag, "nextPageToken": string, "prevPageToken": string, "pageInfo": { "totalResults": integer, "resultsPerPage": integer }, "items": [ playlistItems Resource ] }
Propiedades
La siguiente tabla define las propiedades que aparecen en este recurso:
Propiedades | |
---|---|
kind |
string Tipo de recurso de la API. El valor será youtube#playlistItemListResponse . |
etag |
etag Etag de este recurso. |
nextPageToken |
string Token que se puede utilizar como valor del parámetro pageToken para recuperar la página siguiente en el conjunto de resultados. |
prevPageToken |
string Token que se puede utilizar como valor del parámetro pageToken para recuperar la página anterior en el conjunto de resultados. |
pageInfo |
object El objeto pageInfo contiene información de paginación para el conjunto de resultados de búsqueda. |
pageInfo.totalResults |
integer ro total de resultados en el conjunto de resultados. |
pageInfo.resultsPerPage |
integer Número de resultados incluidos en la respuesta de la API. |
items[] |
list Lista de elementos de listas de reproducción que coinciden con los criterios de la solicitud. |
Ejemplos
Nota: Es posible que los siguientes ejemplos de código no representen todos los lenguajes de programación admitidos. Consulta la documentación sobre bibliotecas cliente para obtener una lista de los lenguajes admitidos.
Go
El siguiente ejemplo de código invoca el método playlistItems.list
de la API para recuperar una lista de videos subidos en el canal asociado a la solicitud. El código también invoca el método channels.list
con el parámetro mine
establecido en true
para recuperar el ID de lista de reproducción que identifica a los videos subidos del canal.
En este ejemplo se utiliza la biblioteca cliente Go.
package main import ( "flag" "fmt" "log" "google.golang.org/api/youtube/v3" ) func main() { flag.Parse() client, err := buildOAuthHTTPClient(youtube.YoutubeReadonlyScope) if err != nil { log.Fatalf("Error building OAuth client: %v", err) } service, err := youtube.New(client) if err != nil { log.Fatalf("Error creating YouTube client: %v", err) } // Start making YouTube API calls. // Call the channels.list method. Set the mine parameter to true to // retrieve the playlist ID for uploads to the authenticated user's // channel. call := service.Channels.List("contentDetails").Mine(true) response, err := call.Do() if err != nil { // The channels.list method call returned an error. log.Fatalf("Error making API call to list channels: %v", err.Error()) } for _, channel := range response.Items { playlistId := channel.ContentDetails.RelatedPlaylists.Uploads // Print the playlist ID for the list of uploaded videos. fmt.Printf("Videos in list %s\r\n", playlistId) nextPageToken := "" for { // Call the playlistItems.list method to retrieve the // list of uploaded videos. Each request retrieves 50 // videos until all videos have been retrieved. playlistCall := service.PlaylistItems.List("snippet"). PlaylistId(playlistId). MaxResults(50). PageToken(nextPageToken) playlistResponse, err := playlistCall.Do() if err != nil { // The playlistItems.list method call returned an error. log.Fatalf("Error fetching playlist items: %v", err.Error()) } for _, playlistItem := range playlistResponse.Items { title := playlistItem.Snippet.Title videoId := playlistItem.Snippet.ResourceId.VideoId fmt.Printf("%v, (%v)\r\n", title, videoId) } // Set the token to retrieve the next page of results // or exit the loop if all results have been retrieved. nextPageToken = playlistResponse.NextPageToken if nextPageToken == "" { break } fmt.Println() } } }
Java
En este ejemplo se utiliza la biblioteca cliente Java.
/* * Copyright (c) 2012 Google Inc. * * 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. */ package com.google.api.services.samples.youtube.cmdline.data; import com.google.api.client.auth.oauth2.Credential; import com.google.api.client.googleapis.json.GoogleJsonResponseException; import com.google.api.services.samples.youtube.cmdline.Auth; import com.google.api.services.youtube.YouTube; import com.google.api.services.youtube.model.Channel; import com.google.api.services.youtube.model.ChannelListResponse; import com.google.api.services.youtube.model.PlaylistItem; import com.google.api.services.youtube.model.PlaylistItemListResponse; import com.google.common.collect.Lists; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * Print a list of videos uploaded to the authenticated user's YouTube channel. * * @author Jeremy Walker */ public class MyUploads { /** * Define a global instance of a Youtube object, which will be used * to make YouTube Data API requests. */ private static YouTube youtube; /** * Authorize the user, call the youtube.channels.list method to retrieve * the playlist ID for the list of videos uploaded to the user's channel, * and then call the youtube.playlistItems.list method to retrieve the * list of videos in that playlist. * * @param args command line args (not used). */ public static void main(String[] args) { // This OAuth 2.0 access scope allows for read-only access to the // authenticated user's account, but not other types of account access. List<String> scopes = Lists.newArrayList("https://www.googleapis.com/auth/youtube.readonly"); try { // Authorize the request. Credential credential = Auth.authorize(scopes, "myuploads"); // This object is used to make YouTube Data API requests. youtube = new YouTube.Builder(Auth.HTTP_TRANSPORT, Auth.JSON_FACTORY, credential).setApplicationName( "youtube-cmdline-myuploads-sample").build(); // Call the API's channels.list method to retrieve the // resource that represents the authenticated user's channel. // In the API response, only include channel information needed for // this use case. The channel's contentDetails part contains // playlist IDs relevant to the channel, including the ID for the // list that contains videos uploaded to the channel. YouTube.Channels.List channelRequest = youtube.channels().list("contentDetails"); channelRequest.setMine(true); channelRequest.setFields("items/contentDetails,nextPageToken,pageInfo"); ChannelListResponse channelResult = channelRequest.execute(); List<Channel> channelsList = channelResult.getItems(); if (channelsList != null) { // The user's default channel is the first item in the list. // Extract the playlist ID for the channel's videos from the // API response. String uploadPlaylistId = channelsList.get(0).getContentDetails().getRelatedPlaylists().getUploads(); // Define a list to store items in the list of uploaded videos. List<PlaylistItem> playlistItemList = new ArrayList<PlaylistItem>(); // Retrieve the playlist of the channel's uploaded videos. YouTube.PlaylistItems.List playlistItemRequest = youtube.playlistItems().list("id,contentDetails,snippet"); playlistItemRequest.setPlaylistId(uploadPlaylistId); // Only retrieve data used in this application, thereby making // the application more efficient. See: // https://developers.google.com/youtube/v3/getting-started#partial playlistItemRequest.setFields( "items(contentDetails/videoId,snippet/title,snippet/publishedAt),nextPageToken,pageInfo"); String nextToken = ""; // Call the API one or more times to retrieve all items in the // list. As long as the API response returns a nextPageToken, // there are still more items to retrieve. do { playlistItemRequest.setPageToken(nextToken); PlaylistItemListResponse playlistItemResult = playlistItemRequest.execute(); playlistItemList.addAll(playlistItemResult.getItems()); nextToken = playlistItemResult.getNextPageToken(); } while (nextToken != null); // Prints information about the results. prettyPrint(playlistItemList.size(), playlistItemList.iterator()); } } catch (GoogleJsonResponseException e) { e.printStackTrace(); System.err.println("There was a service error: " + e.getDetails().getCode() + " : " + e.getDetails().getMessage()); } catch (Throwable t) { t.printStackTrace(); } } /* * Print information about all of the items in the playlist. * * @param size size of list * * @param iterator of Playlist Items from uploaded Playlist */ private static void prettyPrint(int size, Iterator<PlaylistItem> playlistEntries) { System.out.println("============================================================="); System.out.println("\t\tTotal Videos Uploaded: " + size); System.out.println("=============================================================\n"); while (playlistEntries.hasNext()) { PlaylistItem playlistItem = playlistEntries.next(); System.out.println(" video name = " + playlistItem.getSnippet().getTitle()); System.out.println(" video id = " + playlistItem.getContentDetails().getVideoId()); System.out.println(" upload date = " + playlistItem.getSnippet().getPublishedAt()); System.out.println("\n-------------------------------------------------------------\n"); } } }
JavaScript
El código JavaScript a continuación cumple las siguientes funciones:
- Recupera el ID de la lista de reproducción de los videos subidos en el canal del usuario a través del método
channels.list
de la API. - Entrega ese ID al método
playlistItems.list
para recuperar los videos en esa lista. - Muestra la lista de videos.
- Construye los botones de la página anterior y siguiente y establece su visibilidad en función de la información contenida en la respuesta de la API.
Como se señala en la sección Autorización de solicitudes, es necesario actualizar el ID de cliente en el archivo auth.js
para ejecutar este código.
En este ejemplo se utiliza la biblioteca cliente JavaScript.
// Define some variables used to remember state. var playlistId, nextPageToken, prevPageToken; // After the API loads, call a function to get the uploads playlist ID. function handleAPILoaded() { requestUserUploadsPlaylistId(); } // Call the Data API to retrieve the playlist ID that uniquely identifies the // list of videos uploaded to the currently authenticated user's channel. function requestUserUploadsPlaylistId() { // See https://developers.google.com/youtube/v3/docs/channels/list var request = gapi.client.youtube.channels.list({ mine: true, part: 'contentDetails' }); request.execute(function(response) { playlistId = response.result.items[0].contentDetails.relatedPlaylists.uploads; requestVideoPlaylist(playlistId); }); } // Retrieve the list of videos in the specified playlist. function requestVideoPlaylist(playlistId, pageToken) { $('#video-container').html(''); var requestOptions = { playlistId: playlistId, part: 'snippet', maxResults: 10 }; if (pageToken) { requestOptions.pageToken = pageToken; } var request = gapi.client.youtube.playlistItems.list(requestOptions); request.execute(function(response) { // Only show pagination buttons if there is a pagination token for the // next or previous page of results. nextPageToken = response.result.nextPageToken; var nextVis = nextPageToken ? 'visible' : 'hidden'; $('#next-button').css('visibility', nextVis); prevPageToken = response.result.prevPageToken var prevVis = prevPageToken ? 'visible' : 'hidden'; $('#prev-button').css('visibility', prevVis); var playlistItems = response.result.items; if (playlistItems) { $.each(playlistItems, function(index, item) { displayResult(item.snippet); }); } else { $('#video-container').html('Sorry you have no uploaded videos'); } }); } // Create a listing for a video. function displayResult(videoSnippet) { var title = videoSnippet.title; var videoId = videoSnippet.resourceId.videoId; $('#video-container').append('<p>' + title + ' - ' + videoId + '</p>'); } // Retrieve the next page of videos in the playlist. function nextPage() { requestVideoPlaylist(playlistId, nextPageToken); } // Retrieve the previous page of videos in the playlist. function previousPage() { requestVideoPlaylist(playlistId, prevPageToken); }
.NET
El siguiente ejemplo de código invoca el método playlistItems.list
de la API para recuperar una lista de videos subidos en el canal asociado a la solicitud. El código también invoca el método channels.list
con el parámetro mine
establecido en true
para recuperar el ID de lista de reproducción que identifica a los videos subidos del canal.
En este ejemplo se utiliza la biblioteca cliente .NET.
/* */ using System; using System.IO; using System.Reflection; using System.Threading; using System.Threading.Tasks; using Google.Apis.Auth.OAuth2; using Google.Apis.Services; using Google.Apis.Upload; using Google.Apis.Util.Store; using Google.Apis.YouTube.v3; using Google.Apis.YouTube.v3.Data; namespace Google.Apis.YouTube.Samples { /// <summary> /// YouTube Data API v3 sample: retrieve my uploads. /// Relies on the Google APIs Client Library for .NET, v1.7.0 or higher. /// See https://developers.google.com/api-client-library/dotnet/get_started /// </summary> internal class MyUploads { [STAThread] static void Main(string[] args) { Console.WriteLine("YouTube Data API: My Uploads"); Console.WriteLine("============================"); try { new MyUploads().Run().Wait(); } catch (AggregateException ex) { foreach (var e in ex.InnerExceptions) { Console.WriteLine("Error: " + e.Message); } } Console.WriteLine("Press any key to continue..."); Console.ReadKey(); } private async Task Run() { UserCredential credential; using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read)) { credential = await GoogleWebAuthorizationBroker.AuthorizeAsync( GoogleClientSecrets.Load(stream).Secrets, // This OAuth 2.0 access scope allows for read-only access to the authenticated // user's account, but not other types of account access. new[] { YouTubeService.Scope.YoutubeReadonly }, "user", CancellationToken.None, new FileDataStore(this.GetType().ToString()) ); } var youtubeService = new YouTubeService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = this.GetType().ToString() }); var channelsListRequest = youtubeService.Channels.List("contentDetails"); channelsListRequest.Mine = true; // Retrieve the contentDetails part of the channel resource for the authenticated user's channel. var channelsListResponse = await channelsListRequest.ExecuteAsync(); foreach (var channel in channelsListResponse.Items) { // From the API response, extract the playlist ID that identifies the list // of videos uploaded to the authenticated user's channel. var uploadsListId = channel.ContentDetails.RelatedPlaylists.Uploads; Console.WriteLine("Videos in list {0}", uploadsListId); var nextPageToken = ""; while (nextPageToken != null) { var playlistItemsListRequest = youtubeService.PlaylistItems.List("snippet"); playlistItemsListRequest.PlaylistId = uploadsListId; playlistItemsListRequest.MaxResults = 50; playlistItemsListRequest.PageToken = nextPageToken; // Retrieve the list of videos uploaded to the authenticated user's channel. var playlistItemsListResponse = await playlistItemsListRequest.ExecuteAsync(); foreach (var playlistItem in playlistItemsListResponse.Items) { // Print information about each video. Console.WriteLine("{0} ({1})", playlistItem.Snippet.Title, playlistItem.Snippet.ResourceId.VideoId); } nextPageToken = playlistItemsListResponse.NextPageToken; } } } } }
PHP
El siguiente ejemplo de código invoca el método playlistItems.list
de la API para recuperar una lista de videos subidos en el canal asociado a la solicitud. El código también invoca el método channels.list
con el parámetro mine
establecido en true
para recuperar el ID de lista de reproducción que identifica a los videos subidos del canal.
En este ejemplo se utiliza la biblioteca cliente PHP.
<?php /** * Library Requirements * * 1. Install composer (https://getcomposer.org) * 2. On the command line, change to this directory (api-samples/php) * 3. Require the google/apiclient library * $ composer require google/apiclient:~2.0 */ if (!file_exists(__DIR__ . '/vendor/autoload.php')) { throw new \Exception('please run "composer require google/apiclient:~2.0" in "' . __DIR__ .'"'); } require_once __DIR__ . '/vendor/autoload.php'; session_start(); /* * You can acquire an OAuth 2.0 client ID and client secret from the * Google API Console <https://console.cloud.google.com/> * For more information about using OAuth 2.0 to access Google APIs, please see: * <https://developers.google.com/youtube/v3/guides/authentication> * Please ensure that you have enabled the YouTube Data API for your project. */ $OAUTH2_CLIENT_ID = 'REPLACE_ME'; $OAUTH2_CLIENT_SECRET = 'REPLACE_ME'; $client = new Google_Client(); $client->setClientId($OAUTH2_CLIENT_ID); $client->setClientSecret($OAUTH2_CLIENT_SECRET); $client->setScopes('https://www.googleapis.com/auth/youtube'); $redirect = filter_var('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'], FILTER_SANITIZE_URL); $client->setRedirectUri($redirect); // Define an object that will be used to make all API requests. $youtube = new Google_Service_YouTube($client); // Check if an auth token exists for the required scopes $tokenSessionKey = 'token-' . $client->prepareScopes(); if (isset($_GET['code'])) { if (strval($_SESSION['state']) !== strval($_GET['state'])) { die('The session state did not match.'); } $client->authenticate($_GET['code']); $_SESSION[$tokenSessionKey] = $client->getAccessToken(); header('Location: ' . $redirect); } if (isset($_SESSION[$tokenSessionKey])) { $client->setAccessToken($_SESSION[$tokenSessionKey]); } // Check to ensure that the access token was successfully acquired. if ($client->getAccessToken()) { try { // Call the channels.list method to retrieve information about the // currently authenticated user's channel. $channelsResponse = $youtube->channels->listChannels('contentDetails', array( 'mine' => 'true', )); $htmlBody = ''; foreach ($channelsResponse['items'] as $channel) { // Extract the unique playlist ID that identifies the list of videos // uploaded to the channel, and then call the playlistItems.list method // to retrieve that list. $uploadsListId = $channel['contentDetails']['relatedPlaylists']['uploads']; $playlistItemsResponse = $youtube->playlistItems->listPlaylistItems('snippet', array( 'playlistId' => $uploadsListId, 'maxResults' => 50 )); $htmlBody .= "<h3>Videos in list $uploadsListId</h3><ul>"; foreach ($playlistItemsResponse['items'] as $playlistItem) { $htmlBody .= sprintf('<li>%s (%s)</li>', $playlistItem['snippet']['title'], $playlistItem['snippet']['resourceId']['videoId']); } $htmlBody .= '</ul>'; } } catch (Google_Service_Exception $e) { $htmlBody = sprintf('<p>A service error occurred: <code>%s</code></p>', htmlspecialchars($e->getMessage())); } catch (Google_Exception $e) { $htmlBody = sprintf('<p>An client error occurred: <code>%s</code></p>', htmlspecialchars($e->getMessage())); } $_SESSION[$tokenSessionKey] = $client->getAccessToken(); } elseif ($OAUTH2_CLIENT_ID == 'REPLACE_ME') { $htmlBody = <<<END <h3>Client Credentials Required</h3> <p> You need to set <code>\$OAUTH2_CLIENT_ID</code> and <code>\$OAUTH2_CLIENT_ID</code> before proceeding. <p> END; } else { $state = mt_rand(); $client->setState($state); $_SESSION['state'] = $state; $authUrl = $client->createAuthUrl(); $htmlBody = <<<END <h3>Authorization Required</h3> <p>You need to <a href="$authUrl">authorize access</a> before proceeding.<p> END; } ?> <!doctype html> <html> <head> <title>My Uploads</title> </head> <body> <?=$htmlBody?> </body> </html>
Python
El siguiente ejemplo de código invoca el método playlistItems.list
de la API para recuperar una lista de videos subidos en el canal asociado a la solicitud. El código también invoca el método channels.list
con el parámetro mine
establecido en true
para recuperar el ID de lista de reproducción que identifica a los videos subidos del canal.
En este ejemplo se utiliza la biblioteca cliente Python.
#!/usr/bin/python import httplib2 import os import sys from apiclient.discovery import build from oauth2client.client import flow_from_clientsecrets from oauth2client.file import Storage from oauth2client.tools import argparser, run_flow # The CLIENT_SECRETS_FILE variable specifies the name of a file that contains # the OAuth 2.0 information for this application, including its client_id and # client_secret. You can acquire an OAuth 2.0 client ID and client secret from # the Google API Console at # https://console.cloud.google.com/. # Please ensure that you have enabled the YouTube Data API for your project. # For more information about using OAuth2 to access the YouTube Data API, see: # https://developers.google.com/youtube/v3/guides/authentication # For more information about the client_secrets.json file format, see: # https://developers.google.com/api-client-library/python/guide/aaa_client_secrets CLIENT_SECRETS_FILE = "client_secrets.json" # This variable defines a message to display if the CLIENT_SECRETS_FILE is # missing. MISSING_CLIENT_SECRETS_MESSAGE = """ WARNING: Please configure OAuth 2.0 To make this sample run you will need to populate the client_secrets.json file found at: %s with information from the API Console https://console.cloud.google.com/ For more information about the client_secrets.json file format, please visit: https://developers.google.com/api-client-library/python/guide/aaa_client_secrets """ % os.path.abspath(os.path.join(os.path.dirname(__file__), CLIENT_SECRETS_FILE)) # This OAuth 2.0 access scope allows for read-only access to the authenticated # user's account, but not other types of account access. YOUTUBE_READONLY_SCOPE = "https://www.googleapis.com/auth/youtube.readonly" YOUTUBE_API_SERVICE_NAME = "youtube" YOUTUBE_API_VERSION = "v3" flow = flow_from_clientsecrets(CLIENT_SECRETS_FILE, message=MISSING_CLIENT_SECRETS_MESSAGE, scope=YOUTUBE_READONLY_SCOPE) storage = Storage("%s-oauth2.json" % sys.argv[0]) credentials = storage.get() if credentials is None or credentials.invalid: flags = argparser.parse_args() credentials = run_flow(flow, storage, flags) youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, http=credentials.authorize(httplib2.Http())) # Retrieve the contentDetails part of the channel resource for the # authenticated user's channel. channels_response = youtube.channels().list( mine=True, part="contentDetails" ).execute() for channel in channels_response["items"]: # From the API response, extract the playlist ID that identifies the list # of videos uploaded to the authenticated user's channel. uploads_list_id = channel["contentDetails"]["relatedPlaylists"]["uploads"] print "Videos in list %s" % uploads_list_id # Retrieve the list of videos uploaded to the authenticated user's channel. playlistitems_list_request = youtube.playlistItems().list( playlistId=uploads_list_id, part="snippet", maxResults=50 ) while playlistitems_list_request: playlistitems_list_response = playlistitems_list_request.execute() # Print information about each video. for playlist_item in playlistitems_list_response["items"]: title = playlist_item["snippet"]["title"] video_id = playlist_item["snippet"]["resourceId"]["videoId"] print "%s (%s)" % (title, video_id) playlistitems_list_request = youtube.playlistItems().list_next( playlistitems_list_request, playlistitems_list_response) print
Python App Engine
El siguiente ejemplo de código invoca el método playlistItems.list
de la API para recuperar una lista de videos subidos en el canal asociado a la solicitud. El código también invoca el método channels.list
con el parámetro mine
establecido en true
para recuperar el ID de lista de reproducción que identifica a los videos subidos del canal.
import os import urllib import webapp2 import jinja2 from apiclient.discovery import build from optparse import OptionParser import json JINJA_ENVIRONMENT = jinja2.Environment( loader=jinja2.FileSystemLoader(os.path.dirname(__file__)), extensions=['jinja2.ext.autoescape']) REGISTRATION_INSTRUCTIONS = """ You must set up a project and get an API key to run this code. Please see the instructions for creating a project and a key at <a href="https://developers.google.com/youtube/registering_an_application" >https://developers.google.com/youtube/registering_an_application</a>. <br><br> Make sure that you have enabled the YouTube Data API (v3) and the Freebase API for your project.""" # Set API_KEY to the "API key" value from the Google Developers Console: # https://console.developers.google.com/project/_/apiui/credential # Please ensure that you have enabled the YouTube Data API and Freebase API # for your project. API_KEY = "REPLACE_ME" YOUTUBE_API_SERVICE_NAME = "youtube" YOUTUBE_API_VERSION = "v3" FREEBASE_SEARCH_URL = "https://www.googleapis.com/freebase/v1/search?%s" QUERY_TERM = "dog" class MainHandler(webapp2.RequestHandler): def get(self): if API_KEY == 'REPLACE_ME': self.response.write(REGISTRATION_INSTRUCTIONS) else: # Present a list of Freebase topic IDs for the query term self.request_channel() def request_channel(self): # Display a text box where the user can enter a channel name or # channel ID. select_channel_page = ''' <html> <body> <p>Which channel's videos do you want to see?</p> <form method="post"> <p> <select name="channel_type"> <option value="id">Channel ID</option> <option value="name">Channel name</option> </select> <input name="channel" size="30"> </p> <p><input type="submit" /></p> </form> </body> </html> ''' # Display the HTML page that shows the form. self.response.out.write(select_channel_page) def post(self): # Service for calling the YouTube API youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, developerKey=API_KEY) # Use form inputs to create request params for channel details channel_type = self.request.get('channel_type') channels_response = None if channel_type == 'id': channels_response = youtube.channels().list( id=self.request.get('channel'), part='snippet,contentDetails' ).execute() else: channels_response = youtube.channels().list( forUsername=self.request.get('channel'), part='snippet,contentDetails' ).execute() channel_name = '' videos = [] for channel in channels_response['items']: uploads_list_id = channel['contentDetails']['relatedPlaylists']['uploads'] channel_name = channel['snippet']['title'] next_page_token = '' while next_page_token is not None: playlistitems_response = youtube.playlistItems().list( playlistId=uploads_list_id, part='snippet', maxResults=50, pageToken=next_page_token ).execute() for playlist_item in playlistitems_response['items']: videos.append(playlist_item) next_page_token = playlistitems_response.get('tokenPagination', {}).get( 'nextPageToken') if len(videos) > 100: break template_values = { 'channel_name': channel_name, 'videos': videos } self.response.headers['Content-type'] = 'text/html' template = JINJA_ENVIRONMENT.get_template('index.html') self.response.write(template.render(template_values)) app = webapp2.WSGIApplication([ ('/.*', MainHandler), ], debug=True)
Ruby
El siguiente ejemplo de código invoca el método playlistItems.list
de la API para recuperar una lista de videos subidos en el canal asociado a la solicitud. El código también invoca el método channels.list
con el parámetro mine
establecido en true
para recuperar el ID de lista de reproducción que identifica a los videos subidos del canal.
En este ejemplo se utiliza la biblioteca cliente Ruby.
#!/usr/bin/ruby require 'rubygems' gem 'google-api-client', '>0.7' require 'google/api_client' require 'google/api_client/client_secrets' require 'google/api_client/auth/file_storage' require 'google/api_client/auth/installed_app' # This OAuth 2.0 access scope allows for read-only access to the authenticated # user's account, but not other types of account access. YOUTUBE_READONLY_SCOPE = 'https://www.googleapis.com/auth/youtube.readonly' YOUTUBE_API_SERVICE_NAME = 'youtube' YOUTUBE_API_VERSION = 'v3' def get_authenticated_service client = Google::APIClient.new( :application_name => $PROGRAM_NAME, :application_version => '1.0.0' ) youtube = client.discovered_api(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION) file_storage = Google::APIClient::FileStorage.new("#{$PROGRAM_NAME}-oauth2.json") if file_storage.authorization.nil? client_secrets = Google::APIClient::ClientSecrets.load flow = Google::APIClient::InstalledAppFlow.new( :client_id => client_secrets.client_id, :client_secret => client_secrets.client_secret, :scope => [YOUTUBE_READONLY_SCOPE] ) client.authorization = flow.authorize(file_storage) else client.authorization = file_storage.authorization end return client, youtube end def main client, youtube = get_authenticated_service begin # Retrieve the "contentDetails" part of the channel resource for the # authenticated user's channel. channels_response = client.execute!( :api_method => youtube.channels.list, :parameters => { :mine => true, :part => 'contentDetails' } ) channels_response.data.items.each do |channel| # From the API response, extract the playlist ID that identifies the list # of videos uploaded to the authenticated user's channel. uploads_list_id = channel['contentDetails']['relatedPlaylists']['uploads'] # Retrieve the list of videos uploaded to the authenticated user's channel. next_page_token = '' until next_page_token.nil? playlistitems_response = client.execute!( :api_method => youtube.playlist_items.list, :parameters => { :playlistId => uploads_list_id, :part => 'snippet', :maxResults => 50, :pageToken => next_page_token } ) puts "Videos in list #{uploads_list_id}" # Print information about each video. playlistitems_response.data.items.each do |playlist_item| title = playlist_item['snippet']['title'] video_id = playlist_item['snippet']['resourceId']['videoId'] puts "#{title} (#{video_id})" end next_page_token = playlistitems_response.next_page_token end puts end rescue Google::APIClient::TransmissionError => e puts e.result.body end end main
Errores
En la tabla a continuación se identifican los mensajes de error que la API podría mostrar en respuesta a una invocación a este método. Consulta la documentación sobre mensajes de error para obtener más información.
Tipo de error | Detalle del error | Descripción |
---|---|---|
forbidden |
playlistItemsNotAccessible |
La solicitud no está debidamente autorizada para recuperar la lista de reproducción especificada. |
notFound |
playlistNotFound |
No se puede encontrar la lista de reproducción identificada con el parámetro playlistId de la solicitud. |
notFound |
videoNotFound |
No se puede encontrar el video identificado con el parámetro videoId de la solicitud. |
required |
playlistIdRequired |
La solicitud de suscripción no especifica un valor para la propiedad playlistId requerida. |
¡Pruébalo!
Utiliza el Explorador de la API para invocar este método con datos en directo y ver la solicitud y la respuesta de la API.