21

私は、Stack Exchange ネットワーク上のサイトをブラウジングして貢献するための Emacs メジャー モードを作成する初期段階diredlist-packagesます。magitorg-mode

問題は、もちろん、そもそも Emacs と SE API (v2.1) をどのように接続するのか見当がつかないことです私は Elisp 内でネットワーク接続を伴うことをしたことがありませんが、言語自体には慣れています (そして を何度も調べましたpackage.el)。

JSON を扱ったことはありませんが、W3C のチュートリアルの途中です。

おそらく次のような単純な「hello world」で十分です。

(execute-json-query "/info")

W3C のチュートリアルも、リクエストについて詳しく説明していないようです。私はそれについて私自身の研究をしなければなりません。
自分が何をしているのかまったくわかりません。昨日の午後、熱狂的にこの作業を始めたばかりです。

4

3 に答える 3

27

他の回答の問題は、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)))))

request.el は十分に文書化されており、実行可能な例が付属しており、十分にテストされています。

于 2013-02-27T18:33:22.187 に答える
11

GitHubの REST クライアントをご覧ください。これは、HTTP REST Web サービスを手動で探索およびテストするためのツールです。

于 2013-02-27T17:58:46.617 に答える
8

これは最善の方法ではないかもしれませんが、私にとってはうまくいくようです。

(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) が返されます。Stack Exchange API の仕組みがよくわからないので、例として reddit API を使用しました。

 (fetch-json "http://reddit.com/r/emacs.json")

ここにはほとんどエラー チェックが含まれていません。URL がデータを返さない場合、エラーが発生します。

于 2013-02-27T18:22:13.280 に答える