diff --git a/README.org b/README.org index 8133033..dd449cf 100644 --- a/README.org +++ b/README.org @@ -38,7 +38,6 @@ events via mobilizon GraphQL api from yaml or json or whatever. Probably yaml. *** developing in guix - ** Python requests #+BEGIN_EXAMPLE python @@ -172,3 +171,9 @@ events via mobilizon GraphQL api from yaml or json or whatever. Probably yaml. #+END_EXAMPLE + +** RSS import + This tool can be used to import events from a RSS feed. + Once run, it checks if there are new events to be added and updates existing ones if need be. +*** Identification + Each event is uniquely identified by its' url ("link" field), which is mapped into the "link" field on mobilizon. diff --git a/mobili_cli.egg-info/SOURCES.txt b/mobili_cli.egg-info/SOURCES.txt index 7bf1568..30b15af 100644 --- a/mobili_cli.egg-info/SOURCES.txt +++ b/mobili_cli.egg-info/SOURCES.txt @@ -1,6 +1,7 @@ setup.py mobili_cli/__init__.py mobili_cli/cli.py +mobili_cli/event.py mobili_cli.egg-info/PKG-INFO mobili_cli.egg-info/SOURCES.txt mobili_cli.egg-info/dependency_links.txt @@ -9,4 +10,7 @@ mobili_cli.egg-info/requires.txt mobili_cli.egg-info/top_level.txt mobili_cli/commands/__init__.py mobili_cli/commands/cmd_init.py -mobili_cli/commands/cmd_status.py \ No newline at end of file +mobili_cli/commands/cmd_status.py +mobili_cli/utils/__init__.py +mobili_cli/utils/authenticate.py +mobili_cli/utils/load-rss-feed.py \ No newline at end of file diff --git a/mobili_cli/__pycache__/__init__.cpython-39.pyc b/mobili_cli/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000..83be24a Binary files /dev/null and b/mobili_cli/__pycache__/__init__.cpython-39.pyc differ diff --git a/mobili_cli/__pycache__/event.cpython-39.pyc b/mobili_cli/__pycache__/event.cpython-39.pyc new file mode 100644 index 0000000..78b17b7 Binary files /dev/null and b/mobili_cli/__pycache__/event.cpython-39.pyc differ diff --git a/mobili_cli/event.py b/mobili_cli/event.py new file mode 100644 index 0000000..038915f --- /dev/null +++ b/mobili_cli/event.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python3 + +from pprint import pp +from datetime import datetime + +class Event: + status = None + + def __init__(self, title, time, link): + self.title = title + self.time = time + self.link = link + + def setStatus(self, status): + self.status = status + + def setLocation(self, location): + self.location = location + + def __str__(self): + return str({ + 'title': self.title, + 'time': self.time, + 'link': self.link, + 'status': self.status + }) + +def parseRSS(entry): + for k in ['title', 'ical_dtstart', 'link']: + if k not in entry: + raise ValueError(f"{k} is a required event parameter") + + title, time, link = (entry.title, datetime.fromisoformat(entry['ical_dtstart']), entry.link) + ev = Event(title, time, link) + + if 'ical_status' in entry: + ev.setStatus(entry['ical_status']) + + if 'ical_location' in entry: + ev.setLocation(entry['ical_location']) + + return ev diff --git a/mobili_cli/utils/__init__.py b/mobili_cli/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/mobili_cli/utils/load-rss-feed.py b/mobili_cli/utils/load-rss-feed.py index cc124e6..e9c580d 100755 --- a/mobili_cli/utils/load-rss-feed.py +++ b/mobili_cli/utils/load-rss-feed.py @@ -2,15 +2,18 @@ import sys import feedparser +from pprint import pp + +from mobili_cli.event import Event, parseRSS try: url = sys.argv[1] - f = feedparser.parse(url) - for dogodek in f['entries']: - print(dogodek) - except ValueError: raise SystemExit('Usage: load-rss-feed.py ') - +f = feedparser.parse(url) +for e in f['entries']: + pp(e) + event = parseRSS(e) + pp(str(event)) diff --git a/primeri/izpisi-kulturnik.sh b/primeri/izpisi-kulturnik.sh new file mode 100755 index 0000000..a389a53 --- /dev/null +++ b/primeri/izpisi-kulturnik.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +polnapot=$(realpath $0) +pot=$(dirname $polnapot) +url="https://dogodki.kulturnik.si/?format=rss" + +$pot/../mobili_cli/utils/load-rss-feed.py $url diff --git a/primeri/izpisi-neodvisni.sh b/primeri/izpisi-neodvisni.sh index 2970d4b..210c27a 100755 --- a/primeri/izpisi-neodvisni.sh +++ b/primeri/izpisi-neodvisni.sh @@ -1,5 +1,7 @@ #!/bin/bash +polnapot=$(realpath $0) +pot=$(dirname $polnapot) url="https://www.neodvisni.art/novice/feed" -../mobili_cli/utils/load-rss-feed.py $url +$pot/../mobili_cli/utils/load-rss-feed.py $url diff --git a/setup.py b/setup.py index 8ba8c84..70ce51e 100644 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ from setuptools import setup setup( name="mobili_cli", version="0.1", - packages=["mobili_cli", "mobili_cli.commands"], + packages=["mobili_cli", "mobili_cli.commands", "mobili_cli.utils"], include_package_data=True, install_requires=["click", "graphql-core", "requests"], entry_points="""