Package: ws.rsspull
rsspull downloads and parses RSS and Atom feeds, converts posts into email
messages, and stores them in Maildirs. This way you can read your feeds using
an email client (I useclaws, so I can access mailing lists, newsgroups and
feeds all in one application). The heavy lifting is performed by the awesomefeedparserlibrary.Installationrsspull requires at least Python 3.3.
You can install it from PyPI like this:$ pip install ws.rsspullYou need to create a configuration file in~/.rsspull/config, like:[global]
target = ~/Maildir/rss
target_type = maildir
logfile = ~/.rsspull/log
workers = 1
user_agent = optional custom headerFor low-volume applications you can also send the emails via SMTP instead:[global]
target = test@example.com
target_type = smtp://my-smtp-server.example.comList the feeds you want to pull in an OPML file at~/.rsspull/feeds.opml:<?xml version="1.0" encoding="utf-8"?>
<opml version="1.1">
  <head>
    <title>feeds.opml</title>
    <ownerName>rsspull</ownerName>
    <ownerEmail>rsspull@localhost</ownerEmail>
  </head>
  <body>
    <outline text="tech">
      <outline text="ongoing" xmlUrl="http://www.tbray.org/ongoing/ongoing.atom" />
    </outline>
    <outline text="general">
      <outline text="heisec" xmlUrl="http://www.heise.de/security/news/news.rdf" />
      <outline text="trac_example" xmlUrl="https://example.com/trac/timeline?milestone=on&amp;ticket=on&amp;changeset=on&amp;wiki=on&amp;max=10&amp;daysback=90&amp;format=rss" auth="user:password"/>
    </outline>
  </body>
</opml>Notes about the format:You can group your feeds (using nested<outlines>), this does not matter
to rsspull.Thetextattribute is used as the folder name, relative to themaildirsetting in~/.rsspull/config. If you run rsspull on an IMAP
server, you can create folder hierarchies by using something liketext=".rss.tech.ongoing"(check you IMAP server documentation how it
represents folder hierarchies. The example with dots works for Courier,
others might use actual subfolders, and so on).Basic authentication is supported with theauthattribute.You can usefile://URLs.Then simply run:$ rsspullto download the feeds.You can passrsspull--confdir/path/to/configto use a different location
than~/.rsspull.FeaturesUsesIf-Modified-SinceHTTP headers to avoid downloading a feed that has
not changed.Addds aContent-Locationheader to each message that contains the URL of
that post. I bound the following script to [return] in claws to open the
current entry in a webbrowser:#!/bin/bash
URL=`sed -ne '/^Content-Location/s/.*: //p' $1 | head -n 1`
if [ -n "$URL" ]; then
    mozilla $URL &> /dev/null
fiEntries are converted to multipart messages, one with the original HTML and
one converted into markdown-like plaintext (viahtml2text), so most of the
time opening in a browser isn’t even necessary since you can read the post
right in the email client.Can use several worker threads to download and parse feeds to increase
performance, since quite some time is spent waiting for downloads to complete
(theworkerssetting in~/.rsspull/config).Has been in daily usage since 2007, so it definitely Works For Me(tm).CHANGES2.5.0 (2023-04-16)ChangesMake user-agent header configurable (useragent)2.4.0 (2023-04-04)ChangesDrop Python-2 support (py2)Switch from setup.py to pyproject.toml (wheel)2.3.1 (2023-03-20)Escape ‘/’ in feed names to avoid prevent file names2.3.0 (2018-04-03)Make SMTP server configurable.2.2.1 (2018-03-30)Fix Python-3 unicode issues.2.2 (2018-03-24)Support sending messages via SMTP as an alternative to writing into Maildir.Add commandline option to set config directory.2.1 (2018-03-06)Switch from urllib2 to requests.Make Python-3 compatible.2.0 (2014-02-22)Switch from spawning curl to using urllib2.Package as egg.1.2 (2013-10-03)Use stdlib xml parser instead of python-xml.1.1 (2009-05-23)Write messages directly to Maildir instead of using procmail.Send messages as multipart, text and html.1.0 (2007-03-31)First release, inspired byhttp://newspipe.sourceforge.net/.