1
0
Fork 0
elfeed-export/elfeed-export.el

81 lines
3 KiB
EmacsLisp
Raw Normal View History

;;; elfeed-export.el --- Elfeed database export -*- lexical-binding: t; -*-
;; Copyright (C) 2024 Bram Schoenmakers
;; Author: Bram Schoenmakers <me@bramschoenmakers.nl>
;; Maintainer: Bram Schoenmakers <me@bramschoenmakers.nl>
;; Created: 1 August 2024
;; Package-Version: 0.1
;; Package-Requires: ((emacs "29.1"))
;; Keywords:
;; URL:
;; This file is not part of GNU Emacs.
;; MIT License
;; Copyright (c) 2024 Bram Schoenmakers
;; Permission is hereby granted, free of charge, to any person obtaining a copy
;; of this software and associated documentation files (the "Software"), to deal
;; in the Software without restriction, including without limitation the rights
;; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
;; copies of the Software, and to permit persons to whom the Software is
;; furnished to do so, subject to the following conditions:
;; The above copyright notice and this permission notice shall be included in all
;; copies or substantial portions of the Software.
;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
;; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
;; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
;; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
;; SOFTWARE.
;;; Commentary:
;;; Code:
2024-08-01 20:05:19 +00:00
(defcustom elfeed-export-fields
'(title date url tags feed-title feed content)
"Which fields to export per entry."
:group 'elfeed-export)
2024-08-01 20:03:45 +00:00
(defun elfeed-export--entry-to-alist (entry)
(let ((feed (elfeed-entry-feed entry)))
(remove nil
(list
2024-08-01 20:05:19 +00:00
(when (memq 'title elfeed-export-fields)
(cons "title" (elfeed-entry-title entry)))
2024-08-01 20:05:19 +00:00
(when (memq 'date elfeed-export-fields)
(cons "date" (format-time-string "%F %T" (elfeed-entry-date entry))))
2024-08-01 20:05:19 +00:00
(when (memq 'url elfeed-export-fields)
(cons "url" (elfeed-entry-link entry)))
2024-08-01 20:05:19 +00:00
(when (memq 'tags elfeed-export-fields)
(cons "tags" (elfeed-entry-tags entry)))
2024-08-01 20:05:19 +00:00
(when (memq 'feed-title elfeed-export-fields)
(cons "feed-title" (elfeed-feed-title feed)))
2024-08-01 20:05:19 +00:00
(when (memq 'feed elfeed-export-fields)
(cons "feed" (elfeed-feed-url feed)))
2024-08-01 20:05:19 +00:00
(when (memq 'content elfeed-export-fields)
(cons "content" (elfeed-deref (elfeed-entry-content entry))))))))
(defun elfeed-export-to-json ()
(let ((entries)
(feeds (elfeed-feed-list)))
(dolist (feed (seq-take feeds 1))
(setq entries
(append entries
(elfeed-feed-entries feed))))
(json-encode
2024-08-01 20:03:45 +00:00
(mapcar #'elfeed-export--entry-to-alist entries))))
(defun elfeed-export-to-file (path)
(interactive "F")
(write-region (elfeed-export-to-json) nil path nil nil nil t))
(provide 'elfeed-export)
;;; elfeed-export.el ends here