Domanda Scraping di una pagina dinamica

gerasia

Utente Electrum
30 Gennaio 2018
288
72
52
176
Salve a tutti, dovrei fare scraping per ottenere un'informazione da una pagina (esattamente voglio il numero di utenti connessi ad uno stream di twitch, le api non rispondono ai cambiamenti e quindi sono inutili).
Il fatto è che questa pagina è ovviamente dinamica, idee su cosa possa usare?

P.S. il tutto deve funzionare in un container in background, quindi l'utente non deve fare ne vedere nulla se non lanciare lo script (Nulla di simile a selenium poichè apre un web browser).
 
In che senso le api non rispondono ai cambiamenti?
Ovviamente le api restituiscono il dato nel momento in cui fai la richiesta...Se ti serve aggiornare il dato fai una nuova richiesta....
 
si.. ovviamente.. ti faccio un esempio:

views sulla pagina di twitch: 100
views sulla chiamata api: 100

sulla pagina le views cambiano

nuove views sulla pagina : 250

views sulle prossime chiamate per un tempo indefinito: 100

evidentemente le api hanno una cache che non viene aggiornata in maniera opportuna
Messaggio unito automaticamente:

si.. ovviamente.. ti faccio un esempio:

views sulla pagina di twitch: 100
views sulla chiamata api: 100

sulla pagina le views cambiano

nuove views sulla pagina : 250

views sulle prossime chiamate per un tempo indefinito: 100

evidentemente le api hanno una cache che non viene aggiornata in maniera opportuna


Per la cronaca, spesso anche alla prima chiamata da un valore di views diverso da quello attuale
 
evidentemente le api hanno una cache che non viene aggiornata in maniera opportuna
Credo che forse sia meglio interpellare il reparto tecnico di Twitch per chiedere se effettivamente sia così...
Per fare delle prove con le API occorre avere un client-id che ti viene dato nel momento della registrazione dell'applicazione nella console di Twitch, purtroppo però sei obbligato ad avere un account con autenticazione a due fattori e io non ho voglia di fare un account Twitch solo per fare questo test...
 
A quanto vedo il numero esatto di visualizzazioni in tempo reale viene comunicato tramite websocket presso:
Codice:
wss://pubsub-edge.twitch.tv/v1

Che invia aggiornamenti del tipo:
Codice:
{"type":"MESSAGE","data":{"topic":"video-playback-by-id.160489367","message":"{\"type\":\"viewcount\",\"server_time\":1597926095.357555,\"viewers\":2241}"}}
Quindi una volta che hai ricostruito il protocollo per stabilire la connessione websocket ti bastera' aspettare queste info ed estrarre il valore di "viewers" dal JSON.
 
A quanto vedo il numero esatto di visualizzazioni in tempo reale viene comunicato tramite websocket presso:
Codice:
wss://pubsub-edge.twitch.tv/v1

Che invia aggiornamenti del tipo:
Codice:
{"type":"MESSAGE","data":{"topic":"video-playback-by-id.160489367","message":"{\"type\":\"viewcount\",\"server_time\":1597926095.357555,\"viewers\":2241}"}}
Quindi una volta che hai ricostruito il protocollo per stabilire la connessione websocket ti bastera' aspettare queste info ed estrarre il valore di "viewers" dal JSON.
Potresti darmi il link da dove hai preso queste info?
 
Ultima modifica:
Potresti darmi il link da dove hai preso queste info?

Nessun link, sono andato su twitch in uno stream a caso ed ho visto cosa passava.

PS: a quanto vedo il protocollo consiste in:
-> PING
<- PONG
-> {"type":"LISTEN","nonce":"tVofawX0wlwSp2qUM758bNMYDZRmWY","data":{"topics":["video-playback-by-id.160489367"]}}
....
<- {"type":"MESSAGE","data":{"topic":"video-playback-by-id.160489367","message":"{\"type\":\"viewcount\",\"server_time\":1597926095.357555,\"viewers\":2241}"}}

Quindi prima vede se il servizio e' raggiungibile, dopo si registra per gli aggiornamenti di quel video (id=160489367) e poi mano a mano arrivano gli update, ogni tanto continua a fare PING credo per keep-alive, altrimenti smette di inviare.
Comunque e' da vedere se ci sono cookie/autenticazione a monte della connessione prima di poter usare websocket.

Googlando ho scoperto che e' un API secondaria: ecco la documentazione