在Emacs使JSON请求(Making JSON requests within Emacs)

2019-07-20 16:28发布

我在写作的初期Emacs的主要模式进行浏览和促进堆栈交换网络上的网站,在大致相同的方式diredlist-packages工程,从几灵感magitorg-mode

问题是,当然,我不知道我将如何对接的Emacs在首位的SE API(V2.1)。 我从来没有做过任何涉及内elisp的网络连接,虽然我很舒服的语言本身(并已采取以上几个看起来更在package.el )。

我从来没有使用JSON的工作,虽然我在中间是W3C的教程就可以了。

一个简单的“世界你好”就足够了,可能沿着线

(execute-json-query "/info")

W3C的教程似乎并没有走过去请求,无论是。 我会做我自己上的研究。
我真的没有任何想法,我在做什么; 我刚刚开始疯狂地在这个昨天下午的工作。

Answer 1:

与其他的答案的问题是, 协议栈交易所API是gzip压缩和使用Emacs运不会自动解压缩url.el。

看看我的request.el支持自动减压库(说实话,我刚添加的支持)。 这里是获取计算器中最活跃的问题的例子:

(request
 "https://api.stackexchange.com/2.1/questions"
 :params '((order . "desc")
           (sort . "activity")
           (site . "stackoverflow"))
 :parser 'json-read
 :success (function*
           (lambda (&key data &allow-other-keys)
             (let* ((item (elt (assoc-default 'items data) 0))
                    (title (assoc-default 'title item))
                    (tags (assoc-default 'tags item)))
               (message "%s %S" title tags)))))

request.el是有据可查的 ,配备了可执行示例 ,并且很好的测试 。



Answer 2:

看看REST客户在GitHub上 -手动探索的工具和测试HTTP REST Web服务。



Answer 3:

这可能不是做事情的最好方法,但它似乎为我工作。

(defun fetch-json (url)
   (with-current-buffer (url-retrieve-synchronously url)
     ; there's probably a better way of stripping the headers
     (search-forward "\n\n")
     (delete-region (point-min) (point))
     (buffer-string)))

然后调用带有URL该函数将返回响应的内容,在这种情况下,JSON。 我已经使用了reddit的API作为一个例子,因为我不知道堆栈交易所API是如何工作的。

 (fetch-json "http://reddit.com/r/emacs.json")

有相当多没有错误检查包括在这里,如果URL没有返回数据,那么这将炸毁。



文章来源: Making JSON requests within Emacs