Source code for core.plugs.rss

# core/plugs/rss.py
#
#

""" rss module. """

__copyright__ = "Copyright 2014 B.H.J Thate"

## IMPORTS

from core.utils import parse_urls, short_date, fetch_url, error
from core import Object, kernel

## basic imports

import threading
import logging
import socket
import time

## RSS class

[docs]class RSS(Object): def __init__(zelf, sleep, *args, **kwargs): Object.__init__(zelf, *args, **kwargs) zelf._state = Object() zelf._state.status = "init" zelf._state.boot = time.time() zelf._state.start = time.time() zelf._state.sleep = int(sleep) zelf._state.input = time.time() zelf._state.output = time.time() zelf._state.nr_out = 0 zelf._state.nr_new = 0 zelf._seen = [] zelf._on_start = True
[docs] def boot(zelf, *args, **kwargs): zelf.run()
[docs] def stop(zelf, *args, **kwargs): zelf.timer.cancel()
[docs] def run(zelf, *args, **kwargs): global kernel zelf._state.status = "running" zelf._state.input = time.time() zelf._state.start = time.time() zelf.timer = threading.Timer(zelf._state.sleep, zelf.look) zelf.timer.start() kernel.services.rss.timer = zelf.timer
[docs] def look(zelf, *args, **kwargs): import core.contrib.feedparser as fp zelf._state.status = "looking" zelf._state.input = time.time() logging.info("looking") for obj in kernel.objects(): if "rss" not in obj: continue try: data = fetch_url("GET", obj.rss).read() except socket.error: continue try: data = fp.parse(data) except Exception as ex: error() ; continue for entry in data["entries"]: if entry["link"] in zelf._seen: continue else: zelf._seen.append(entry["link"]) if not zelf._on_start: zelf.display(entry) zelf._state.nr_new += 1 ; continue zelf._on_start = False zelf.run()
[docs] def display(zelf, *args, **kwargs): entry = args[0] result = "%s %s" % (entry["title"], entry["link"]) zelf._state.nr_out += 1 zelf._state.output = time.time() kernel.announce(result) ## INIT
[docs]def init(*args, **kwargs): global kernel kernel.services.rss = RSS(60.0) kernel.services.rss.boot()