E 'possibile presentare le richieste di elaborazione batch con l'API di Python Youtube?
-
24-09-2019 - |
Domanda
Sto scrivendo un'applicazione utilizzando Python che aggiunge un video alla playlist di un utente su Youtube. Fare questo uno alla volta provoca Youtube per avviare strozzamento le mie richieste.
C'è un'API di elaborazione batch che permette di inviare 50 richieste in una sola volta, ma non riesco a trovare fuori dalla documentazione come presentare una richiesta di elaborazione batch. Le uniche informazioni su di esso copre il contenuto XML che deve essere inviato per la richiesta.
Qualcuno sa come presentare una richiesta di elaborazione batch?
Soluzione
Sembra che questo è documentato sul wiki GData-python-client: http://code.google.com/p/gdata-python-client/wiki/UsingBatchOperations . Mentre gli esempi in quella pagina sono per Base e fogli di calcolo, non è YouTube, dovrebbe essere abbastanza semplice per applicare le stesse tecniche per l'API di YouTube. Si, credo, bisogno di essere utilizzando l'API v2.
Altri suggerimenti
sono riuscito a ottenere le cose fatto in questo modo:
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 )
Con conseguente alimentazione può essere iterato come feed youtube API standard. Anche se particolare attenzione di video mancanti e altri
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