diff --git a/feed2toot/main.py b/feed2toot/main.py index 733bd49..4d99bbb 100644 --- a/feed2toot/main.py +++ b/feed2toot/main.py @@ -23,6 +23,8 @@ import logging import logging.handlers import os import sys +import re +import urllib3 # 3rd party libraries imports import feedparser @@ -61,6 +63,10 @@ class Main(object): def main(self): """The main function.""" + # regex to retrieve urls in tags + regex = re.compile(r"]+src=\"([^\">]+)\"") + http = urllib3.PoolManager() + clip = CliParse() clioptions = clip.options self.setup_logging(clioptions) @@ -129,6 +135,16 @@ class Main(object): 'id': entry['link'], } + # get images contained in the entry + images = [] + if 'summary' in entry: + list_img_urls = regex.findall(entry['summary']) + if len(list_img_urls) > 0: + for img_url in list_img_urls: + resp = http.request('GET', img_url, preload_content=False) + images.append(resp) + resp.release_conn() + severalwordsinhashtag = False # lets see if the rss feed has hashtag if 'tags' in entry: @@ -186,7 +202,6 @@ class Main(object): finaltweet = addtag.finaltweet else: finaltweet = dedup.finaltweet - if clioptions.dryrun: if entrytosend: logging.warning('Would toot with visibility "{visibility}": {toot}'.format( @@ -204,7 +219,7 @@ class Main(object): visibility=config.get( 'mastodon', 'toot_visibility', fallback='public'))) - twp = TootPost(config, finaltweet) + twp = TootPost(config, finaltweet, images) storeit = twp.storeit() else: logging.debug('populating RSS entry {}'.format(rss['id'])) @@ -219,7 +234,7 @@ class Main(object): pluginmodulename = 'feed2toot.plugins.{pluginmodule}'.format(pluginmodule=pluginclassname.lower()) try: pluginmodule = importlib.import_module(pluginmodulename) - pluginclass = getattr(pluginmodule, pluginclassname) + pluginclass = getattr(pluginmodule, pluginclassname) pluginclass(plugins[plugin], finaltweet) except ImportError as err: print(err) diff --git a/feed2toot/tootpost.py b/feed2toot/tootpost.py index c40c4ee..9ac95b0 100644 --- a/feed2toot/tootpost.py +++ b/feed2toot/tootpost.py @@ -30,11 +30,12 @@ from mastodon import Mastodon class TootPost: '''TootPost class''' - def __init__(self, config, toot): + def __init__(self, config, toot, img_list): '''Constructore of the TootPost class''' self.config = config self.store = True self.toot = toot + self.img_list = img_list self.main() def main(self): @@ -44,9 +45,16 @@ class TootPost: access_token = self.config.get('mastodon', 'user_credentials'), api_base_url = self.config.get('mastodon', 'instance_url') ) + medias_dicts = [] + if len(self.img_list) > 0: + for img in self.img_list: + medias_dicts.append(mastodon.media_post(img.data, + img.headers['content-type'])) + mastodon.status_post(self.toot, visibility=self.config.get( - 'mastodon', 'toot_visibility', fallback='public')) + 'mastodon', 'toot_visibility', fallback='public'), + media_ids=medias_dicts) def storeit(self): '''Indicate if the tweet should be stored or not'''