如何在clojure中使用twitter api获取流式推文?
我对clojure不熟悉。我正试图通过clojure获得推特流。我正在使用TwitterAPI库获取流式推文,代码片段如下如何在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
(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发生时执行副作用?