# XMPP PubSub To Atom

A little client that parses XMPP Pubsub Nodes and sends them as Atom Syndication Format or OPML over HTTP.

## About

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](https://www.rfc-editor.org/rfc/rfc4287)) from XMPP PubSub nodes ([XEP-0060](http://xmpp.org/extensions/xep-0060.html)).

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

## Preview

[<img alt="berlin-xmpp-meetup" src="screenshot/berlin-xmpp-meetup.png" width="200px"/>](screenshot/berlin-xmpp-meetup.png)
[<img alt="let-s-talk-about-xmpp-tricks-with-conversations-author-daniel-gultsch-OqjaQh" src="screenshot/let-s-talk-about-xmpp-tricks-with-conversations-author-daniel-gultsch-OqjaQh.png" width="200px"/>](screenshot/let-s-talk-about-xmpp-tricks-with-conversations-author-daniel-gultsch-OqjaQh.png)
[<img alt="59d860ab-d7c8-477c-bb4b-86924485cbbb" src="screenshot/59d860ab-d7c8-477c-bb4b-86924485cbbb.png" width="200px"/>](screenshot/59d860ab-d7c8-477c-bb4b-86924485cbbb.png)
[<img alt="selection" src="screenshot/selection.png" width="200px"/>](screenshot/selection.png)


## Requirements

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

## Installation

### Download

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

```shell
$ 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:

```shell
$ 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 saves 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

## 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.
