为Bing搜索API Common Lisp使用Drakma时出错

为Bing搜索API Common Lisp使用Drakma时出错,lisp,common-lisp,bing-api,drakma,Lisp,Common Lisp,Bing Api,Drakma,我正在构建一个程序,它使用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

我正在构建一个程序,它使用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
           '("bob.hammerston@mailinator.com" "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肯定有错误。我试着用手将域键入web浏览器,它可以工作,因此我认为错误出在Drakma上。

您需要使用
+
而不是
%20
来表示空格

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

您的查询需要多长时间?这里至少还有一些其他问题提到了最大长度。例如,你的搜索词中到底有什么?你的“去掉空格”功能非常脆弱。你应该使用url编码,因为空格不是唯一需要特殊处理的东西。我使用了给出的例子,但尝试了许多不同的例子,确保不使用标点符号。三个或四个单词中的任何一个似乎都不起作用。我将研究url编码,但即使手动输入%20,因为空格似乎不起作用。我觉得自己像个白痴。bing的文档说要使用%20,但这太简单了。谢谢