-- Leo's gemini proxy

-- Connecting to perso.pw:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini;

RSS feed for OpenBSD stable packages repository (made with XSLT)


Author: Solène

Date: 05 June 2019

Tags: openbsd automation


NILI am happy to announce there is now a RSS feed for getting news in case of new

packages available on my repository

[https://stable.perso.pw/](https://stable.perso.pw/)


The file is available at [https://stable.perso.pw/rss.xml](https://stable.perso.pw/rss.xml).


I take the occasion of this blog post to explain how the file is generated as I

did not find easy tool for this task, so I ended up doing it myself.


I choosed to use **XSLT**, which is not quite common. Briefly, **XSLT** allows

to use some kind of XML template on a XML data file, this allow loops,

filtering etc... It requires only two parts: the template and the data.



**Simple RSS template**


The following file is a template for my RSS file, we can see a few tags

starting by `xsl` like `xsl:for-each` or `xsl:value-of`.


It's interesting to note that the `xsl-for-each` can use a condition like

`position < 10` in order to limit the loop to the 10 first items.



<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">


<xsl:template match="/">

<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<description></description>


<!-- BEGIN CONFIGURATION -->

<title>OpenBSD unofficial stable packages repository</title>

<link>https://stable.perso.pw/</link>

<atom:link href="https://stable.perso.pw/rss.xml" rel="self" type="application/rss+xml" />

<!-- END CONFIGURATION -->


<!-- Generating items -->

<xsl:for-each select="feed/news[position()&lt;10]">

<item>

<title>

<xsl:value-of select="title"/>

</title>

<description>

<xsl:value-of select="description"/>

</description>

<pubDate>

<xsl:value-of select="date"/>

</pubDate>

</item>

</xsl:for-each>


</channel>

</rss>

</xsl:template>

</xsl:stylesheet>



**Simple data file**


Now, we need some data to use with the template.

I've added a comment block so I can copy / paste it to add a new entry into the

RSS easily. As the date is in a painful format to write for a human, I added to

my Makefile starting the commands a call to a script replacing the string DATE

by the current date with the correct format.


<feed>

<news>

<title>www/mozilla-firefox</title>

<description>Firefox 67.0.1</description>

<date>Wed, 05 Jun 2019 06:00:00 GMT</date>

</news>


<!-- copy paste for a new item

<news>

<title></title>

<description></description>

<date></date>

</news>

-->

</feed>



**Makefile**


I love makefiles, so I share it even if this one is really short.


all:

sh replace_date.sh

xsltproc template.xml news.xml | xmllint -format - | tee rss.xml

scp rss.xml perso.pw:/home/stable/


clean:

rm rss.xml


When I want to add an entry, I copy / paste the comment block in news.xml, add

DATE, run `make` and it's uploaded :)


The command **xsltproc** is available from the package **libxslt** on OpenBSD.


And then, after writing this, I realise that manually editing the result file

rss.xml is as much work as editing the news.xml file and then process it with

xslt... But I keep that blog post as this can be useful for more complicated

cases. :)

-- Response ended

-- Page fetched on Fri Mar 29 15:23:32 2024