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!