2013-07-01 32 views
0

我有以下Emacs Lisp,它構建了一個查詢到Freebase。如果我複製並粘貼它生成的URL到我的瀏覽器一個命令行curl我得到的結果我希望:從emacs查詢freebase api

捲曲-X GET https://www.googleapis.com/freebase/v1/search?query=Oil%20on%20Canvas&filter=(any%20type%3avisual_art%2fvisual_art_medium) ... 這個工程

,但我不能讓它在Emacs工作:

(require 'url) 
(defvar fb-url "https://www.googleapis.com/freebase/v1/search") 

(defvar materials-type "(any type:visual_art/visual_art_medium)") 

(defun fbquery (type str) 
    (let ((url-request-method "GET") 


     (url-request-data (concat "?query=" (url-hexify-string str) 
            "&filter=" (url-hexify-string type)))) 
    (url-retrieve (concat fb-url) 
        (lambda (status) (switch-to-buffer (current-buffer)))))) 

(setq url-debug t) 

(fbquery materials-type "Oil on Canvas") 

我回去:

HTTP/1.0 400 Bad Request ... Your client has issued a malformed or illegal request. That's all we know.

你能幫忙嗎?

回答

1

好像這個問題是關係到可變url-request-data

下面的代碼旅遊解說對我的作品

(defun fbquery (type str) 
    (let ((url-request-method "GET") 
     (foo (concat "?query=" (url-hexify-string str) 
        "&filter=" (url-hexify-string type)))) 
    (url-retrieve (concat fb-url foo) 
        (lambda (status) (switch-to-buffer (current-buffer)))))) 

請注意,我改名變量(避免錯誤)和CONCAT-ED它到url

+0

謝謝!我以爲我嘗試了一切,但我猜不是這個組合! –