--------------------------------------------------- -- Licensed under the GNU General Public License v2 -- * (c) 2009, olcc -- -- This is now a standalone RSS reader for awesome: -- * http://github.com/olcc/aware --------------------------------------------------- -- {{{ Grab environment local pairs = pairs local io = { popen = io.popen } local setmetatable = setmetatable -- }}} -- RSS: provides latest world news -- vicious.contrib.rss local rss = {} -- {{{ RSS widget type local function worker(format, input) -- input: * feed - feed url -- * object - entity to look for (typically: 'item') -- * fields - fields to read (example: 'link', 'title', 'description') -- output: * count - number of entities found -- * one table for each field, containing wanted values local feed = input.feed local object = input.object local fields = input.fields -- Initialise tables local out = {} for _, v in pairs(fields) do out[v] = {} end -- Initialise variables local ob = nil local i,j,k = 1, 1, 0 local curl = "curl -A 'Mozilla/4.0' -fsm 5 --connect-timeout 3 " -- Get the feed local f = io.popen(curl .. '"' .. feed .. '"') local feed = f:read("*all") f:close() while true do i, j, ob = feed.find(feed, "<" .. object .. ">(.-)", i) if not ob then break end for _, v in pairs(fields) do out[v][k] = ob:match("<" .. v .. ">(.*)") end k = k+1 i = j+1 end -- Update the entity count out.count = k return out end -- }}} return setmetatable(rss, { __call = function(_, ...) return worker(...) end })