2016-08-23 3 views
0

sur une base aléatoire obtenir des erreurs Http aléatoires tout en essayant d'obtenir des commentaires de vidéos prédéfinies avec YouTube API v3 sur Python. Le cas: donner la liste des identifiants vidéo et des commentaires sont téléchargés pour chacun jusqu'à ce que python renvoie une erreur, et le processus s'arrête. Si je recharge le programme, il peut être coincé sur le même ou sur une autre vidéo et sur des commentaires différents. Erreurs allant de 40 * à 500 ainsi sur une base aléatoire. Je ai essayé de mettre du code dans essayer, mais n'a pas aidé. Tout ce que je peux faire d'autre que de se souvenir de l'ID de la dernière vidéo mise au rebut et de recharger le programme manuellement? Le code:Random Http erreur lors de l'utilisation de Youtube api pour obtenir des commentaires via Python

import httplib2 
import urllib2 
import os 
import sys 
import pandas as pd 

from apiclient.discovery import build_from_document 
from apiclient.discovery import build 
from apiclient.errors import HttpError 
from oauth2client.client import flow_from_clientsecrets 
from oauth2client.file import Storage 
from oauth2client.tools import argparser, run_flow 
DEVELOPER_KEY = "---" 
CLIENT_SECRETS_FILE = "client_secrets.json" 
YOUTUBE_READ_WRITE_SSL_SCOPE = "https://www.googleapis.com/auth/youtube.force-ssl" 
YOUTUBE_API_SERVICE_NAME = "youtube" 
YOUTUBE_API_VERSION = "v3" 

listL = list() 
listL.append("D0uEXoL04OM") 
listL.append("eX8-g9wM_Sc") 
listL.append("aKInxyP5l7k") 
listL.append("vMp__taMQtE") 
listL.append("Zd3qcqGKbYA") 
listL.append("69sg2o2phVs") 
listL.append("QcGhVY3ieu4") 
listL.append("t4QhJOFo2S0") 
listL.append("NeJPr6ko2Hk") 
listL.append("15ka3dFn6LI") 
listL.append("hweA36OyxRM") 
listL.append("ZmCv5HJJPqQ") 
listL.append("zfi5DamYZxA") 
listL.append("x7O3GVAqCio") 
listL.append("kAbhm5NJTz8") 
listL.append("7URzyREVdao") 



def comment_threads_list_by_video_id(service, part, video_id): 
    res = service.commentThreads().list(
    part=part, 
    videoId=video_id, 
    maxResults="100", 
).execute() 

    nextPageToken = res.get('nextPageToken') 
    while ('nextPageToken' in res): 
     nextPage = service.commentThreads().list(
     part="snippet", 
     videoId=video_id, 
     maxResults="100", 
     pageToken=nextPageToken 
     ).execute() 
     res['items'] = res['items'] + nextPage['items'] 
     if 'nextPageToken' not in nextPage: 
      res.pop('nextPageToken', None) 
     else: 
      nextPageToken = nextPage['nextPageToken'] 

youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, developerKey=DEVELOPER_KEY) 
for item in listL: 
     try: 
      print item 
      comment_threads_list_by_video_id(youtube, 'snippet, replies', item) 
     except urllib2.HTTPError, err: 
      print "Http Error happened" 
      pass 
     except urllib2.URLError, err: 
      print "Some other error happened:", err.reason 
      pass 

EDIT: -------------------------- Peu d'erreurs

HttpError: <HttpError 400 when requesting https://www.googleapis.com/youtube/v3/commentThreads?pageToken=ChYQpqWd6pfYzgIYyISxrpfYzgIgACgcEhQIABDIhLGul9jOAhiQgZuP9IfOAhgCIO4VKJHr35vwuKix-gE%3D&part=snippet&key=AIzaSyBzExhLoWbeHU1iKHZuaYV7IBPJNiyaDkE&alt=json&videoId=D0uEXoL04OM&maxResults=100 returned "The API server failed to successfully process the request. While this can be a transient error, it usually indicates that the requests input is invalid. Check the structure of the <code>commentThread</code> resource in the request body to ensure that it is valid."> 
+0

veuillez également poster quelques exemples d'erreurs que vous obtenez avec les textes d'erreur pertinents. –

+0

Est-il possible que vous atteigniez simplement la limite de demandes par seconde de l'API v3? – Av4t4r

+0

Salut merci pour le commentaire, maintenant je reçois seulement 'http 400 erreur' sur une base aléatoire, que je n'ai pas eu avant, peut-être demain au cours de la journée un peu différente apparaîtra. – Darius

Répondre

0

idiot erreur a été faite. Au lieu d'identifier d'erreur utilisé API dans 'exception'

... 
except HttpError, err: 
... 

Urlib2 un a été utilisé

... 
except urllib2.HTTPError, err: 
... 

La solution simple était d'ignorer et répéter jusqu'à ce que le succès. Cependant, toujours pas clair pourquoi ces erreurs aléatoires arrivent. Le sommeil n'a pas aidé.