2016-01-23 58 views
4

我正在構建一個程序,該程序使用Bing的搜索API和通用lisp與Drakma庫來顯示一些結果,但由於某種原因發送較長長度的查詢時發生錯誤它沒有' t顯示任何結果。它適用於較短長度的查詢。我正在爲此問題使用臨時帳戶。我有以下代碼。使用Drakma作爲Bing搜索API常見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")) 

任何想法,爲什麼?

謝謝。

編輯:

我試圖編碼由手工打印冰功能,而不是使用該功能具有較長的字符串,它仍然無法工作,所以必須有與Drakma錯誤。我試着手動輸入域名到網絡瀏覽器,它的工作原理是這樣的,這就是爲什麼我認爲錯誤與Drakma有關。

+0

您的查詢有多長時間?這裏至少還有一些其他問題提到了最大長度。例如,http://stackoverflow.com/questions/15334531/what-are-the-query-length-limits-for-the-bing-websearch-api。 –

+1

您的搜索字詞實際上是什麼?你擺脫空間的功能非常脆弱。你應該對它進行網址編碼,因爲空間不是唯一需要特殊處理的東西。 –

+0

我用給出的例子,但嘗試了許多不同的確保不使用標點符號。三個或四個單詞中的任何一個似乎都不起作用。我會研究網址編碼,但即使手動輸入%20,因爲空格似乎不起作用。 – phlie

回答

5

對於空格,您需要使用+而不是%20

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

好吧,我覺得自己像個白癡。 bing的文檔稱使用%20,但這非常簡單。謝謝。 – phlie