¿Es posible presentar solicitudes de procesamiento por lotes con el API de Python Youtube?
-
24-09-2019 - |
Pregunta
Estoy escribiendo una aplicación que utiliza Python que se suma a la lista de reproducción de vídeos de un usuario en Youtube. Al hacer esto uno a la vez hace que Youtube para iniciar estrangulamiento mis peticiones.
Hay una API de procesamiento por lotes que le permite presentar 50 solicitudes a la vez, pero no puede averiguar a través de la documentación de la forma de presentar una solicitud de procesamiento por lotes. La única información sobre el mismo cubre el contenido XML que tiene que ser enviado para la solicitud.
¿Alguien sabe cómo enviar una solicitud de procesamiento por lotes?
Solución
Parece que esto está documentado en el wiki gdata-python-cliente: http://code.google.com/p/gdata-python-client/wiki/UsingBatchOperations . Si bien los ejemplos de esa página son de base y hojas de cálculo, no YouTube, que debe ser bastante sencillo de aplicar las mismas técnicas para la API de YouTube. Usted, yo creo, necesidad de estar utilizando la versión 2 del API.
Otros consejos
Me las he arreglado para hacer las cosas de esta manera:
query = "<feed xmlns=\"http://www.w3.org/2005/Atom\""
query += " xmlns:media=\"http://search.yahoo.com/mrss/\""
query += " xmlns:batch=\"http://schemas.google.com/gdata/batch\""
query += " xmlns:yt=\"http://gdata.youtube.com/schemas/2007\">"
query += "<batch:operation type=\"query\"/>"
# Assume ids contain list of YouTube video IDs
for vid in ids:
query += ("<entry><id>http://gdata.youtube.com/feeds/api/videos/%s</id></entry>" % vid)
query += "</feed>"
uri = 'http://gdata.youtube.com/feeds/api/videos/batch'
feed = client.Post( query, uri, converter=gdata.youtube.YouTubeVideoFeedFromString )
alimentación resultante puede repetirse como alimentaciones youtube API estándar. Aunque el cuidado especial de los vídeos perdidos y otros
if len(feed.entry):
for entry in feed.entry:
skip = False
for x in entry.extension_elements:
if x.tag == "status" and x.namespace == "http://schemas.google.com/gdata/batch" and x.attributes["code"] != "200":
if x.attributes["code"] == "404":
skip = True
# Likewize you can check for entry's 403 e.g. Quota Exceeded etc
... # Your entry processing goes here