M README.md => README.md +62 -1
@@ 1,3 1,64 @@
# rsskey
-RSS feed mirror on Misskey
+rsskey is a simple script for mirroring [RSS] or [Atom] feeds on [Misskey].
+It splits original posts into paragraphs or sentences to fit an instance's
+character limit and checks for previous notes before creating.
+
+## Installation
+
+rsskey depends on [feedparser], [httpx], [loca], [markdownify] and [trio].
+If you `pip install rsskey`, pip will install all the dependencies for you
+to run `python -m rsskey`.
+
+Alternatively, you can get the requirements from your distribution,
+fetch the source tree and execute `src/rsskey.py`.
+
+## Usage
+
+In rsskey's [user configuration directory][loca],
+declare the mirroring jobs in `jobs.conf`, for example:
+
+```ini
+[rms@birb.space]
+; URL to RSS/Atom feed source
+source = https://stallman.org/rss/rss.xml
+; URL to destination Misskey instance's API
+dest = https://birb.space/api
+; Character limit of the Misskey instance
+limit = 420
+; Misskey user ID for searching previous notes
+user = 8rt4sahf1j
+; Access token with permission to compose notes
+token = 7h4753cur3r4nd0m57r1n61764v3y0u
+```
+
+In order to run rsskey chronically, set up a cron job or something IDK.
+
+## Contributing
+
+Patches should be sent to [~cnx/misc@lists.sr.ht]
+using [git send-email] with the following configurations:
+
+ git config sendemail.to '~cnx/misc@lists.sr.ht'
+ git config format.subjectPrefix 'PATCH rsskey'
+
+## Copying
+
+
+
+rsskey is free software: you can redistribute it and/or modify it
+under the terms of the GNU [Affero General Public License][agplv3] as
+published by the Free Software Foundation, either version 3 of the License,
+or (at your option) any later version.
+
+[RSS]: https://www.rssboard.org/rss-specification
+[Atom]: https://tools.ietf.org/html/rfc5023
+[Misskey]: https://join.misskey.page
+[feedparser]: https://feedparser.readthedocs.io
+[httpx]: https://www.python-httpx.org
+[loca]: https://pypi.org/project/loca
+[markdownify]: https://pypi.org/project/markdownify
+[trio]: https://trio.readthedocs.io
+[~cnx/misc@lists.sr.ht]: https://lists.sr.ht/~cnx/misc
+[git send-email]: https://git-send-email.io
+[agplv3]: https://www.gnu.org/licenses/agpl-3.0.html
M pyproject.toml => pyproject.toml +8 -7
@@ 4,20 4,21 @@ build-backend = "flit_core.buildapi"
[project]
name = "rsskey"
-version = "0.0.1"
+version = "0.1.0"
description = "RSS feed mirror on Misskey"
readme = "README.md"
-requires-python = ">=3.6"
+requires-python = ">=3.7"
license = { file = "COPYING" }
authors = [ { name = "Nguyễn Gia Phong", email = "mcsinyx@disroot.org" } ]
maintainers = [ { name = "Nguyễn Gia Phong", email = "mcsinyx@disroot.org" } ]
keywords = [ "rss", "misskey" ]
classifiers = [
"Development Status :: 5 - Production/Stable",
- "Intended Audience :: Developers",
+ "Framework :: Trio",
+ "Intended Audience :: System Administrators",
"License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)",
"Operating System :: OS Independent",
- "Programming Language :: Python" ]
-dependencies = [
- "feedparser", "httpx", "loca", "markdownify", "python-dateutil", "trio" ]
-urls = { project = "https://sr.ht/~cnx/rsskey" }
+ "Programming Language :: Python",
+ "Topic :: Utilities" ]
+dependencies = [ "feedparser", "httpx", "loca", "markdownify", "trio" ]
+urls = { SourceHut = "https://sr.ht/~cnx/rsskey" }
M => +2 -3
@@ 20,8 20,7 @@ from contextlib import AsyncExitStack
from functools import partial
from re import split, sub
from dateutil.parser import parse as parse_time
from feedparser import parse as parse_feed
from feedparser import parse
from httpx import AsyncClient
from loca import Loca
from markdownify import markdownify as md
@@ 68,7 67,7 @@ async def post(job, client, link, title, summary):
async def mirror(nursery, job, client):
"""Perform the given mirror job."""
feed = await client.get(job['source'])
for entry in parse_feed(feed.text)['entries']:
for entry in parse(feed.text)['entries']:
nursery.start_soon(post, job, client, entry['link'],
entry['title'], entry['summary'])