使用 clojure Twitter API 获取"java.io.EOFException: JSON error"



我写了一些简单的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 进行身份验证(未显示)。当我运行启动过滤方法并使用 Twitter 打开连接时,一切都适用于咒语,但如果流处于非活动状态一段时间(大约 30 秒),即没有关于此特定用户的推文从 pike 下来,会发生以下错误:

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

我从推特文档中假设,当使用流媒体连接时,Twitter 会无限期地保持流打开状态。我一定做出了一些不正确的假设。我目前正在深入研究 clojure twitter-api 代码以了解发生了什么,但我认为更多的眼睛会帮助我更快地解决这个问题。

我遇到了和你一样的问题。如您所发现的,如果在过去三十秒左右未收到任何数据,则流式处理函数将发出空消息。尝试将其读取为 json 会导致您看到的 EOF 异常。

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

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

最新更新