我正处于编写Emacs major mode的早期阶段,用于浏览和为Stack Exchange网络上的网站做出贡献,与dired
和list-packages
的工作方式非常相似来自magit
和org-mode
的灵感很少。
问题是,当然,我首先要知道如何将Emacs与SE API(v2.1)连接起来 。我从来没有做过任何涉及Elisp内部网络连接的事情,虽然我对语言本身很满意(并且已经对package.el
进行了多次研究)。
我从未使用过JSON,虽然我正处于W3C's tutorial的中间位置。
一个简单的“你好世界”就足够了,可能是
(execute-json-query "/info")
W3C教程似乎也不会过度请求。我将不得不对此进行自己的研究 我真的不知道自己在做什么;我昨天下午刚刚开始疯狂地工作。
答案 0 :(得分:26)
其他答案的问题是Emacs附带的Stack Exchange API is GZIP'd和url.el不会自动解压缩它。
看一下支持自动解压缩的request.el库(说实话,我刚刚添加了支持)。下面是一个在stackoverflow中获取最活跃问题的示例:
(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为well documented,附带executable examples且为well tested。
答案 1 :(得分:11)
查看REST Client on GitHub - 手动浏览和测试HTTP REST网络服务的工具。
答案 2 :(得分:7)
这可能不是最好的做事方式,但似乎对我有用。
(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作为例子,因为我不确定Stack Exchange api是如何工作的。
(fetch-json "http://reddit.com/r/emacs.json")
这里几乎没有错误检查,如果网址没有返回任何数据,那么这将会爆炸。