Câu hỏi cũ, vâng ... Nhưng trong trường hợp bất cứ ai cũng làm điều này; một tùy chọn khác là sử dụng Org Babel và ob-http
... (Có thể được cài đặt từ melpa .)
Với org-babel
, bạn có thể tạo một .org
tệp chứa http
các khối mã "". Khi các khối này được ước tính, chúng sẽ thực hiện yêu cầu HTTP và trả về kết quả là kết quả.
Nếu các khối này có #+NAME:
thuộc tính "", bạn có thể sử dụng kết quả của chúng trong bất kỳ org-babel
khối nào khác . Điều này cho phép một số chương trình biết chữ khá gọn gàng bằng cách sử dụng kết quả của các yêu cầu HTTP.
Ví dụ, đây là một tài liệu Org nhỏ thể hiện yêu cầu HTTP và phân tích cú pháp JSON được trả về trong Ruby:
* The request
The following is the example request shown on [[https://github.com/zweifisch/ob-http][ob-http's Github page]]...
It isn't anything fancy, but it is a REST API request, and returns
JSON, so it works for the sake of this demonstration:
#+NAME:ob-languages
#+BEGIN_SRC http :pretty
GET https://api.github.com/repos/zweifisch/ob-http/languages
#+END_SRC
#+RESULTS:
: {
: "Emacs Lisp": 7034
: }
Notice how this has a "=#+NAME:=" attribute? This is a name we can use
in other =org-babel= blocks. (As you will see below)
* Using the request
Now that I have an =http= request in an org block with a name... Lets
write something in a completely different language and use our HTTP
request's response:
#+BEGIN_SRC ruby :var langs=ob-languages
require 'json'
JSON.parse(langs)['Emacs Lisp']
#+END_SRC
#+RESULTS:
: 7034
The =:var= keyword allowed me to assign the "=langs=" variable in the
Ruby block to the result of the =ob-languages= block [[The request][above]].
This didn't have to be in Ruby, this could have been any language,
including another =http= block.
Đây là những gì nó trông giống như trong org-mode
:
Đánh C-c C-c
vào khối dưới cùng (The Ruby one) sẽ tự động đánh giá khối trên cùng cho sự phụ thuộc của nó (Đó là :var
bit trong tiêu đề của khối.). Điều này có nghĩa là http
yêu cầu được đưa ra trước, và sau đó kết quả được chuyển đến Ruby để xử lý thêm.
Bạn có thể làm điều này với bao nhiêu khối tùy thích và với nhiều ngôn ngữ.
Nếu điều này phù hợp với nhu cầu của bạn, ob-http
đòi hỏi một chút tinh chỉnh thủ công sau khi bạn cài đặt nó để nó hoạt động. (Đừng lo lắng, nó không nhiều lắm)
Sau khi cài đặt ob-http
, bạn cần tùy chỉnh hai biến: org-src-lang-modes
và org-babel-load-languages
.
Vì vậy, bằng cách chạy M-x customize-variable
, bạn có thể tùy chỉnh từng cái để bao gồm:
org-src-lang-modes
: Bạn sẽ muốn tùy chỉnh biến này để bao gồm thêm một ánh xạ ngôn ngữ, vì vậy bạn có thể chèn thêm một giá trị vào cuối danh sách:
String: http
Symbol: ob-http
Sau đó, bạn có thể C-x C-s
lưu tùy chỉnh đó.
org-babel-load-languages
: Bạn sẽ muốn thêm một mục vào danh sách các org
ngôn ngữ được kích hoạt . " http
".
Mặc dù, bạn có thể cần thêm nó vào danh sách theo cách thủ công nếu tùy chọn không có trong các tùy chọn có thể, bạn có thể làm điều đó bằng cách nhấp vào "Trạng thái" và chọn " :
" để hiển thị biểu thức Lisp ... Sau đó, bạn sẽ thêm vào sau đây trước dấu ngoặc đơn đóng cuối cùng:
(http . t)
Sau đó, nhanh chóng C-x C-s
và M-x org-reload
nên là tất cả những gì bạn cần ..!