Addition of tool to list hosts in a year

hosts_in_year.sqlite.sql: query to return all hosts contributing shows
    in a period (usually a year)

hosts_list.tpl: `TT²` template to generate an HTML list from the output
    of hosts_in_year.sqlite.sql

make_shownotes: trivial tidying

thanks_to_hosts: Bash script to simplify the generation of the HTML
    which thanks a year's hosts for their contributions
This commit is contained in:
Dave Morriss
2025-10-06 23:20:28 +01:00
parent 1a69042b24
commit 782f501c2b
5 changed files with 189 additions and 40 deletions

View File

@@ -0,0 +1,17 @@
--
-- hosts_in_year.sqlite.sql 2025-10-06
--
-- Query for use with 'query2tt2' to generate a list of hosts who contributed
-- shows in a particular year. Designed to be used with the 'hosts_list.tpl'
-- template.
-- The two '?' placeholders in the query are to be filled with 'YYYY-01-01'
-- for the start of the year and 'YYYY-12-31'. The values can be passed using
-- the '-dbargs' option to 'query2tt2'.
--
SELECT DISTINCT
printf('%04d',h.hostid) AS hostid, h.host AS hostname
FROM eps e
JOIN hosts h ON e.hostid = h.hostid
WHERE e.date BETWEEN ? AND ?
AND title != 'Reserved'
ORDER BY lower(h.host)

View File

@@ -0,0 +1,53 @@
[%# ==========================================================================
This is the TT2 file for making a list of hosts contributing to HPR in the
current year which is run in conjunction with 'query2tt2'. It's invoked
by using the Bash script 'thanks_to_hosts'.
[We can't use the planned pure TT2 version since Template::Plugin::DBI
can't run over the SSH tunnel.]
The 'query2tt2' script needs a configuration file '.hpr_sqlite.cfg,' though this
is the default.
The file 'hosts_in_year.sqlite.sql' is used to generate the 'result' hash
which is used by this template. The query needs to be given the first and last
dates of the year.
This template uses the variable 'year' which can be provided to 'query2tt2'
using the option '-def year="$year"' or similar. If not provided the default
value is the current year.
The 'result' hash is sorted by host name. The loop which writes the output
generates links to the HPR website, with 8 per list element
Changes:
-------
2023-10-30: The correspondent URL has changed with the static site, and needs
the hostid to be zero-padded.
2025-01-01: We now use a copy of the live database, built from the HPR server
and available as https://www.hackerpublicradio.org/hpr.sql. This is
a MySQL/MariaDB dump which can be used to create a MariaDB or a SQLite copy.
See the script collect_HPR_database for how the SQLite version is created.
========================================================================== -%]
[%- USE date -%]
[%- DEFAULT
year = date.format(date.now,'%Y','UTC')
-%]
<h3>Thanks to all [% result.size %] HPR contributors in [% year %]!</h3>
[% limit = 8 -%]
[% count = 0 -%]
<p><ul><li>
[% FOREACH h = result -%]
<a href="https://hackerpublicradio.org/correspondents/[% h.hostid %].html">[% h.hostname %]</a>
[%- IF loop.count mod limit == 0 || loop.count == result.size -%].[% ELSE %],[% END %]
[% count = count + 1 -%]
[% IF count == limit -%]
[% count = 0 -%]
</li><li>
[% END -%]
[% END -%]
</li></ul></p>
[%#
# vim: syntax=tt2:ts=8:sw=4:ai:et:tw=78:fo=tcrqn21:fdm=marker
-%]

View File

@@ -159,8 +159,11 @@ Options( \%options );
# #
# Default help is just the USAGE section # Default help is just the USAGE section
# #
pod2usage( -msg => "$PROG version $VERSION\n", -verbose => 0, -exitval => 1 ) pod2usage(
if ( $options{'help'} ); -msg => "$PROG version $VERSION\n",
-verbose => 0,
-exitval => 1
) if ( $options{'help'} );
# #
# Full documentation if requested with -documentation or -man # Full documentation if requested with -documentation or -man

View File

@@ -1,38 +0,0 @@
2021-10-01,2021-10-30 14:00:00
2022-06-01,2022-07-02 14:00:00
2022-07-01,2022-07-30 14:00:00
2022-08-01,2022-09-03 14:00:00
2022-09-01,2022-10-01 14:00:00
2022-10-01,2022-11-05 14:00:00
2022-11-01,2022-12-03 15:00:00
2022-12-01,2022-12-27 15:00:00
2023-01-01,2023-02-04 15:00:00
2023-02-01,2023-03-04 15:00:00
2023-03-01,2023-04-01 15:00:00
2023-04-01,2023-04-29 15:00:00
2023-05-01,2023-06-03 15:00:00
2023-07-01,2023-08-05 15:00:00
2023-08-01,2023-09-02 15:00:00
2023-09-01,2023-09-30 15:00:00
2023-10-01,2023-11-04 15:00:00
2023-11-01,2023-12-02 15:00:00
2023-12-01,2023-12-30 15:00:00
2024-01-01,2024-02-04 15:00:00
2024-02-01,2024-03-02 15:00:00
2024-03-01,2024-03-30 15:00:00
2024-05-01,2024-06-02 13:00:00
2024-06-01,2024-06-28 15:00:00
2024-07-01,2024-08-02 15:00:00
2024-08-01,2024-08-29 15:00:00
2024-09-01,2024-10-04 15:00:00
2024-10-01,2024-11-01 15:00:00
2024-11-01,2024-11-29 15:00:00
2024-12-01,2025-01-03 15:00:00
2025-01-01,2025-01-31 15:00:00
2025-02-01,2025-02-28 16:00:00
2025-03-01,2025-04-04 16:00:00
2025-04-01,2025-05-02 15:00:00
2025-05-01,2025-05-30 15:00:00
2025-06-01,2025-07-04 15:00:00
2025-07-01,2025-08-01 15:00:00
2025-08-01,2025-08-29 15:00:00

114
Community_News/thanks_to_hosts Executable file
View File

@@ -0,0 +1,114 @@
#!/bin/bash -
#===============================================================================
#
# FILE: thanks_to_hosts
#
# USAGE: ./thanks_to_hosts [year]
#
# DESCRIPTION: Generates HTML to be added to the Community News at the end of
# the year in order to thank hosts contributing shows in that
# year.
#
# OPTIONS: ---
# REQUIREMENTS: ---
# BUGS: ---
# NOTES: ---
# AUTHOR: Dave Morriss (djm), Dave.Morriss@gmail.com
# VERSION: 0.0.1
# CREATED: 2025-10-06 16:38:42
# REVISION: 2025-10-06 18:06:12
#
#===============================================================================
set -o nounset # Treat unset variables as an error
#
# Process the year, either as an argument or as a default (the current year)
#
YEAR="${1:-}"
if [[ -z $YEAR ]]; then
YEAR="$(date +%Y)"
else
if ! [[ $YEAR =~ ^[0-9]{4}$ ]]; then
echo "Invalid year: '$YEAR'"
exit 1
fi
fi
#
# Various constants
#
# Uncomment the first form and comment out the second form unless 'query2tt2'
# is in your path. It or a link to the script will need to be in the current
# directory.
#
# DBQUERY='./query2tt2'
DBQUERY="$(command -v query2tt2)"
#
# Files expected to be in the current directory, or which will be written
# there. These could be given full absolute paths if desired.
#
DB='hpr.db'
CONFIG='.hpr_sqlite.cfg'
QUERY='hosts_in_year.sqlite.sql'
TEMPLATE='hosts_list.tpl'
OUTPUT="hosts_in_year_${YEAR}.html"
# [Nothing should need editing below here]
#
# Start and end of the year
#
YRSTART="${YEAR}-01-01"
YREND="${YEAR}-12-31"
#
# Sanity checks
#
[ -e "$DBQUERY" ] || {
echo "Unable to find '$DBQUERY'"
exit 1
}
[ -e $DB ] || {
echo "Unable to find '$DB'"
exit 1
}
[ -e $CONFIG ] || {
echo "Unable to find '$CONFIG'"
exit 1
}
[ -e $QUERY ] || {
echo "Unable to find '$QUERY'"
exit 1
}
[ -e $TEMPLATE ] || {
echo "Unable to find '$TEMPLATE'"
exit 1
}
#
# Query the SQLite database
#
$DBQUERY \
-config=$CONFIG \
-query=$QUERY \
-template=$TEMPLATE \
-dbarg "$YRSTART" \
-dbarg "$YREND" \
-def "year=${YEAR}" \
-out="$OUTPUT"
RES=$?
#
# Deal with failures
#
if [[ $RES -eq 0 ]]; then
echo "HTML written to $OUTPUT"
else
echo "Problem generating HTML"
fi
exit $RES
# vim: syntax=sh:ts=8:sw=4:ai:et:tw=78:fo=tcrqn21