2017-03-22 1 views
2

J'essaie d'obtenir tous les commentaires d'un chat en direct sur YouTube. Je les ai réussi avec une demande WWW avec mon client dans Unity. L'API YouTube offre un nextPageToken = {RANDOM_TOKEN} pour obtenir les résultats de la page suivante, car il ne montre que 75 commentaires sur la première page.YouTube Live-Chat API et pollingIntervalMillis

Mon client passe en revue toutes ces pages avec le message nextPageTokens fourni et obtient tous les commentaires et les stocke localement. Malheureusement, il semble que YouTube ne permette que les requêtes API toutes les 10 secondes définies dans le pollingIntervalMillis = 10000 Donc quand je veux obtenir la prochaine page de commentaires, j'ai besoin d'attendre 10 secondes encore et encore. Sinon, il me donne l'erreur rateLimitExceeded.

Lorsque je parcours la requête HTTP dans mon navigateur (Safari), le problème ne se produit pas et je peux faire toute demande que je veux aussi vite que je veux (même toutes les autres pages).

Est-il possible de recevoir tous les commentaires de chaque page plus rapidement que toutes les 10 secondes? Si je reçois 500 commentaires et 75 commentaires sur chaque page, j'aurais besoin d'attendre une minute pour avoir tous les commentaires. Cela semble un peu étrange. Il doit y avoir une possibilité.

espérons que vous les gars peuvent me aider :)

Update 1 Avec l'aide d'un utilisateur d'ajouter un agent utilisateur à ma demande, maintenant ma demande ressemble à ceci:

Dictionary<string, string> headers = new Dictionary<string, string>(); 
headers.Add("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Safari/602.1.50"); 
WWW www = new WWW(url_2, new byte[] {(byte) 0}, headers); 
StartCoroutine(WaitForRequest(www)); 

La demande fonctionne, mais maintenant je reçois une erreur 401 non autorisée. J'ai encore vérifié le site Web d'API et l'erreur 401 n'est même pas énumérée dans les erreurs possibles incluses dans le liveChatMessages list puisque le seul dont je devrais avoir besoin est mon liveChatId et ma clef d'accès d'API. J'ai les deux, mais un login ne devrait même pas être nécessaire. Si mon code ressemble à ceci:

WWW www = new WWW(url_2); 
StartCoroutine(WaitForRequest(www)); 

Je suis obtenir un résultat, mais cela était mon code original, donc je dois attendre 10 secondes jusqu'à ce que ma prochaine demande. De l'aide?

Mise à jour 2 J'ai découvert que le pollingIntervalMillis sont en fonction du flux effectivement être en direct et la quantité de commentaires venant. Quand mon flux est déconnecté mon pollingIntervalMillis étaient à 10000. Quand j'ai commencé mon flux en ligne mes pollingIntervalMillis étaient à 6000. Quand j'ai spammé mon chat avec un tas de commentaires, mon pollingIntervalMillis est passé à environ 1000. Donc, mon problème initial n'est plus un vrai problème puisque les taux de rafraîchissement chutent fortement quand le flux est en direct et le le chat est actif.

Peut-être que ce message peut aider les autres aussi!

Répondre

0

Son un long shot, mais vous pouvez essayer d'ajouter un UserAgent à votre demande de faire Youtube pense que votre navigateur:

request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"; 

Quand j'analyse des images google ne retourneraient pas l'ensemble du site à moins que je dit que la demande a été faite à travers un navigateur alors peut-être que ça va aider.