Ошибка при использовании Drakma для API поиска Bing 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
           '("[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.


person phlie    schedule 23.01.2016    source источник
comment
Как долго ваши запросы? По крайней мере, в некоторых других вопросах здесь упоминается максимальная длина. Например, stackoverflow.com/questions/15334531/.   -  person Joshua Taylor    schedule 24.01.2016
comment
И что на самом деле в вашем поисковом запросе? Ваша функция избавления от пробелов очень хрупкая. Вы должны кодировать его URL-адрес, потому что пробелы — не единственное, что требует специальной обработки.   -  person Joshua Taylor    schedule 24.01.2016
comment
Я использовал приведенные примеры, но пробовал много разных, стараясь не использовать знаки препинания. Любое из трех или четырех слов, кажется, не работает. Я посмотрю на кодировку URL, но даже вручную ввести ее с% 20, так как пробелы, похоже, не работают.   -  person phlie    schedule 24.01.2016


Ответы (1)


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

(defun get-rid-of-spaces (var)
 (cl-ppcre:regex-replace-all " " var "+"))
person jkiiski    schedule 24.01.2016
comment
Ну, я чувствую себя идиотом. В документации для bing сказано, что нужно использовать %20, но это так просто. Спасибо. - person phlie; 24.01.2016