diff --git a/bumblebee/modules/rss.py b/bumblebee/modules/rss.py
index bec9dc7..0808e23 100644
--- a/bumblebee/modules/rss.py
+++ b/bumblebee/modules/rss.py
@@ -23,6 +23,7 @@ import os
import tempfile
import logging
import random
+import re
import bumblebee.input
import bumblebee.output
@@ -33,13 +34,13 @@ import bumblebee.engine
class Module(bumblebee.engine.Module):
REFRESH_DELAY = 600
SCROLL_SPEED = 3
- LAYOUT_STYLES_ITEMS = [[1,1,1],[2,2,1],[1,2,2],[2,1,2]]
+ LAYOUT_STYLES_ITEMS = [[1,1,1],[3,3,2],[2,3,3],[3,2,3]]
def __init__(self, engine, config):
super(Module, self).__init__(engine, config,
bumblebee.output.Widget(full_text=self.ticker_update if DEPENDENCIES_OK else self._show_error)
)
# Use BBC newsfeed as demo:
- self._feeds = self.parameter('feeds', 'http://feeds.bbci.co.uk/news/rss.xml').split(" ")
+ self._feeds = self.parameter('feeds', 'https://www.espn.com/espn/rss/news').split(" ")
self._refresh_countdown = 0
self._feeds_to_update = []
@@ -63,14 +64,31 @@ class Module(bumblebee.engine.Module):
if self._current_item:
webbrowser.open(self._current_item['link'])
+ def _check_for_image(self, entry):
+ image = next(iter([l['href'] for l in entry['links'] if l['rel']=='enclosure']), None)
+ if not image and 'media_content' in entry:
+ try:
+ media = sorted(entry['media_content'], key=lambda i: i['height'] if 'height' in i else 0, reverse=True)
+ image = next(iter([i['url'] for i in media if i['medium']=='image']), None)
+ except Exception:
+ pass
+ if not image:
+ match = re.search(']*src\s*=["\']*([^\s^>^"^\']*)["\']*', entry['summary'])
+ if match:
+ image=match.group(1)
+ return image if image else ''
+
+ def _remove_tags(self, txt):
+ return re.sub('<[^>]*>', '', txt)
+
def _create_item(self, entry, url, feed):
- return {'title': entry['title'].replace('\n', ' '),
+ return {'title': self._remove_tags(entry['title'].replace('\n', ' ')),
'link': entry['link'],
'new': all([i['title'] != entry['title'] for i in self._items]),
'source': url,
- 'summary': entry['summary'],
+ 'summary': self._remove_tags(entry['summary']),
'feed': feed,
- 'image': next(iter([l['href'] for l in entry['links'] if l['rel']=='enclosure']), ''),
+ 'image': self._check_for_image(entry),
'published': time.mktime(entry.published_parsed) if hasattr(entry, 'published_parsed') else 0}
def _update_items_from_feed(self, url):
@@ -161,7 +179,7 @@ class Module(bumblebee.engine.Module):
def state(self, _):
return self._state
- def _create_news_element(self, item):
+ def _create_news_element(self, item, overlay_title):
try:
timestr = "" if item['published'] == 0 else str(time.ctime(item['published']))
except Exception as e:
@@ -170,7 +188,7 @@ class Module(bumblebee.engine.Module):
element = "