我正在构建一个程序,它使用Bing的搜索API和带有Drakma库的common lisp来显示一些结果,但是由于某些原因,当发送一个较长的查询时出错,它根本不显示任何结果它适用于较短长度的查询我用临时帐户来回答这个问题。我有以下代码。

(defun get-rid-of-spaces (var)
 (cl-ppcre:regex-replace-all " " var "%20"))


(defun print-bing (search-term)
  (format nil "https://api.datamarket.azure.com/Bing/Search/v1/Web?Query=%27~a%27&Options=%27DisableLocationDetection%27&$format=json&$top=1" (get-rid-of-spaces search-term)))

(defun drakma-bing (search-term)
 (drakma:http-request (print-bing search-term)
           :basic-authorization
           '("[email protected]" "L2gbaj+s1/KW/+ifAa9HrP0C1/kClpF4InH48Lw8UNc")))

(defun convert-to-string (response)
 (map 'string #'code-char response))

然后我称之为这个,但它只适用于简短的搜索词,我不知道为什么这不起作用:
(convert-to-string (drakma-bing "what is the largest man in the world"))

但这是真的
(convert-to-string (drakma-bing "what is"))

知道为什么吗?
谢谢。
编辑:
我试着用手工编码print bing函数,而不是用较长的字符串来编码,但仍然不起作用,所以Drakma肯定有错误我试着用手在网络浏览器中输入域名,结果成功了,所以我认为这是Drakma的错误所在。

最佳答案

您需要使用+而不是%20作为空格。

(defun get-rid-of-spaces (var)
 (cl-ppcre:regex-replace-all " " var "+"))

07-26 03:09