如何在clojure中使用twitter api获取流式推文?

如何在clojure中使用twitter api获取流式推文?,twitter,clojure,Twitter,Clojure,我对clojure不熟悉。我正试图通过clojure获得推特流。我正在使用TwitterAPI库获取流式推文,代码片段如下 (ns hello-twitter (:use [twitter.oauth] [twitter.callbacks] [twitter.callbacks.handlers] [twitter.api.streaming]) (:require [clojure.data.json :as json] [http.async.c

我对clojure不熟悉。我正试图通过clojure获得推特流。我正在使用TwitterAPI库获取流式推文,代码片段如下

(ns hello-twitter
  (:use
   [twitter.oauth]
   [twitter.callbacks]
   [twitter.callbacks.handlers]
   [twitter.api.streaming])
  (:require
   [clojure.data.json :as json]
   [http.async.client :as ac])
  (:import
   (twitter.callbacks.protocols AsyncStreamingCallback)))

(def my-creds (make-oauth-creds "app consumer key"
                                "app consumer secret"
                                "user-access-token"
                                "user-access-token-secret"))

(def ^:dynamic
  *custom-streaming-callback*
     (AsyncStreamingCallback. (comp println #(:text %) json/read-json #(str %2))
                      (comp println response-return-everything)
                  exception-print))

(statuses-filter :params {:track "Cricket"}
         :oauth-creds my-creds
         :callbacks *custom-streaming-callback*)
返回的json中的:body部分应该不断更新。我得到的价值是:身体就像
,我不知道如何获得tweet

如何建立不间断连接以将流式推文作为输出?

此值是一个值。不再在通过web发送请求时阻塞线程,而是创建了一个承诺并返回给您,以便您的程序可以继续执行。稍后需要使用
deref
@
解除对承诺的引用,以获取值

从链接文档复制的示例:

;; Create a promise
user> (def p (promise))
#'user/p ; p is our promise

;; Check if was delivered/realized
user> (realized? p)
false ; No yet

;; Delivering the promise
user> (deliver p 42)
#<core$promise$reify__5727@47122d: 42>

;; Check again if it was delivered
user> (realized? p)
true ; Yes!

;; Deref to see what has been delivered
user> @p
42

;; Note that @ is shorthand for deref
user> (deref p)
42
;;做出承诺
用户>(def p(承诺))
#'用户/p;p是我们的承诺
;; 检查是否已交付/实现
用户>(已实现?p)
虚假的;还没有
;; 兑现诺言
用户>(第42页)
#
;; 再次检查是否已交付
用户>(已实现?p)
是的;对
;; 查看已交付的内容
用户>@p
42
;; 注意,@是deref的简写
用户>(德里夫p)
42

承诺被退回。我不能仅仅通过取消承诺来获得推特。那么,如何兑现承诺,以便我可以获得流媒体推特?对不起,我现在明白了。我想,如果这是一条无限流,那么承诺永远不会有最终交付的价值。也许您需要在解除引用的承诺上使用
doseq
,以便在每次tweet发生时执行副作用?