#!/usr/bin/env lua5.1 local milla = require("milla") local yaml = require("yaml") local http = require("http") local xmlpath = require("xmlpath") local function read_file(file) local f = assert(io.open(file, "rb")) local content = f:read("*all") f:close() return content end local function sleep(n) os.execute("sleep " .. tonumber(n)) end local function get_config() local yaml_config = read_file("./plugins/rss.yaml") local config = yaml.parse(yaml_config) return config end local function get_rss_feed(config) local titles = {} local author_names = {} local uris = {} local rss_feed_list = {} for _, v in pairs(config.rssfeeds) do local response, err = http.request("GET", v.url) if err ~= nil then milla.send_message(err, "") goto continue end local node, err = xmlpath.loadxml(response.body) if err ~= nil then milla.send_message(err, "") goto continue end local path, err = xmlpath.compile("//entry/title") if err ~= nil then milla.send_message(err, "") goto continue end local iterator = path:iter(node) for _, match in ipairs(iterator) do table.insert(titles, match:string()) end path, err = xmlpath.compile("//entry/author/name") -- local path, err = xmlpath.compile("//entry/title") if err ~= nil then milla.send_message(err, "") goto continue end iterator = path:iter(node) for _, match in ipairs(iterator) do table.insert(author_names, match:string()) end path, err = xmlpath.compile("//entry/author/uri") -- local path, err = xmlpath.compile("//entry/title") if err ~= nil then milla.send_message(err, "") goto continue end iterator = path:iter(node) for _, match in ipairs(iterator) do table.insert(uris, match:string()) end ::continue:: end for i = 1, #titles do table.insert(rss_feed_list, author_names[i] .. ": " .. titles[i] .. " -- " .. uris[i]) end return rss_feed_list end local function rss_feed() local config = get_config() while true do for _, v in pairs(get_rss_feed(config)) do milla.send_message(v, config.channel) sleep(config.period) end end end rss_feed()