Module:Bluesky RSS Feed
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:
22 Dec 2025 04:55 +0000
GODHAND 0.6 is coming tomorrow, but you can listen to this cover of Maybe This Year... definitely today???
💚 @mioricelesta.bsky.social ❤️ @hiiragiyuu.bsky.social
It'll arrive as one of 3 new songs in the default songlist! #PK_GODHAND youtu.be/WToBmEZFc04
https://youtu.be/WToBmEZFc04
20 Dec 2025 05:02 +0000
played through cloverpit after it dropped on mobile. it's fun enough that i think it was worth picking up but it's somehow even shallower of a game than luck be a landlord. this is fine, sometimes you just want to play a junk food roguelike. really accessible to genre beginners
21 Nov 2025 20:00 +0000
i started thinking about this and have gone on a bit of a brain tangent: i think the sicko experiences i love the most are actually "sicko content in games that are not typically considered sicko games". stuff like inscryption kaycee's mod or blue prince curse mode (or kingdom hearts 3 lv1 crit???)
[contains quote post or other embedded content]
01 Oct 2025 15:09 +0000
PROJEKT GODHAND and Chronal Chain will be playable at TOKYO GAME SHOW 2025!
Additionally, a new free demo version of PROJEKT GODHAND will become available during the event! KS beta backers will also receive the Chronal Chain stage 1 demo soon! #PK_GODHAND #ChronalChain
20 Sep 2025 03:40 +0000
NOISZ SL 3.653 is now available on Android! This contains solely internal changes required due to Google policy updates. You may see a small performance improvement on Android 15 or later. #NOISZ_SL
19 Sep 2025 05:51 +0000
NOISZ SL is game of the day in uh. in umm. yeah #NOISZ_SL
15 Sep 2025 03:36 +0000
NOISZ SL 3.652 is now available! This is also a minor bugfix update. #NOISZ_SL
...But if you liked having massive HZ for no reason, we do have a game for you: godhand.anarch.games
https://godhand.anarch.games/
local capiunto = require 'capiunto'
local p = {}
function p.main(frame)
local args = frame:getParent().args
local posts = {}
local links = {}
local searchTerms = {}
local itemBefore= {}
itemBefore["pubDate"] = ""
-- These are the search terms as defined in the template.
if args.term1 or args.term2 or args.term3 then
searchTerms[1] = args.term1
searchTerms[2] = args.term2
searchTerms[3] = args.term3
-- If no search terms, then the search terms array is left blank so it'll match everything.
else
searchTerms = {""}
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 {
url = args.url
, data = {pubDate = 'pubDate', description = 'description', link= 'link'}
, format = 'xml'
}
-- We iterate over every post found in the RSS feed, in chronological order - hence ipairs. We need description, publish date AND link to know that it's a post. Additionally, k has to be more than 1 as the very first post to pop up in an RSS feed is the user bio which is not an actual post. The "links" array is a directory of links that have been processed; if it's already been processed, then it won't be added again. This helps for if there's more than one search term.
for k, v in ipairs(rss) do
if v["description"] and v["pubDate"] and v["link"] then
-- Search over every search term in the search terms to make sure a post contains that term. If so, 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 array which will later be expanded in full.
for a, b in pairs(searchTerms) do
if string.find(v["description"],b) and links[v["link"]] ~= true then
-- Here we assign a new key to the links table, so that it can be accessed directly by the above conditions. The key is the post link, which is the one accessible unique attribute of each post.
if k==1 then
itemBefore["pubDate"] = v["pubDate"]
end
links[v["link"]] = true
table.insert(posts, frame:expandTemplate{title = 'Bluesky RSS Feed Row', args = {description = itemBefore["description"], pubDate = itemBefore["pubDate"], link=v["link"]}})
end
end
-- Bluesky's RSS feed is a little fucky; the first item in the table of items is just the bio, which has no published date, which means publish date for posts get thrown one out of order. So, I set the publish date in the table to be set here to be used in the next loop, to realign the dates.
itemBefore["pubDate"] = v["pubDate"]
itemBefore["link"] = v["link"]
itemBefore["description"] = v["description"]
end
end
-- table.concat to convert it from Lua table form to a form the wikitext can use - hence why it was frame:expand and not just raw data being put in.
return table.concat(posts,"")
end
return p