;;; elfeed-export.el --- Elfeed database export -*- lexical-binding: t; -*- ;; Copyright (C) 2024 Bram Schoenmakers ;; Author: Bram Schoenmakers ;; Maintainer: Bram Schoenmakers ;; 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: (defcustom elfeed-export-fields '(title date url tags feed-title feed content) "Which fields to export per entry." :group 'elfeed-export) (defun elfeed-export--entry-to-alist (entry) (let ((feed (elfeed-entry-feed entry))) (remove nil (list (when (memq 'title elfeed-export-fields) (cons "title" (elfeed-entry-title entry))) (when (memq 'date elfeed-export-fields) (cons "date" (format-time-string "%F %T" (elfeed-entry-date entry)))) (when (memq 'url elfeed-export-fields) (cons "url" (elfeed-entry-link entry))) (when (memq 'tags elfeed-export-fields) (cons "tags" (elfeed-entry-tags entry))) (when (memq 'feed-title elfeed-export-fields) (cons "feed-title" (elfeed-feed-title feed))) (when (memq 'feed elfeed-export-fields) (cons "feed" (elfeed-feed-url feed))) (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 (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