diff --git a/.gitignore b/.gitignore index 9866359..378537a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ scratch +**/__pycache__/ +.#* diff --git a/README.org b/README.org index 1252cbd..24bb9f0 100644 --- a/README.org +++ b/README.org @@ -44,7 +44,6 @@ *** developing in guix - ** Python requests #+BEGIN_EXAMPLE python @@ -178,3 +177,9 @@ #+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 1f359b9..c6c732b 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 @@ -10,4 +11,7 @@ mobili_cli.egg-info/top_level.txt mobili_cli/commands/__init__.py mobili_cli/commands/cmd_init.py mobili_cli/commands/cmd_status.py -mobili_cli/commands/cmd_test.py \ No newline at end of file +mobili_cli/commands/cmd_test.py +mobili_cli/utils/__init__.py +mobili_cli/utils/authenticate.py +mobili_cli/utils/load-rss-feed.py diff --git a/mobili_cli/__pycache__/__init__.cpython-38.pyc b/mobili_cli/__pycache__/__init__.cpython-38.pyc deleted file mode 100644 index e3adb40..0000000 Binary files a/mobili_cli/__pycache__/__init__.cpython-38.pyc and /dev/null differ diff --git a/mobili_cli/__pycache__/cli.cpython-38.pyc b/mobili_cli/__pycache__/cli.cpython-38.pyc deleted file mode 100644 index 7e957c2..0000000 Binary files a/mobili_cli/__pycache__/cli.cpython-38.pyc and /dev/null differ diff --git a/mobili_cli/event.py b/mobili_cli/event.py new file mode 100644 index 0000000..928dc18 --- /dev/null +++ b/mobili_cli/event.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 + +from pprint import pp +from datetime import datetime +from metadata_parser import MetadataParser + +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 setImageFromLink(self, link): + page = MetadataParser(self.link) + self.image = page.get_metadata_link('image') + + def __str__(self): + return str({ + 'title': self.title, + 'time': self.time, + 'link': self.link, + 'status': self.status, + 'image': self.image + }) + +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']) + + ev.setImageFromLink(ev.link) + + 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/requirements.txt b/requirements.txt index 0fc5cb6..85f034c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,5 @@ click>=7.0.0 sgqlc==v14.1 feedparser==6.0.8 +metadata-parser==0.10.5 +lxml==4.6.3 diff --git a/setup.py b/setup.py index 36539a6..8f18399 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ with open('requirements.txt') as f: 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=required, entry_points="""