Sea*_*red 18 emacs json elisp stackexchange-api
我正处于编写Emacs主要模式的早期阶段,用于浏览和贡献Stack Exchange网络上的网站,其方式dired和list-packages工作方式大致相同,并且有一些灵感来自magit和org-mode.
问题是,当然,我不知道如何首先将Emacs与SE API(v2.1)连接起来.我从来没有做过任何涉及Elisp内部网络连接的事情,虽然我对语言本身很满意(并且已经考虑了很多package.el).
我从未使用过JSON,尽管我正处于W3C教程的中间.
一个简单的"你好世界"就足够了,可能就是这样
(execute-json-query "/info")
Run Code Online (Sandbox Code Playgroud)
W3C教程似乎也不会过度请求.我将不得不对此进行自己的研究.
我真的不知道自己在做什么; 我昨天下午才开始疯狂地工作.
tkf*_*tkf 26
其他答案的问题是Stack Exchange API是GZIP并且Emacs附带的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)))))
Run Code Online (Sandbox Code Playgroud)
request.el有很好的文档,带有可执行的示例,经过了充分的测试.
这可能不是最好的做事方式,但它似乎对我有用.
(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)))
Run Code Online (Sandbox Code Playgroud)
然后使用url调用此函数将返回响应的内容,在本例中为json.我使用reddit api作为例子,因为我不确定Stack Exchange api是如何工作的.
(fetch-json "http://reddit.com/r/emacs.json")
Run Code Online (Sandbox Code Playgroud)
这里包含的错误检查几乎没有,如果url没有返回任何数据,那么这将会爆炸.
| 归档时间: |
|
| 查看次数: |
5166 次 |
| 最近记录: |