我在写作的初期Emacs的主要模式进行浏览和促进堆栈交换网络上的网站,在大致相同的方式dired
和list-packages
工程,从几灵感magit
和org-mode
。
问题是,当然,我不知道我将如何对接的Emacs在首位的SE API(V2.1)。 我从来没有做过任何涉及内elisp的网络连接,虽然我很舒服的语言本身(并已采取以上几个看起来更在package.el
)。
我从来没有使用JSON的工作,虽然我在中间是W3C的教程就可以了。
一个简单的“世界你好”就足够了,可能沿着线
(execute-json-query "/info")
W3C的教程似乎并没有走过去请求,无论是。 我会做我自己上的研究。
我真的没有任何想法,我在做什么; 我刚刚开始疯狂地在这个昨天下午的工作。
与其他的答案的问题是, 协议栈交易所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是有据可查的 ,配备了可执行示例 ,并且很好的测试 。
看看REST客户在GitHub上 -手动探索的工具和测试HTTP REST Web服务。
这可能不是做事情的最好方法,但它似乎为我工作。
(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没有返回数据,那么这将炸毁。