【问题标题】:Error Using Drakma for the Bing Search API Common Lisp将 Drakma 用于 Bing 搜索 API Common Lisp 时出错
【发布时间】:2016-04-30 09:17:08
【问题描述】:

我正在构建一个程序,它使用 Bing 的搜索 API 和带有 Drakma 库的通用 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 一定有错误。我尝试在网络浏览器中手动输入域,它可以正常工作,这就是为什么我认为 Drakma 有错误。

【问题讨论】:

  • 您的查询需要多长时间?这里至少有一些其他问题提到了最大长度。例如,stackoverflow.com/questions/15334531/….
  • 您的搜索词实际上是什么?你的摆脱空格功能很脆弱。你应该对它进行 url 编码,因为空格不是唯一需要特殊处理的东西。
  • 我使用了给出的示例,但尝试了许多不同的示例,确保不使用标点符号。三四个字中的任何一个似乎都不起作用。我将研究 url 编码,但即使使用 %20 手动输入它,因为空格似乎不起作用。

标签: lisp common-lisp bing-api drakma


【解决方案1】:

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

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

【讨论】:

  • 好吧,我觉得自己像个白痴。 bing 的文档说使用 %20 但这很简单。谢谢。
猜你喜欢
  • 1970-01-01
  • 2018-09-30
  • 1970-01-01
  • 1970-01-01
  • 2013-07-13
  • 1970-01-01
  • 1970-01-01
  • 2013-03-14
  • 2014-11-04
相关资源
最近更新 更多