在Emacs中创建JSON请求

wvt8vs2t  于 2023-10-21  发布在  Mac
关注(0)|答案(3)|浏览(123)

我正处于编写Emacs major mode的早期阶段,用于浏览和贡献Stack Exchange网络上的站点,与diredlist-packages的工作方式大致相同,其中有一些灵感来自magitorg-mode
问题是,当然,我不知道如何将Emacs与SE API(v2.1)连接在一起。我从来没有在Elisp中做过任何涉及网络连接的事情,尽管我对语言本身很满意(并且对package.el进行了多次研究)。
我从来没有使用过JSON,尽管我正在研究W3C's tutorial
一个简单的“hello world”就足够了,可能沿着

(execute-json-query "/info")

W3C教程似乎也没有讨论请求。我得自己去调查一下。
我真的不知道我在做什么我昨天下午才开始狂热地工作。

ygya80vv

ygya80vv1#

其他答案的问题是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,附带可执行示例,并且是well tested

hk8txs48

hk8txs482#

看看REST Client on GitHub-一个手动探索和测试HTTP REST Web服务的工具。

ctehm74n

ctehm74n3#

这可能不是最好的方法,但它似乎对我有用。

(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")

这里几乎没有包含错误检查,如果url没有返回数据,那么这将爆炸。

相关问题