2017-03-22 1 views
2

Ich versuche, alle Kommentare eines YouTube-Live-Chat zu erhalten. Im erfolgreich bekommen sie mit einer WWW Anfrage mit meinem Client in Unity. Die YouTube-API bietet eine nextPageToken = {RANDOM_TOKEN} , um Ergebnisse der nächsten Seite zu erhalten, da es nur 75 Kommentare auf der ersten Seite zeigt.YouTube Live-Chat-API und PollingIntervalMillis

Mein Client durchläuft alle diese Seiten mit den bereitgestellten nextPageTokens und erhält alle Kommentare und speichert sie lokal. Leider scheint es, als ob YouTube nur alle 10 Sekunden eine API-Anfrage erlaubt, die in der pollingIntervalMillis = 10000 definiert ist. Wenn ich also die nächste Seite mit Kommentaren bekommen möchte, muss ich immer 10 Sekunden warten. Sonst gibt es mir den Fehler rateLimitExceeded.

Wenn ich die HTTP-Anfrage in meinem Browser (Safari) durchsuche, tritt das Problem nicht auf und ich kann jede gewünschte Anfrage so schnell machen wie ich will (sogar alle anderen Seiten).

Gibt es eine Möglichkeit, wie ich alle Kommentare jeder Seite schneller als nur alle 10 Sekunden bekommen kann? Wenn ich 500 Kommentare und 75 Kommentare auf jeder Seite bekomme, müsste ich ungefähr eine Minute warten, um alle Kommentare zu erhalten. Scheint irgendwie seltsam. Es muss eine Möglichkeit geben.

hoffe, euch mir hier helfen kann :)

Update 1 Mit Hilfe eines Benutzers ein User-Agent auf meine Anfrage hinzuzufügen, jetzt sieht meine Anfrage wie folgt aus:

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)); 

Die Anfrage funktioniert, aber jetzt bekomme ich einen Fehler 401 Nicht autorisiert. Ich überprüfte die API-Website erneut und Fehler 401 ist nicht einmal in den möglichen Fehlern aufgeführt, die in der liveChatMessages list enthalten sind, da die einzige, die ich brauche, ist meine liveChatId und meine API-Zugriffsschlüssel. Ich habe beide, aber ein Login sollte nicht einmal erforderlich sein. Wenn mein Code wie folgt aussieht:

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

Ich bin immer ein Ergebnis, aber das war mein ursprünglicher Code, so würde ich 10 Sekunden, bis meine nächsten Anfrage warten. Irgendeine Hilfe?

Update 2 Ich fand heraus, dass die pollingIntervalMillis werden in Abhängigkeit von der Strom tatsächlich leben zu sein und die Menge der Kommentare auf sich warten. Als mein Strom war offline meine pollingIntervalMillis bei 10000. waren Als ich meinen Stream gestartet Online Meine pollingIntervalMillis waren bei 6000. Als ich meinen Chat mit einer ganzen Reihe von Kommentaren spammte ging mein pollingIntervalMillis um 1000. Also mein anfängliches Problem ist kein echtes Problem mehr da die Aktualisierungsraten stark abfallen, wenn der Stream live ist und die Der Chat ist aktiv.

Vielleicht kann dieser Beitrag anderen auch helfen!

Antwort

0

Es ist ein weit hergeholt, aber man könnte versuchen, einen Useragent auf Ihre Anfrage Hinzufügen denken Youtube Ihr einen Browser:

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

Wenn ich google images wurde Parsen Es würde die ganze Seite, wenn ich nicht mehr zurück sagte es die Anfrage wurde über einen Browser gemacht, so wird es vielleicht helfen.

Verwandte Themen