Source code for core.service.rss
# core/service/rss.py
#
#
""" rss module. """
__copyright__ = "Copyright 2015, B.H.J Thate"
## IMPORTS
from core.utils.url import get_url, strip_html, need_redirect
from core.utils.lock import locked
from core.utils.time import short_date
from core.errors import error
from core.clock import Repeater
from core.kernel import kernel
from core.thing import Thing
from core.cfg import cfg_rss
import logging
import time
## DEFINES
seen = Thing()
seen.list = []
seen.results = "rss"
seen.prefix = "results"
## display function
[docs]def display(*args, **kwargs):
entry = args[0]
result = ""
for key in cfg_rss.keys_list:
if entry.get(key, None): result += "%s - " % entry[key]
return result[:-3]
## get function
@locked
def get(url):
import core.extra.feedparser as fp
result = []
logging.info("^ rss %s" % url)
try:
resp = get_url("GET", url)
url = need_redirect(resp)
if url: resp = get_url("GET", url)
data = resp.read()
if data: result = fp.parse(data)
except Exception as ex: error(url) ; return
for entry in result["entries"]: yield Thing(entry)
[docs]def fetch(*args, **kwargs):
global seen
obj = args[0]
for o in get(obj.rss):
if o.link in seen.list: continue
seen.list.append(o.link)
s = o.slice(cfg_rss.keys_list)
s.service = "rss"
s.prefix = "rss"
s.short = short_date(time.ctime())
kernel.announce(display(s))
## look function
kernel.register("rss.fetch", rss_fetch)
##
kernel.register("write.rss", write_rss)
## INIT
[docs]def init(*args, **kwargs):
global seen
last_rss = kernel.last("results", "rss")
if last_rss: seen = last_rss
cfg = kernel.last("cfg", "rss")
if not cfg: cfg = cfg_rss ; cfg.save()
rss = Repeater(rss_fetch, 600)
kernel.put(rss.start)
[docs]def shutdown(*args, **kwargs): seen.sync()