A little client that parses XMPP Pubsub Nodes and sends them as Atom Syndication Format or OPML over HTTP.
Find a file
2024-07-10 04:29:56 +02:00
css Improve software reference page. 2024-07-09 19:37:33 +03:00
graphic Add file favicon.ico. 2024-07-09 18:17:18 +03:00
screenshot Add graphical previews (screenshots); 2024-07-09 16:54:37 +03:00
script Improve software reference page. 2024-07-09 19:37:33 +03:00
xsl Improve the handling of subscription hyperlinks. 2024-07-09 19:17:40 +03:00
configuration.toml An initial prototype. 2024-07-09 00:26:18 +03:00
favicon.ico Add file favicon.ico. 2024-07-09 18:17:18 +03:00
LICENSE Initial commit 2024-07-08 10:57:51 +02:00
pubsub_to_atom.py Add file favicon.ico. 2024-07-09 18:17:18 +03:00
README.md Add a paragraph to section "Motivation" 2024-07-10 04:29:56 +02:00

XMPP PubSub To Atom

XMPP PubSub To Atom ("XPTA") is a simple Python script that parses XMPP Pubsub Nodes and sends them as Atom Syndication Format or OPML over HTTP.

XPTA generates Atom syndication feeds (RFC 4287) from XMPP PubSub nodes (XEP-0060).

This software was inspired from Tigase and was motivated by Movim.

Preview

berlin-xmpp-meetup let-s-talk-about-xmpp-tricks-with-conversations-author-daniel-gultsch-OqjaQh 59d860ab-d7c8-477c-bb4b-86924485cbbb selection

Motivation

PubSubToAtom is a syndication project which makes journals and publications that are hosted on XMPP PubSub nodes, available from HTTP to both, XML news readers and even HTML browsers.

This means that instead of hosting a journal or publication site in the old fashion (i.e. HTML documents hosted on an HTTP server), one only has to have an HTTP server to operate PubSubToAtom, and the rest of the content is delivered from an XMPP server (i.e. PubSub nodes).

The project also showcases the non-necessity of HTML, as it automatically generates valid XHTML pages by XSLT stylesheets from client-side.

Because PubSubToAtom reads XMPP PubSub nodes, it is possible to view a complete set of node items, and even a single node item, which means, that that a considered and carefully earnest use of this PubSubToAtom would save bandwidth and system overhead, which includes CPU, I/O and RAM usage.

Requirements

  • Python >= 3.5
  • fastapi
  • feedgenerator
  • lxml
  • slixmpp
  • tomllib
  • uvicorn

Installation

Debian-based Distro

# apt install python3 python3-fastapi python3-feedgenerator python3-lxml python3-slixmpp python3-tomli uvicorn

Download

Extract the source package to a directory that you have permission to run software.

$ git clone https://git.xmpp-it.net/sch/PubSubToAtom
$ cd PubSubToAtom/

Configure

Add account credentials to file configuration.toml.

Start

Execute PubSubToAtom with one of the following commands:

$ python -m uvicorn pubsub_to_atom:app --reload
$ python -m uvicorn pubsub_to_atom:app --reload --host 127.0.0.1 --port 8000
$ uvicorn pubsub_to_atom:app --host 127.0.0.1 --port 8000
$ fastapi dev pubsub_to_atom.py

Usage

It is possible to view a complete node and even a single item, which means, that it is possible to save bandwidth and it further means that a considered and carefully earnest use of this software would save system overhead, which includes CPU, I/O and RAM usage.

Viewing PubSub

Suppose you have the following nodes and items.

PubSub Node Item
blog.jmp.chat urn:xmpp:microblog:0 launch-2023
edhelas%40movim.eu urn:xmpp:microblog:0 working-on-launching-the-movim-network-qPBzwc
goffi%40goffi.org urn:xmpp:microblog:0 libervia-v0-8-la-cecilia-BdQ4
news.movim.eu Phoronix
pubsub.movim.eu berlin-xmpp-meetup 7363a41d-1146-40b3-ac0f-8ee2559591a3
pubsub.movim.eu berlin-xmpp-meetup let-s-talk-about-the-xsf-and-possibly-other-things-6A8eV4

To view node items

http://127.0.0.1:8000/atom?pubsub=edhelas%40movim.eu&node=urn%3Axmpp%3Amicroblog%3A0
http://127.0.0.1:8000/atom?pubsub=news.movim.eu&node=Phoronix
http://127.0.0.1:8000/atom?pubsub=pubsub.movim.eu&node=berlin-xmpp-meetup

To view a node item

http://127.0.0.1:8000/atom?pubsub=blog.jmp.chat&node=urn%3Axmpp%3Amicroblog%3A0&item=launch-2023
http://127.0.0.1:8000/atom?pubsub=edhelas%40movim.eu&node=urn%3Axmpp%3Amicroblog%3A0&item=working-on-launching-the-movim-network-qPBzwc
http://127.0.0.1:8000/atom?pubsub=goffi%40goffi.org&node=urn%3Axmpp%3Amicroblog%3A0&item=libervia-v0-8-la-cecilia-BdQ4
http://127.0.0.1:8000/atom?pubsub=pubsub.movim.eu&node=berlin-xmpp-meetup&item=7363a41d-1146-40b3-ac0f-8ee2559591a3
http://127.0.0.1:8000/atom?pubsub=pubsub.movim.eu&node=berlin-xmpp-meetup&item=let-s-talk-about-the-xsf-and-possibly-other-things-6A8eV4

Author

Schimon Jehudah Zackary

License

CSS and XSLT stylesheets are licensed under the license MIT.

JS scripts are licensed under the license MIT.

Python code is licensed under the license AGPL-3.0 only.

Acknowledgement

Special thanks to "d3x" and "cchianel" from IRC channel #python on irc.libera.chat for initial references concerning code, servers and FastAPI.

And an important thank you to Simone "roughnecks" Canaletti for testing and deploying PubSubToAtom into production.

Similar Projects

  • AtomEntry and PubSubPublishViewImpl - Convert XMPP Pubsub Nodes to Atom Syndication Format and convey them over HTTP.

  • AtomToPubsub - A little client that parses Atom + RSS feeds and send them on XMPP Pubsub Nodes.