我正处于编写Emacs主要模式的早期阶段,用于浏览和贡献Stack Exchange网络上的站点,其工作方式与dired
和list-packages
大致相同,并从magit
和org-mode
获得了一些灵感。
package.el
进行了多次研究)。
我从来没有使用过JSON,尽管我正在学习W3C的教程。
一个简单的'hello world'就足够了,可能沿着
的行(execute-json-query "/info")
W3C教程似乎也没有详细介绍请求。我得自己研究一下。
我真的不知道我在做什么;我昨天下午才开始狂热地做这件事。
其他答案的问题是Stack Exchange API是GZIP和url。Emacs附带的el不会自动解压缩它。
看看我的请求。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)))))
请求。El有很好的文档,附带了可执行的示例,并且经过了很好的测试。
看一下GitHub上的REST Client -一个手动探索和测试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 "nn")
(delete-region (point-min) (point))
(buffer-string)))
然后用url调用此函数将返回响应的内容,在本例中为json。我使用了reddit api作为一个例子,因为我不确定Stack Exchange api是如何工作的。
(fetch-json "http://reddit.com/r/emacs.json")
这里几乎没有错误检查,如果url没有返回任何数据,那么这将爆炸