// Zoe AIM Away Message RSS Feed Generator // // Seth King and Douglas Thrift // // $Id$ #include "Rss.hpp" Rss::Rss(const Buddy& buddy, const std::vector& messages, const Stamp& stamp) { api::FileOutputStream fout(buddy.getRss() != "-" ? buddy.getRss() : "/dev/null"); xml::TextWriter rss(buddy.getRss() != "-" ? fout : api::Cout.GetStream()); xml::ScopeElement root(rss, "rss"); rss.SetAttribute("version", "2.0"); xml::ScopeElement channel(rss, "channel"); rss.OpenElement("title"); rss.OutputText(ext::String(buddy) + "'s Away Messages"); rss.CloseElement(); rss.OpenElement("link"); rss.OutputText(buddy.getLink()); rss.CloseElement(); rss.OpenElement("description"); rss.OutputText(ext::String(buddy) + "'s AIM Away Messages from the past 30 " "days."); rss.CloseElement(); rss.OpenElement("lastBuildDate"); rss.OutputText(stamp.get822()); rss.CloseElement(); rss.OpenElement("generator"); rss.OutputText(Zoe::generator()); rss.CloseElement(); rss.OpenElement("docs"); rss.OutputText("http://blogs.law.harvard.edu/tech/rss"); rss.CloseElement(); rss.OpenElement("ttl"); rss.OutputText("60"); rss.CloseElement(); for (std::vector::const_iterator message(messages.begin()); message != messages.end(); ++message) { xml::ScopeElement item(rss, "item"); rss.OpenElement("description"); rss.OutputText(*message); rss.CloseElement(); rss.OpenElement("pubDate"); rss.OutputText(message->getStamp().get822()); rss.CloseElement(); } }