Ho scritto qualche semplice codice clojure che accede al twitter streaming api. Mio codice è sostanzialmente lo stesso del codice di esempio descritto nei documenti twitter-api:Ottenere "java.io.EOFException: errore JSON" utilizzando il clojure twitter-api
(def ^:dynamic *custom-streaming-callback*
(AsyncStreamingCallback. (comp println #(:text %) json/read-json #(str %2))
(comp println response-return-everything)
exception-print))
(defn start-filtering []
(statuses-filter :params {:follow 12345}
:oauth-creds *creds*
:callbacks *custom-streaming-callback*))
Sto seguendo tweets su un utente specifico e utilizzando OAuth per l'autenticazione (non mostrato). Quando eseguo il metodo di filtro iniziale e una connessione viene aperta con twitter, tutto funziona bene per una magia, ma se il flusso è inattivo per un po '(circa 30 secondi), cioè nessun tweet su questo particolare utente sta scendendo dal luccio, verifica il seguente errore:
#<EOFException java.io.EOFException: JSON error (end-of-file)>
ho assunto dalla documentazione di Twitter che quando si utilizza una connessione in streaming, twitter mantiene il flusso aperto a tempo indeterminato. Devo fare alcune ipotesi errate. Attualmente mi sto immergendo nel codice clojure twitter-api per vedere cosa sta succedendo, ma ho pensato che più occhi mi avrebbero aiutato a capirlo più velocemente.
Sarebbe una buona idea aprire un problema sul tracker di github di twitter-api. A meno che l'autore non si metta in SO e lo veda, è improbabile che qualcuno sappia come risolvere questo problema. – Rayne