Module:Bluesky RSS Feed: Difference between revisions

From NOISZ Wiki
No edit summary
(are the comments breaking it?)
Line 8: Line 8:
local searchTerms = {}
local searchTerms = {}


-- These are the search terms as defined in the template.
if args.term1 or args.term2 or args.term3 then
if args.term1 or args.term2 or args.term3 then
searchTerms[1] = args.term1
searchTerms[1] = args.term1
Line 14: Line 13:
searchTerms[3] = args.term3
searchTerms[3] = args.term3
else  
else  
-- If no search terms, then the search terms array is left blank so it'll match everything.
searchTerms = {""}
searchTerms = {""}
end
end


-- We use externaldata.getWebDate to obtain XML format data from the RSS feed at the URL defined by the user.
local rss = mw.ext.externaldata.getWebData {
local rss = mw.ext.externaldata.getWebData {
     url = args.url
     url = args.url
Line 25: Line 22:
}
}


-- We iterate over every post found in the RSS feed, in chronological order - hence ipairs.


for k, v in ipairs(rss) do
for k, v in ipairs(rss) do
-- We need description, publish date AND link to know that it's a post. Additionally, k has to be more than one as the very first post to pop up in an RSS feed is the user bio which is not an actual post.
if v["description"] and v["pubDate"] and v["link"] and k > 1 then
if v["description"] and v["pubDate"] and v["link"] and k > 1 then
-- Search over every search term in the search terms to make sure a post contains that term.
for a, b in pairs(searchTerms) do
for a, b in pairs(searchTerms) do
if string.find(v["description"],b) then
if string.find(v["description"],b) then
-- We bundle up the information into template form via the frame:expandTemplate method - the "Bluesky RSS Feed Row" template, to be precise - and put it into an incremental table which will later be expanded in full.
table.insert(posts, frame:expandTemplate{title = 'Bluesky RSS Feed Row', args = {description = v["description"], pubDate = v["pubDate"], link=v["link"]}})
table.insert(posts, frame:expandTemplate{title = 'Bluesky RSS Feed Row', args = {description = v["description"], pubDate = v["pubDate"], link=v["link"]}})
end
end
Line 42: Line 33:
end
end


-- Table.concat to move it from Lua table form to a form the wikitext can use.
return table.concat(posts,"")
return table.concat(posts,"")



Revision as of 17:36, 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:

01 Mar 2026 05:12 +0000
In DEIFIED LINEAGE, experience 5 songs in two very different ways as they transcend the bounds of time. An upcoming DLC pack for NOISZ STΔRLIVHT and PROJEKT GODHAND! #NOISZ_SL #PK_GODHAND

11 Feb 2026 04:49 +0000
NOISZ SL 4.004 is now available! This version makes some additional fixes and adjustments. (Unless regressions occur, this is likely to be the last version until the next content update.) #NOISZ_SL

10 Feb 2026 14:29 +0000
NOISZ SL 4.003 is now available! This version fixes some additional issues with finale content and a bug with uncleared Recursive events. #NOISZ_SL




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

local args = frame:getParent().args
local posts = {}
local searchTerms = {}

if args.term1 or args.term2 or args.term3 then
	searchTerms[1] = args.term1
	searchTerms[2] = args.term2
	searchTerms[3] = args.term3
else 
	searchTerms = {""}
end

local rss = mw.ext.externaldata.getWebData {
    url = args.url
  , data = {pubDate = 'pubDate', description = 'description', link= 'link'}
  , format = 'xml'
}


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

return table.concat(posts,"")


end

return p