Exemplo n.º 1
0
class myRSSFeed:
    def __init__(self,
                 feed,
                 title,
                 description,
                 urlroot,
                 docroot="./rss",
                 maxitems=100):
        self._maxitems = maxitems
        self._items = 0
        self._title = title
        self._description = description
        self._docroot = docroot
        self._urlroot = urlroot
        self._feed = feed
        self._fg = FeedGenerator()
        # make sure we have a "/" at the end of the urlroot
        plen = len(self._urlroot)
        if self._urlroot[plen - 1:] != "/":
            self._urlroot += "/"
        # make sure we have a "/" at the end of the docroot
        plen = len(self._docroot)
        if self._docroot[plen - 1:] != "/":
            self._docroot += "/"
        self._fg.id(self._urlroot + self._feed)
        self._fg.link(href="\"" + self._urlroot + self._feed + "\"")
        self._fg.description(description)
        self._fg.title(title)
        self.reopen_feed()

    def get_fname(self):
        dt = datetime.now()
        ts = time.mktime(dt.timetuple())
        rn = random.randint(0, 10001)
        return (u'{}'.format(int(ts)) + "_" + str(rn) + ".html")

    def update_feed(self, fname, date, title, description):
        if (self._items == self._maxitems):
            # remove the oldest item
            self._fg.remove_item(self._items - 1)
            self._items -= 1

        self._items += 1
        fe = self._fg.add_entry()
        fe.id(self._urlroot + fname)
        fe.title(title)
        fe.description(description)
        fe.link(href=self._urlroot + fname)
        fe.pubDate(date)
        self._fg.rss_file(self._docroot + self._feed)

    def add_item(self, date, headline, body, htmltemplate):
        try:
            f = open(htmltemplate, "r")
            self._template = f.read()
            f.close()
        except:
            self._template = htmltemplate

        fname = self.get_fname()
        f = open(self._docroot + fname, "w")
        fmt = self._template
        f.write(fmt.format(headline, date.strftime("%Y-%m-%d %H:%M:%S"), body))
        f.close()
        self.update_feed(fname, date, headline, body)

    def reopen_feed(self):
        d = feedparser.parse(self._docroot + self._feed)
        n = min(self._maxitems, len(d.entries))
        for i in reversed(range(n)):
            fe = self._fg.add_entry()
            fe.id(d.entries[i].guid)
            fe.title(d.entries[i].title)
            fe.description(d.entries[i].description)
            fe.link(href=d.entries[i].link)
            fe.pubDate(d.entries[i].published)
            self._items += 1