使用clojure twitter-api获取“java.io.EOFException:JSON错误”

时间:2012-04-11 22:21:09

标签: clojure twitter

我写了一些简单的clojure代码来访问twitter流API。我的代码与twitter-api docs中描述的示例代码基本相同:

(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进行身份验证(未显示)。当我运行启动过滤方法并且用twitter打开一个连接时,一切都适用于一个咒语,但是如果该流是非活动状态(大约30秒),即没有关于这个特定用户的推文正在下来派克,发生以下错误:

#<EOFException java.io.EOFException: JSON error (end-of-file)>

我从twitter文档中假设,当使用流式连接时,twitter会无限期地保持流的开放。我必须做出一些不正确的假设。我正在深入讨论clojure twitter-api代码,看看发生了什么,但我认为更多的眼睛会帮助我更快地解决这个问题。

1 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。如您所见,如果在最后30秒左右没有收到数据,则流功能会发出空消息。 尝试将其读作json然后会导致您看到的EOF异常。

我不知道有什么方法可以阻止这些电话。在我的情况下,我使用一个简单的条件解决了这个问题,当没有JSON要读取时,该条件会回到空映射。

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