我写了一些简单的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*))
Run Code Online (Sandbox Code Playgroud)
我正在关注特定用户的推文并使用oauth进行身份验证(未显示).当我运行启动过滤方法并且使用Twitter打开连接时,一切都适用于一个咒语,但是如果该流是非活动状态(大约30秒),即没有关于该特定用户的推文正在下来,发生以下错误:
#<EOFException java.io.EOFException: JSON error (end-of-file)>
Run Code Online (Sandbox Code Playgroud)
我从twitter文档中假设,当使用流式连接时,twitter会无限期地保持流的开放.我必须做出一些不正确的假设.我正在深入讨论clojure twitter-api代码,看看发生了什么,但我认为更多的眼睛会帮助我更快地解决这个问题.
我和你有同样的问题。正如您所发现的,如果在过去三十秒左右没有接收到数据,则流函数会发出一条空消息。尝试将其读取为 json 会导致您看到的 EOF 异常。
我不知道有什么方法可以阻止这些电话。就我而言,我使用一个简单的条件解决了这个问题,当没有 JSON 可供读取时,该条件会回退到空映射。
(if-not (clojure.string/blank? %)
(json/read-str % :key-fn keyword)
{})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
969 次 |
| 最近记录: |