Twitter ストリーミング API にアクセスする簡単な 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*))
特定のユーザーに関するツイートをフォローし、認証に oauth を使用しています (表示されていません)。start-filtering メソッドを実行し、Twitter との接続が開かれると、すべてがうまく機能しますが、ストリームが少しの間 (約 30 秒間) 非アクティブである場合、つまり、この特定のユーザーに関するツイートがまったくない場合、次のエラーが発生します。
#<EOFException java.io.EOFException: JSON error (end-of-file)>
Twitter のドキュメントから、ストリーミング接続を使用している場合、Twitter はストリームを無期限に開いたままにしておくと想定しました。私はいくつかの間違った仮定をしているに違いありません。私は現在、何が起こっているのかを確認するために clojure の twitter-api コードに飛び込んでいますが、より多くの目があれば、これをより迅速に理解するのに役立つと思いました。