gpt4 book ai didi

api - 使用 Clojure 发出多个 API 请求的功能方法

转载 作者:行者123 更新时间:2023-12-01 15:18:44 25 4
gpt4 key购买 nike

我正在开发一个 Clojure 应用程序,它将与 Web API 交互以返回满足特定条件的随机结果。由于 API 的限制,我必须检索大量结果并使用 Clojure 筛选出合适的结果。

我会说 99% 或更多的时间,第一个请求的至少一个结果将符合我的标准。但是由于那 1%,我觉得我必须构建功能来发出多个请求。显然,第二个请求成功的可能性非常大,但我对编写一个无限循环直到它获得正确结果的函数持怀疑态度,以防万一出现问题并最终对 API 进行 DDoSing。

我的第一个想法是在该函数中构建一个计数器并将其限制为,比如说,五个请求。但作为一种方法,这感觉有点程序性。解决这个问题的惯用 Clojure 方法是什么?

这是我目前所拥有的:

(ns randchar.api
(:require [clj-http.client :as client]))

(defn api-request
[url]
(get-in
(client/request
{:url url
:method :get
:content-type :json
:as :json}) [:body :results]))

(defn filter-results
"Returns the first result that meets the criterion."
[results criterion]
(take 1
(filter #(= (get-in % [:nested :sub-nested]) criterion) results)))

(defn build-url
"Returns a url with randomized query string for the api request; not shown."
[]
)

(defn return-result
"Currently recurs endlessly if no results meet the criterion."
[criterion]
(let [x (filter-results (api-request (build-url)) criterion)]
(if (not (empty? x))
x
(recur))))

最佳答案

你可以试试这样的:

(defn return-result
[criterion count]
(->> (repeatedly count #(filter-results (api-request build-url) criterion))
(filter (complement empty?))
first))

关于api - 使用 Clojure 发出多个 API 请求的功能方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18611719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com