Ошибка использования Drakma для Bing Search API Common Lisp

Я создаю программу, которая использует API поиска Bing и общий lisp с библиотекой Drakma для отображения некоторых результатов, но по какой-то причине возникает ошибка при отправке более длинного запроса. Он вообще не отображает никаких результатов. Это работает для более коротких запросов. Я использую временную учетную запись для этого вопроса. У меня есть следующий код.

(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. Я попытался ввести домен в веб-браузер вручную, и он работает, поэтому я думаю, что ошибка с Дракмой.

1 ответ

Решение

Вам нужно использовать + вместо %20 для пробелов.

(defun get-rid-of-spaces (var)
 (cl-ppcre:regex-replace-all " " var "+"))
Другие вопросы по тегам