Module:Bluesky RSS Feed: Difference between revisions

From NOISZ Wiki
(constructed it in a way that didn't rely on awkward wikitext construction and brute force preprocessing. this way you can edit the bluesky rss feed row template to change how it appears too)
(streamlining the function)
Line 5: Line 5:


local posts = {}
local posts = {}
posts["description"] = {}
posts["pubDate"] = {}
posts["link"] = {}
local rss_table = {}




Line 16: Line 12:
   , format = 'xml'
   , format = 'xml'
}
}
for k, v in ipairs(rss) do
for k, v in ipairs(rss) do
if string.find(v["description"],"NOISZ") and v["description"] and v["pubDate"] and v["link"] then
if string.find(v["description"],"NOISZ") and v["description"] and v["pubDate"] and v["link"] then
local new_post = {}
posts[k] = frame:expandTemplate{title = 'Bluesky RSS Feed Row', args = {description = v["description"], pubDate = v["pubDate"], link=v["link"]}}
new_post["description"] = v["description"]
new_post["pubDate"] = v["pubDate"]
new_post["link"] = v["link"]
table.insert(posts,new_post)
end
end
end
end


for k, v in ipairs(posts) do
return table.concat(posts,"")
rss_table[k] = frame:expandTemplate{title = 'Bluesky RSS Feed Row', args = {description = v["description"], pubDate = v["pubDate"], link=v["link"]}}
end
 
return table.concat(rss_table,"")





Revision as of 12:16, 6 June 2025

This module is a custom-designed RSS feed, designed to process a Bluesky RSS feed and output it as a template. Up to three search keywords can be input - OR rather than AND - to find posts that mention any of the keywords. A Bluesky RSS feed can be found by going to any user's page, and typing /rss at the end of the URL before hitting enter.

Usage

{{Template:Bluesky RSS Feed
|url= Bluesky RSS feed URL
|term1= Optional search term
|term2= Optional search term
|term3= Optional search term
}}

Example

{{Template:Bluesky RSS Feed
|url=https://bsky.app/profile/did:plc:ve2p3lz33ivtyikqztvsgtx3/rss
|term1=#NOISZ
}}

Will yield:

Lua error at line 16: bad argument #1 to 'find' (string expected, got nil).



local capiunto = require 'capiunto'
local p = {}
function p.main(frame)

local posts = {}


local rss = mw.ext.externaldata.getWebData {
    url = 'https://bsky.app/profile/did:plc:ve2p3lz33ivtyikqztvsgtx3/rss'
  , data = {pubDate = 'pubDate', description = 'description', link= 'link'}
  , format = 'xml'
}

for k, v in ipairs(rss) do
	if string.find(v["description"],"NOISZ") and v["description"] and v["pubDate"] and v["link"] then
		posts[k] = frame:expandTemplate{title = 'Bluesky RSS Feed Row', args = {description = v["description"], pubDate = v["pubDate"], link=v["link"]}}
	end
end

return table.concat(posts,"")


end

return p