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:
17
Community_News/hosts_in_year.sqlite.sql
Normal file
17
Community_News/hosts_in_year.sqlite.sql
Normal 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)
|
53
Community_News/hosts_list.tpl
Normal file
53
Community_News/hosts_list.tpl
Normal 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
|
||||||
|
-%]
|
@@ -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
|
||||||
|
@@ -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
114
Community_News/thanks_to_hosts
Executable 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
|
||||||
|
|
Reference in New Issue
Block a user