Старе питання, так ... Але на випадок, якщо хтось гугл це; інший варіант - використання Org Babel і ob-http
... (Можна встановити з melpa .)
"" org-babel
Ви можете створити .org
файл, що містить " http
" кодові блоки. Коли ці блоки будуть оцінені, вони зроблять HTTP-запит і повернуть відповідь як результат.
Якщо ці блоки мають #+NAME:
атрибут " ", ви можете використовувати їх результати в будь-якому іншому org-babel
блоці. Це дозволяє отримати досить акуратне грамотне програмування, використовуючи результати HTTP-запитів.
Наприклад, ось невеликий документ Org, який демонструє запит HTTP та аналізує повернений JSON в 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.
Ось як це виглядає в org-mode
:
При натисканні C-c C-c
на нижній блок (Ruby) автоматично буде оцінено верхній на предмет залежності (Це :var
біт у заголовку блоку.). Це буде означати, що http
запит робиться спочатку, а потім результати передаються Ruby для подальшої обробки.
Ви можете зробити це з якомога більше блоків і з якоюсь кількістю мов.
Якщо це відповідає вашим потребам, ob-http
потрібно трохи встановити ручне налаштування після встановлення, щоб він працював. (Не хвилюйтеся, це не так вже й багато)
Після встановлення ob-http
вам потрібно налаштувати дві змінні:, org-src-lang-modes
і org-babel-load-languages
.
Отже, запустивши M-x customize-variable
, ви можете налаштувати кожну, щоб вона включала в себе наступне:
org-src-lang-modes
: Ви хочете налаштувати цю змінну, щоб вона включала ще одне відображення мови, щоб ви могли вставити ще одне значення до кінця списку:
String: http
Symbol: ob-http
Тоді ви можете C-x C-s
зберегти це налаштування.
org-babel-load-languages
: Ви хочете додати ще один елемент до списку включених org
мов. " http
".
Хоча вам може знадобитися додати його до списку вручну, якщо параметр не є можливими параметрами, ви можете зробити це, натиснувши "Стан" та вибравши " :
", щоб показати вираз Lisp ... Тоді ви додали б лише наступне перед останніми дужками, що закриваються:
(http . t)
Після цього швидкий C-x C-s
і M-x org-reload
має бути все, що вам потрібно ..!