Skip to content

emacsmirror/webfeeder

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Emacs Webfeeder

Webfeeder is an Emacs library to generate RSS and Atom feeds from HTML files.

Other webfeed generators have been written for Emacs, but either they are tied to other projects like blog generators, or they only work on Org files like ox-rss. Since Webfeeder generates webfeeds from HTML files, it is more general.

The various elements of the HTML input are parsed with customizable functions. For instance, Webfeeder offers two functions to parse the title: webfeeder-title-libxml (using libxml if your Emacs is linked against it) and the less reliable webfeeder-title-default. Feel free to write you own function and bind webfeeder-title-function before generating the feeds.

The generated feeds should be valid on https://validator.w3.org/feed/. If not, it’s a bug, please report.

The full list of customizable functions is documented in webfeeder-html-files-to-items.

Installation

Get the package, either from Guix or ELPA:

M-x package-install RET webfeeder RET

Or clone / download this repository and modify your load-path.

(add-to-list 'load-path (expand-file-name "/path/to/this-package/" user-emacs-directory))

Load the package with

(require 'webfeeder)

It’s recommended to have an Emacs built against libxml, although basic support without libxml is also provided.

Usage

  • Build an Atom feed:
(webfeeder-build
 "atom.xml"
 "./public"
 "https://example.org/"
 '("post1.html" "post2.html" "post3.html")
 :title "My homepage"
 :description "A collection of articles in Atom")
  • To build an RSS feed, use the RSS builder:
(webfeeder-build
 "rss.xml"
 "./public"
 "https://example.org/"
 '("post1.html" "post2.html" "post3.html")
 :title "My homepage"
 :description "A collection of articles in RSS"
 :builder 'webfeeder-make-rss)
  • Use a custom title query function:
(defun my-title-query (html-file)
  "Return the title from the \"title\" class in the HTML file."
  (with-temp-buffer
    (insert-file-contents html-file)
    (let* ((dom (libxml-parse-html-region (point-min) (point-max)))
           (title (dom-text (car (dom-by-class dom "title")))))
      (if (string= "" title)
          nil
        title))))

(let ((webfeeder-title-function 'my-title-query))
  (webfeeder-build
   ; ...))
  • Limit the feed to 20 articles:
(webfeeder-build
 ; ...
 :max-entries 20)
  • Filter some entries with a predicate
(defun item-author-is-Alice-p (item)
  (string= (webfeeder-item-author item) "Alice")

(webfeeder-build
 ; ...
 :predicate 'item-author-is-Alice-p)

See the documentation of webfeeder-build for more options.

About

Build RSS and Atom webfeeds from HTML files

Resources

License

Stars

Watchers

Forks

Sponsor this project

  •  

Packages

 
 
 

Contributors