2012-04-11 16 views
5

TwitterのストリーミングAPIにアクセスする簡単なクロージャーコードを記述しました。私のコードは、本質的にさえずり、APIドキュメントで説明した例のコードと同じです。私は、特定のユーザに関するツイートに従い、認証のためのOAuthを使用していclojure twitter-apiを使用して「java.io.EOFException:JSON error」を取得する

(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*)) 

(図示せず)。私が開始フィルタリングの方法を実行し、接続がtwitterで開かれているときは、すべてがうまくいくが、ストリームが少し(30秒程度)非アクティブな場合、つまり、この特定のユーザーについてのつぶやきは、次のエラーが発生します。

ストリーミング接続を使用する場合、twitterはストリームを無期限に開いたままにしておくことをtwitter docsから想定しました。私は間違った仮定をしているに違いない。私は現在、何が起こっているのかを見るためにclojure twitter-apiコードをダイビングしていますが、私はもっと多くの目がこれをより迅速に把握するのに役立つだろうと考えました。

+0

twitter-apiのgithub issue trackerで問題を開くことをお勧めします。著者がSOに入ってこれを見ていない限り、誰にもこれを修正する方法は分からないでしょう。 – Rayne

答えて

3

私はあなたと同じ問題がありました。あなたが見つけたように、最後の30秒間にデータが受信されなかった場合、ストリーミング機能は空のメッセージを出します。 これをjsonとして読み取ろうとすると、表示されるEOF例外が発生します。

私はこれらの呼び出しを防ぐ方法がわかりません。私の場合は、単純な条件付きで問題を解決しました。これは、読み込むJSONがないときに空のマップに戻ってしまいます。

(if-not (clojure.string/blank? %) 
    (json/read-str % :key-fn keyword) 
    {}) 
関連する問題