Automatyczne dodawanie wpisów Instytutu Misesa do Calibre
Instytut Misesa publikuje sporą część tekstów wraz z wersjami na czytniki e-książek, ale nie oznacza tych wersyj w odpowiedni sposób, a do tego pakuje je w pliki RAR. Mimo to można zautomatyzować ich pobieranie i dodawanie do własnej biblioteki. Poniżej znajdują się:
- Skrypt Fisha pobierający wybrany wpis ze strony Instytutu Misesa i dodający go do biblioteki Calibre.
- Korzystający z powyższego kawałek kodu w Emacs Lispie, dzięki któremu wpisy Instytutu Misesa pobierane przez elfeed będą (o ile posiadają wersje czytnikowe) automatycznie oznaczane jako przeczytane i dodawane do biblioteki Calibre.
Skrypt do dodawania wpisów do biblioteki
Format e-książek można ustawić za pomocą zmiennej środowiskowej MISES_EBOOK_FORMAT
(MOBI
lub EPUB
, domyślnie MOBI
). Skrypt należy zapisać pod nazwą mises_calibre_fetch
i umieścić z prawami do wykonywania gdzieś w $PATH
. Do działania wymagane są curl
oraz unar
.
#!/usr/bin/env fish
if not count $MISES_EBOOK_FORMAT
set MISES_EBOOK_FORMAT MOBI
end
set html_dest_path /tmp/(head -n 10 /dev/urandom | sha256sum | sed 's/ .*//')
set rar_dest_path /tmp/(head -n 10 /dev/urandom | sha256sum | sed 's/ .*//')
set unrar_dir /tmp/(head -n 10 /dev/urandom | sha256sum | sed 's/ .*//')
if curl -o $html_dest_path $argv[1]
if grep $MISES_EBOOK_FORMAT $html_dest_path
set rar_url (grep $MISES_EBOOK_FORMAT $html_dest_path | sed "s/.*href=\"\([^\"]*\)\"[^>]*>$MISES_EBOOK_FORMAT<.*/\1/")
curl -o $rar_dest_path $rar_url
unar -o $unrar_dir $rar_dest_path
find $unrar_dir -type f -print0 | xargs -0 calibre --detach
else
echo "$MISES_EBOOK_FORMAT version not found on $argv[1]."
exit 1
end
else
echo "Could not fetch HTML from $argv[1]."
exit 1
end
Dodawanie do biblioteki wpisów pobranych w elfeed
Poniższy kawałek kodu należy umieścić gdzieś w plikach inicjalizacyjnych Emacsa, przy czym odpowiedni plik musi mieć włączone leksykalne wiązanie zmiennych:
;; -*- lexical-binding: t -*-
(defun elfeed-entry-fetch-mises-ebook (entry)
(if (string-match "://mises.pl/" (elfeed-feed-url (elfeed-entry-feed entry)))
(let* ((url (elfeed-entry-link entry))
(fetch-proc (start-process "Calibre fetch" "*calibre-fetch*" "mises_calibre_fetch" url)))
(set-process-sentinel
fetch-proc
(lambda (proc event)
(unless (process-live-p proc)
(if (eq (process-exit-status proc) 0)
(progn
(elfeed-untag entry 'unread)
(elfeed-search-update-entry entry)))))))))
(add-hook 'elfeed-new-entry-hook 'elfeed-entry-fetch-mises-ebook)
Jeśli nie chcesz automatycznie dodawać do biblioteki każdego wpisu, tylko każdorazowo o tym decydować, zastąp ostatnią linijkę przez:
(defun elfeed-search-fetch-mises-ebooks ()
(interactive)
(progn
(mapc #'elfeed-entry-fetch-mises-ebook (elfeed-search-selected))
(unless (use-region-p) (forward-line))))
(define-key elfeed-search-mode-map "m" #'elfeed-search-fetch-mises-ebooks)
Naciśnięcie m
na liście wpisów będzie wtedy uruchamiać skrypt pobierania dla podświetlonych wpisów Instytutu Misesa.