some more improvements - www.codemadness.org - www.codemadness.org saait content files
 (HTM) git clone git://git.codemadness.org/www.codemadness.org
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit fb03273317a40856b975a50e0daac30f74bf287c
 (DIR) parent 174feb76c952a617db8c3c74442eb00395e27aae
 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Wed, 10 May 2023 20:06:44 +0200
       
       some more improvements
       
       Diffstat:
         M output/atom.xml                     |      12 ++++++++++++
         M output/atom_content.xml             |     122 +++++++++++++++++++++++++++++++
         M output/index                        |       1 +
         M output/index.html                   |       1 +
         M output/rss.xml                      |       8 ++++++++
         M output/rss_content.xml              |     117 +++++++++++++++++++++++++++++++
         M output/sitemap.xml                  |       4 ++++
         M output/twtxt.txt                    |       1 +
         M output/urllist.txt                  |       1 +
         M pages/youtube-feed-improved.md      |      10 +++++++---
       
       10 files changed, 274 insertions(+), 3 deletions(-)
       ---
 (DIR) diff --git a/output/atom.xml b/output/atom.xml
       @@ -7,6 +7,18 @@
                <id>https://www.codemadness.org/atom.xml</id>
                <link rel="self" type="application/atom+xml" href="https://www.codemadness.org/atom.xml" />
        <entry>
       +        <title>Improved Youtube RSS/Atom feed</title>
       +        <link rel="alternate" type="text/html" href="https://www.codemadness.org/youtube-feed-improved.html" />
       +        <id>https://www.codemadness.org/youtube-feed-improved.html</id>
       +        <updated>2023-05-10T00:00:00Z</updated>
       +        <published>2023-05-10T00:00:00Z</published>
       +        <author>
       +                <name>Hiltjo</name>
       +                <uri>https://www.codemadness.org</uri>
       +        </author>
       +        <summary>Improved Youtube Atom feed by adding video duration and filtering away shorts</summary>
       +</entry>
       +<entry>
                <title>A simple TODO application</title>
                <link rel="alternate" type="text/html" href="https://www.codemadness.org/todo-application.html" />
                <id>https://www.codemadness.org/todo-application.html</id>
 (DIR) diff --git a/output/atom_content.xml b/output/atom_content.xml
       @@ -7,6 +7,128 @@
                <id>https://www.codemadness.org/atom_content.xml</id>
                <link rel="self" type="application/atom+xml" href="https://www.codemadness.org/atom_content.xml" />
        <entry>
       +        <title>Improved Youtube RSS/Atom feed</title>
       +        <link rel="alternate" type="text/html" href="https://www.codemadness.org/youtube-feed-improved.html" />
       +        <id>https://www.codemadness.org/youtube-feed-improved.html</id>
       +        <updated>2023-05-10T00:00:00Z</updated>
       +        <published>2023-05-10T00:00:00Z</published>
       +        <author>
       +                <name>Hiltjo</name>
       +                <uri>https://www.codemadness.org</uri>
       +        </author>
       +        <summary>Improved Youtube Atom feed by adding video duration and filtering away shorts</summary>
       +        <content type="html"><![CDATA[<h1>Improved Youtube RSS/Atom feed</h1>
       +        <p><strong>Last modification on </strong> <time>2023-05-10</time></p>
       +        <p>... improved at least for my preferences ;)</p>
       +<h2>Features</h2>
       +<ul>
       +<li>Add the video duration to the title to quickly see how long the video is.</li>
       +<li>Filter away Youtube shorts and upcoming videos / announcements: only videos are shown.</li>
       +<li>Support more output formats: Atom, <a href="https://www.jsonfeed.org/version/1.1/">JSON Feed</a> or
       +<a href="sfeed.1.txt">sfeed</a> Tab-Separated-Value format.</li>
       +<li>Easy to build and deploy: can be run as a CGI program as a static-linked binary in a chroot.</li>
       +<li>Secure: additionally to running in a chroot it can use pledge(2) and unveil(2)
       +on OpenBSD to restrict system calls and access to the filesystem.</li>
       +</ul>
       +<h2>How to use</h2>
       +<p>There is an option to run directly from the command-line or in CGI-mode.  When
       +the environment variable $REQUEST_URI is set it is automatically run in CGI
       +mode.</p>
       +<p>Command-line usage:</p>
       +<pre><code>youtube_feed channelid atom
       +youtube_feed channelid json
       +youtube_feed channelid tsv
       +</code></pre>
       +<p>CGI program usage:</p>
       +<p>The last basename part of the URL should be the channelid + the output format
       +extension. It defaults to TSV if there is no extension.</p>
       +<p>For example:</p>
       +<pre><code>Atom XML:     https://codemadness.org/yt-chan/UCrbvoMC0zUvPL8vjswhLOSw.xml
       +JSON:         https://codemadness.org/yt-chan/UCrbvoMC0zUvPL8vjswhLOSw.json
       +TSV:          https://codemadness.org/yt-chan/UCrbvoMC0zUvPL8vjswhLOSw.tsv
       +TSV, default: https://codemadness.org/yt-chan/UCrbvoMC0zUvPL8vjswhLOSw
       +</code></pre>
       +<p>An OpenBSD httpd.conf using slowcgi as an example:</p>
       +<pre><code>server "codemadness.org" {
       +        location "/yt-chan/*" {
       +                request strip 1
       +                root "/cgi-bin/yt-chan"
       +                fastcgi socket "/run/slowcgi.sock"
       +        }
       +}
       +</code></pre>
       +<h2>Using it with <a href="sfeed.html">sfeed</a></h2>
       +<p>sfeedrc example of an existing Youtube RSS/Atom feed:</p>
       +<pre><code># list of feeds to fetch:
       +feeds() {
       +        # feed &lt;name&gt; &lt;feedurl&gt; [basesiteurl] [encoding]
       +        # normal Youtube Atom feed.
       +        feed "yt IM" "https://www.youtube.com/feeds/videos.xml?channel_id=UCrbvoMC0zUvPL8vjswhLOSw"
       +}
       +</code></pre>
       +<p>Use the new Atom feed directly using the CGI-mode and Atom output format:</p>
       +<pre><code># list of feeds to fetch:
       +feeds() {
       +        # feed &lt;name&gt; &lt;feedurl&gt; [basesiteurl] [encoding]
       +        # new Youtube Atom feed.
       +        feed "idiotbox IM" "https://codemadness.org/yt-chan/UCrbvoMC0zUvPL8vjswhLOSw.xml"
       +}
       +</code></pre>
       +<p>... or convert directly using a custom connector program on the local system via the command-line:</p>
       +<pre><code># fetch(name, url, feedfile)
       +fetch() {
       +        case "$1" in
       +        "connector example")
       +                youtube_feed "$2";;
       +        *)
       +                curl -L --max-redirs 0 -H "User-Agent:" -f -s -m 15 \
       +                        "$2" 2&gt;/dev/null;;
       +        esac
       +}
       +
       +# parse and convert input, by default XML to the sfeed(5) TSV format.
       +# parse(name, feedurl, basesiteurl)
       +parse() {
       +        case "$1" in
       +        "connector example")
       +                cat;;
       +        *)
       +                sfeed "$3";;
       +        esac
       +}
       +
       +# list of feeds to fetch:
       +feeds() {
       +        # feed &lt;name&gt; &lt;feedurl&gt; [basesiteurl] [encoding]
       +        feed "connector example" "UCrbvoMC0zUvPL8vjswhLOSw"
       +}
       +</code></pre>
       +<h2>Screenshot using sfeed_curses</h2>
       +<p><a href="downloads/screenshots/sfeed_curses_youtube.png"><img src="downloads/screenshots/sfeed_curses_youtube.png" alt="Screenshot showing the improved Youtube feed" width="480" height="270" loading="lazy" /></a></p>
       +<h2>Clone</h2>
       +<pre><code>git clone git://git.codemadness.org/frontends
       +</code></pre>
       +<h2>Browse</h2>
       +<p>You can browse the source-code at:</p>
       +<ul>
       +<li><a href="https://git.codemadness.org/frontends/">https://git.codemadness.org/frontends/</a></li>
       +<li><a href="gopher://codemadness.org/1/git/frontends">gopher://codemadness.org/1/git/frontends</a></li>
       +</ul>
       +<p>The program is: youtube/feed</p>
       +<h2>Dependencies</h2>
       +<ul>
       +<li>C compiler.</li>
       +<li>LibreSSL + libtls.</li>
       +</ul>
       +<h2>Build and install</h2>
       +<pre><code>$ make
       +# make install
       +</code></pre>
       +<h1>That's all</h1>
       +<p>I hope by sharing this it is useful to someone other than me as well.</p>
       +]]></content>
       +</entry>
       +<entry>
                <title>A simple TODO application</title>
                <link rel="alternate" type="text/html" href="https://www.codemadness.org/todo-application.html" />
                <id>https://www.codemadness.org/todo-application.html</id>
 (DIR) diff --git a/output/index b/output/index
       @@ -11,6 +11,7 @@ i                codemadness.org        70
        i                codemadness.org        70
        iPhlog posts                codemadness.org        70
        i                codemadness.org        70
       +12023-05-10 Improved Youtube RSS/Atom feed        /phlog/youtube-feed        codemadness.org        70
        12022-07-01 A simple TODO application        /phlog/todo        codemadness.org        70
        12022-03-23 2FA TOTP without crappy authenticator apps        /phlog/totp        codemadness.org        70
        12021-10-23 Setup an OpenBSD RISCV64 VM in QEMU        /phlog/openbsd-riscv64-vm        codemadness.org        70
 (DIR) diff --git a/output/index.html b/output/index.html
       @@ -40,6 +40,7 @@
                        <div id="main">
                                <h1>Posts</h1>
                                <table>
       +<tr><td><time>2023-05-10</time></td><td><a href="youtube-feed-improved.html">Improved Youtube RSS/Atom feed</a></td></tr>
        <tr><td><time>2022-07-01</time></td><td><a href="todo-application.html">A simple TODO application</a></td></tr>
        <tr><td><time>2022-03-23</time></td><td><a href="totp.html">2FA TOTP without crappy authenticator apps</a></td></tr>
        <tr><td><time>2021-10-23</time></td><td><a href="openbsd-riscv64-vm.html">Setup an OpenBSD RISCV64 VM in QEMU</a></td></tr>
 (DIR) diff --git a/output/rss.xml b/output/rss.xml
       @@ -7,6 +7,14 @@
                <description>blog with various projects and articles about computer-related things</description>
                <link>https://www.codemadness.org</link>
        <item>
       +        <title>Improved Youtube RSS/Atom feed</title>
       +        <link>https://www.codemadness.org/youtube-feed-improved.html</link>
       +        <guid>https://www.codemadness.org/youtube-feed-improved.html</guid>
       +        <dc:date>2023-05-10T00:00:00Z</dc:date>
       +        <author>Hiltjo</author>
       +        <description>Improved Youtube Atom feed by adding video duration and filtering away shorts</description>
       +</item>
       +<item>
                <title>A simple TODO application</title>
                <link>https://www.codemadness.org/todo-application.html</link>
                <guid>https://www.codemadness.org/todo-application.html</guid>
 (DIR) diff --git a/output/rss_content.xml b/output/rss_content.xml
       @@ -7,6 +7,123 @@
                <description>blog with various projects and articles about computer-related things</description>
                <link>https://www.codemadness.org</link>
        <item>
       +        <title>Improved Youtube RSS/Atom feed</title>
       +        <link>https://www.codemadness.org/youtube-feed-improved.html</link>
       +        <guid>https://www.codemadness.org/youtube-feed-improved.html</guid>
       +        <dc:date>2023-05-10T00:00:00Z</dc:date>
       +        <author>Hiltjo</author>
       +        <description><![CDATA[<h1>Improved Youtube RSS/Atom feed</h1>
       +        <p><strong>Last modification on </strong> <time>2023-05-10</time></p>
       +        <p>... improved at least for my preferences ;)</p>
       +<h2>Features</h2>
       +<ul>
       +<li>Add the video duration to the title to quickly see how long the video is.</li>
       +<li>Filter away Youtube shorts and upcoming videos / announcements: only videos are shown.</li>
       +<li>Support more output formats: Atom, <a href="https://www.jsonfeed.org/version/1.1/">JSON Feed</a> or
       +<a href="sfeed.1.txt">sfeed</a> Tab-Separated-Value format.</li>
       +<li>Easy to build and deploy: can be run as a CGI program as a static-linked binary in a chroot.</li>
       +<li>Secure: additionally to running in a chroot it can use pledge(2) and unveil(2)
       +on OpenBSD to restrict system calls and access to the filesystem.</li>
       +</ul>
       +<h2>How to use</h2>
       +<p>There is an option to run directly from the command-line or in CGI-mode.  When
       +the environment variable $REQUEST_URI is set it is automatically run in CGI
       +mode.</p>
       +<p>Command-line usage:</p>
       +<pre><code>youtube_feed channelid atom
       +youtube_feed channelid json
       +youtube_feed channelid tsv
       +</code></pre>
       +<p>CGI program usage:</p>
       +<p>The last basename part of the URL should be the channelid + the output format
       +extension. It defaults to TSV if there is no extension.</p>
       +<p>For example:</p>
       +<pre><code>Atom XML:     https://codemadness.org/yt-chan/UCrbvoMC0zUvPL8vjswhLOSw.xml
       +JSON:         https://codemadness.org/yt-chan/UCrbvoMC0zUvPL8vjswhLOSw.json
       +TSV:          https://codemadness.org/yt-chan/UCrbvoMC0zUvPL8vjswhLOSw.tsv
       +TSV, default: https://codemadness.org/yt-chan/UCrbvoMC0zUvPL8vjswhLOSw
       +</code></pre>
       +<p>An OpenBSD httpd.conf using slowcgi as an example:</p>
       +<pre><code>server "codemadness.org" {
       +        location "/yt-chan/*" {
       +                request strip 1
       +                root "/cgi-bin/yt-chan"
       +                fastcgi socket "/run/slowcgi.sock"
       +        }
       +}
       +</code></pre>
       +<h2>Using it with <a href="sfeed.html">sfeed</a></h2>
       +<p>sfeedrc example of an existing Youtube RSS/Atom feed:</p>
       +<pre><code># list of feeds to fetch:
       +feeds() {
       +        # feed &lt;name&gt; &lt;feedurl&gt; [basesiteurl] [encoding]
       +        # normal Youtube Atom feed.
       +        feed "yt IM" "https://www.youtube.com/feeds/videos.xml?channel_id=UCrbvoMC0zUvPL8vjswhLOSw"
       +}
       +</code></pre>
       +<p>Use the new Atom feed directly using the CGI-mode and Atom output format:</p>
       +<pre><code># list of feeds to fetch:
       +feeds() {
       +        # feed &lt;name&gt; &lt;feedurl&gt; [basesiteurl] [encoding]
       +        # new Youtube Atom feed.
       +        feed "idiotbox IM" "https://codemadness.org/yt-chan/UCrbvoMC0zUvPL8vjswhLOSw.xml"
       +}
       +</code></pre>
       +<p>... or convert directly using a custom connector program on the local system via the command-line:</p>
       +<pre><code># fetch(name, url, feedfile)
       +fetch() {
       +        case "$1" in
       +        "connector example")
       +                youtube_feed "$2";;
       +        *)
       +                curl -L --max-redirs 0 -H "User-Agent:" -f -s -m 15 \
       +                        "$2" 2&gt;/dev/null;;
       +        esac
       +}
       +
       +# parse and convert input, by default XML to the sfeed(5) TSV format.
       +# parse(name, feedurl, basesiteurl)
       +parse() {
       +        case "$1" in
       +        "connector example")
       +                cat;;
       +        *)
       +                sfeed "$3";;
       +        esac
       +}
       +
       +# list of feeds to fetch:
       +feeds() {
       +        # feed &lt;name&gt; &lt;feedurl&gt; [basesiteurl] [encoding]
       +        feed "connector example" "UCrbvoMC0zUvPL8vjswhLOSw"
       +}
       +</code></pre>
       +<h2>Screenshot using sfeed_curses</h2>
       +<p><a href="downloads/screenshots/sfeed_curses_youtube.png"><img src="downloads/screenshots/sfeed_curses_youtube.png" alt="Screenshot showing the improved Youtube feed" width="480" height="270" loading="lazy" /></a></p>
       +<h2>Clone</h2>
       +<pre><code>git clone git://git.codemadness.org/frontends
       +</code></pre>
       +<h2>Browse</h2>
       +<p>You can browse the source-code at:</p>
       +<ul>
       +<li><a href="https://git.codemadness.org/frontends/">https://git.codemadness.org/frontends/</a></li>
       +<li><a href="gopher://codemadness.org/1/git/frontends">gopher://codemadness.org/1/git/frontends</a></li>
       +</ul>
       +<p>The program is: youtube/feed</p>
       +<h2>Dependencies</h2>
       +<ul>
       +<li>C compiler.</li>
       +<li>LibreSSL + libtls.</li>
       +</ul>
       +<h2>Build and install</h2>
       +<pre><code>$ make
       +# make install
       +</code></pre>
       +<h1>That's all</h1>
       +<p>I hope by sharing this it is useful to someone other than me as well.</p>
       +]]></description>
       +</item>
       +<item>
                <title>A simple TODO application</title>
                <link>https://www.codemadness.org/todo-application.html</link>
                <guid>https://www.codemadness.org/todo-application.html</guid>
 (DIR) diff --git a/output/sitemap.xml b/output/sitemap.xml
       @@ -1,6 +1,10 @@
        <?xml version="1.0" encoding="UTF-8"?>
        <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
        <url>
       +        <loc>https://www.codemadness.org/youtube-feed-improved.html</loc>
       +        <lastmod>2023-05-10</lastmod>
       +</url>
       +<url>
                <loc>https://www.codemadness.org/todo-application.html</loc>
                <lastmod>2022-07-01</lastmod>
        </url>
 (DIR) diff --git a/output/twtxt.txt b/output/twtxt.txt
       @@ -1,3 +1,4 @@
       +2023-05-10T00:00:00Z        Improved Youtube RSS/Atom feed: https://www.codemadness.org/youtube-feed-improved.html
        2022-07-01T00:00:00Z        A simple TODO application: https://www.codemadness.org/todo-application.html
        2022-03-23T00:00:00Z        2FA TOTP without crappy authenticator apps: https://www.codemadness.org/totp.html
        2021-10-23T00:00:00Z        Setup an OpenBSD RISCV64 VM in QEMU: https://www.codemadness.org/openbsd-riscv64-vm.html
 (DIR) diff --git a/output/urllist.txt b/output/urllist.txt
       @@ -1,3 +1,4 @@
       +https://www.codemadness.org/youtube-feed-improved.html
        https://www.codemadness.org/todo-application.html
        https://www.codemadness.org/totp.html
        https://www.codemadness.org/openbsd-riscv64-vm.html
 (DIR) diff --git a/pages/youtube-feed-improved.md b/pages/youtube-feed-improved.md
       @@ -119,8 +119,7 @@ You can browse the source-code at:
        * <https://git.codemadness.org/frontends/>
        * <gopher://codemadness.org/1/git/frontends>
        
       -The program is:
       -        youtube/feed
       +The program is: youtube/feed
        
        
        ## Dependencies
       @@ -128,8 +127,13 @@ The program is:
        * C compiler.
        * LibreSSL + libtls.
        
       -    
       +
        ## Build and install
        
                $ make
                # make install
       +
       +
       +# That's all
       +
       +I hope by sharing this it is useful to someone other than me as well.