# XMPP Journal Publisher Previously, XMPP PubSub To Atom ("XPTA"). XMPP Journal Publisher ("XJP") is a software that parses XMPP Pubsub Nodes and sends them as Atom Syndication Format or OPML over HTTP. XJP generates Atom syndication feeds ([RFC 4287](https://www.rfc-editor.org/rfc/rfc4287)) from XMPP PubSub nodes ([XEP-0060](http://xmpp.org/extensions/xep-0060.html)). XJP includes [XSLT ](https://www.w3.org/TR/xslt/) stylesheets that transform PubSub nodes into static XHTML journal sites. XJP was inspired from Tigase and was motivated by Movim. ## Preview [berlin-xmpp-meetup](screenshot/berlin-xmpp-meetup.png) [let-s-talk-about-xmpp-tricks-with-conversations-author-daniel-gultsch-OqjaQh](screenshot/let-s-talk-about-xmpp-tricks-with-conversations-author-daniel-gultsch-OqjaQh.png) [59d860ab-d7c8-477c-bb4b-86924485cbbb](screenshot/59d860ab-d7c8-477c-bb4b-86924485cbbb.png) [selection](screenshot/selection.png) ## Motivation XMPP Journal Publisher 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 XMPP Journal Publisher, 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 HTML browsers (client-side) from XSLT stylesheets. Because XMPP Journal Publisher reads XMPP PubSub nodes, it is possible to view a complete set of node items, and even a single node item, which means, that a considered and carefully earnest use of XMPP Journal Publisher would save bandwidth and system overhead, which includes CPU, I/O and RAM usage. ## Requirements * Python >= 3.5 * fastapi * lxml * slixmpp * tomllib (Python <= 3.10) * uvicorn ## Installation ### Debian-based Distro ```shell # 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. ```shell $ git clone https://git.xmpp-it.net/sch/XJP $ cd XJP/ ``` ### Configure Add account credentials to file `configuration.toml`. ### Start Execute XMPP Journal Publisher with one of the following commands: ```shell $ python -m uvicorn main:app --reload $ 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 PubSub nodes and items. |Jabber ID |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 | |pubsub.movim.eu |jesus-christ-son-of-god|the-passion-of-christ-redemption-and-salvation-for-all-who-believe-moSqXO| |pubsub.woodpeckersnest.space|PlanetJabber | | |pubsub.woodpeckersnest.space|xmpp-it | | |pubsub%40sure.im |news | | #### To view pubsub nodes ``` http://127.0.0.1:8000/opml?pubsub=news.movim.eu http://127.0.0.1:8000/opml?pubsub=pubsub.woodpeckersnest.space ``` #### 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 http://127.0.0.1:8000/atom?pubsub=pubsub.movim.eu&node=jesus-christ-son-of-god http://127.0.0.1:8000/atom?pubsub=pubsub.woodpeckersnest.space&node=PlanetJabber http://127.0.0.1:8000/atom?pubsub=pubsub.woodpeckersnest.space&node=xmpp-it http://127.0.0.1:8000/atom?pubsub=pubsub%40sure.im&node=news ``` #### 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 http://127.0.0.1:8000/atom?pubsub=pubsub.movim.eu&node=jesus-christ-son-of-god&item=the-passion-of-christ-redemption-and-salvation-for-all-who-believe-moSqXO ``` ## Supported XEPs - [XEP-0060: Publish-Subscribe](https://xmpp.org/extensions/xep-0060.html) - [XEP-0472: Pubsub Social Feed](https://xmpp.org/extensions/xep-0472.html) ## 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 Thank you to Mr. Peter Saint-Andre ([stpeter](https://stpeter.im/journal/731.html)) for manifesting [Atom Over XMPP](https://www.ietf.org/archive/id/draft-saintandre-atompub-notify-07.html). Thank you to Mr. Wojtek and [Tigase](https://tigase.org/) for publicly exposing an implementation of PubSub as Syndication at [Sure.IM](https://sure.im/) as [feeds.tigase.im](http://feeds.tigase.im/atom?server=pubsub@sure.im&node=news). Thank you to to Mr. Timothée Jaussoin ([edhelas](https://edhelas.movim.eu/)) who consistently and earnestly showcases the potential of PubSub as a publication platform with project [Movim](https://movim.eu/). A special thank you to the gentlemen "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 Mr. Simone Canaletti ([roughnecks](https://blog.woodpeckersnest.space/)) for testing and deploying XMPP Journal Publisher into production. ## Similar Projects * [AtomEntry](https://github.com/tigase/sureim/blob/master/site/src/main/java/tigase/sure/web/site/client/pubsub/AtomEntry.java) and [PubSubPublishViewImpl](https://github.com/tigase/sureim/blob/master/site/src/main/java/tigase/sure/web/site/client/pubsub/PubSubPublishViewImpl.java) - Convert XMPP Pubsub Nodes to Atom Syndication Format and convey them over HTTP. * [AtomToPubsub](https://github.com/edhelas/atomtopubsub) - A little client that parses Atom + RSS feeds and send them on XMPP Pubsub Nodes.