获得;java.io.EOFException:JSON错误;使用clojure twitter api

获得;java.io.EOFException:JSON错误;使用clojure twitter api,clojure,twitter,Clojure,Twitter,我已经编写了一些简单的clojure代码来访问twitter流api。我的代码与twitter api文档中描述的示例代码基本相同: (def ^:dynamic *custom-streaming-callback* (AsyncStreamingCallback. (comp println #(:text %) json/read-json #(str %2)) (comp println response-return-eve

我已经编写了一些简单的clojure代码来访问twitter流api。我的代码与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代码,以了解正在发生的事情,但我认为更多的眼睛将帮助我更快地解决这个问题。

我遇到了与您相同的问题。正如您所发现的,如果在过去三十秒左右没有收到任何数据,流式传输功能将发出一条空消息。 尝试将其读取为json会导致您看到的EOF异常

我不知道有什么办法可以阻止这些电话。在我的例子中,我使用了一个简单的条件来解决这个问题,当没有JSON可读取时,它会返回到一个空映射

(if-not (clojure.string/blank? %)
   (json/read-str % :key-fn keyword)
   {})

在twitterapi的github问题跟踪器上打开一个问题是个好主意。除非作者对此深信不疑并看到这一点,否则不太可能有人知道如何解决这一问题。