enhance for parameters and future ISO date

This commit is contained in:
vv01f 2020-04-15 02:14:25 +02:00
parent f552bc36ad
commit 2cfc41a5e2
Signed by untrusted user who does not match committer: vv01f
GPG Key ID: 02625A16AC1D1FF6
2 changed files with 174 additions and 213 deletions

116
data.xml
View File

@ -20,20 +20,6 @@
]>
<schleudern>
<!--schleuder id="101">
<date></date>
<image></image>
<link filesize=""></link>
<link filesize=""></link>
<preface></preface>
</schleuder-->
<!--schleuder id="100">
<date></date>
<image></image>
<link filesize=""></link>
<link filesize=""></link>
<preface></preface>
</schleuder--><!-- todo: info aus #98 in #100 verschieben, teaser schreiben -->
<schleuder id="99">
<date>Fri, 15 Sep 2019 00:00 UT</date>
<image>covers/ds099.jpg</image>
@ -57,559 +43,477 @@ Zudem gibt es einen neuen Redaktions-PGP-Key, erhältlich auf allen Keyservern o
<teaser>Lange war es ruhig um die Datenschleuder. Fast schon zu lange. Daher freuen wir uns umso mehr, dass die Ausgabe 97 fertig gedruckt und auf dem Weg zu den Mitgliedern und Abonnenten ist. Wie üblich können Abonnements und Einzelausgaben <a href="order.html">direkt beim CCC</a> erworben werden.</teaser>
</schleuder>
<schleuder id="96">
<date>Sun, 18 Dec 2011 00:00 UT</date>
<image>covers/ds96.jpg</image>
<link>/pdfs/ds096.pdf</link>
<filesize>9558786</filesize>
<date>Sun, 18 Dec 2011 00:00 UT</date>
<teaser>Passend zum 28. Chaos Communication Congress ist die 96. Datenschleuder erschienen und befindet sich ATM auf dem Weg zu den Abonnenten. Wie immer gibt es zur Überbrückung der Wartezeit das <a href="096/editorial.html">Editorial online zum Selberausdrucken</a>.</teaser>
<info date="Sun, 03 Jun 2012 00:00 UT">Es gibt einen neuen Redaktions-PGP-Key, erhältlich auf allen Keyservern oder <a href="public-key.asc">hier</a>.</info>
</schleuder>
<schleuder id="95">
<date>Sun, 04 Sep 2011 00:00 UT</date>
<image>covers/ds95.jpg</image>
<link>/pdfs/ds095.pdf</link>
<filesize>1633452</filesize>
<date>Sun, 04 Sep 2011 00:00 UT</date>
<teaser>Nach längerer Wartezeit ist jetzt die 95. Ausgabe der Datenschleuder erschienen und auf dem Weg zu den Abonnenten. Sie ist wie immer im gut sortierten Buchhandel oder <a href="order.html">direkt vom CCC</a> auch als Einzelexemplar zu beziehen. Während Ihr auf Euer Exemplar wartet, lest doch solange <a href="095/editorial.html">das Editorial</a>.</teaser>
<info date="Wed, 07 Sep 2011 00:00 UT">Aufgrund eines kleinen «Fuckups» wird die Datenschleuder bei den Abonnenten voraussichtlich. fünf. bis zehn Minu... äh, Tage später eintreffen. Wir bitten um Verständnis.</info>
</schleuder>
<schleuder id="94">
<date>Mon, 27 Sep 2010 00:00 UT</date>
<image>covers/ds94.jpg</image>
<link>/pdfs/ds094.pdf</link>
<filesize>9366127</filesize>
<date>Mon, 27 Sep 2010 00:00 UT</date>
</schleuder>
<schleuder id="93">
<date>Wed, 17 Dec 2008 00:00 UT</date>
<image>covers/ds93.jpg</image>
<link>/pdfs/ds093.pdf</link>
<filesize>8651240</filesize>
<date>Wed, 17 Dec 2008 00:00 UT</date>
<teaser>Pünktlich zum <a href="https://events.ccc.de/congress/2008/wiki/Main_Page/">25. Chaos Communication Congress</a> sollten die inzwischen fast 2800 Mitglieder und Abonnenten ihre Datenschleuder im Briefkasten vorfinden. Schwerpunkte sind in dieser Ausgabe der dilettantische Umgang des BNDs mit ihren achsogeheimen Netzen und eine Analyse des XMPP-Protokolls nach kryptografischen Gesichtspunkten. Wie immer gibt es zum Schmökern neben der bereits veröffentlichten <a href="vorab/Sicherheitsleck_Infratest.pdf">Vorabmeldung</a> auch das <a href="093/editorial.html">Editorial</a> zum Internetausdrucken und vorm Kamin lesen.</teaser>
<info date="Wed, 18 Mar 2009 00:00 UT">Der Vorstand des CCC hat die Wiedereinführung der beliebten 8-Ausgaben Miniabos beschlossen. Details gibt es <a href="order.html">hier</a>.</info>
</schleuder>
<schleuder id="92">
<date>Sat, 29 Mar 2008 00:00 UT</date>
<image>covers/ds92.jpg</image>
<link>/pdfs/ds092.pdf</link>
<filesize>5805592</filesize>
<date>Sat, 29 Mar 2008 00:00 UT</date>
<teaser>Die 92. Ausgabe der Datenschleuder ist erschienen und auf dem Weg zu den Abonnenten. Als besonderes Gimmick liegt ihr dieses Mal eine Fingerattrappe nach dem Bild unseres geliebten Innenministers bei. Sie ist wie immer im gut sortierten Buchhandel oder <a href="order.html">direkt vom CCC</a> auch als Einzelexemplar zu beziehen. Während ihr auf Eure Ausgabe wartet, lest doch solange <a hef="092/editorial.html">das Editorial</a>.</teaser>
</schleuder>
<schleuder id="91">
<date>Thu, 19 Jul 2007 00:00 UT</date>
<image>covers/ds91.jpg</image>
<link>/pdfs/ds091.pdf</link>
<filesize>8523204</filesize>
<date>Thu, 19 Jul 2007 00:00 UT</date>
</schleuder>
<schleuder id="90">
<date>Tue, 03 Oct 2006 00:00 UT</date>
<image>covers/ds90.jpg</image>
<link>/pdfs/ds090.pdf</link>
<filesize>2249622</filesize>
<date>Tue, 03 Oct 2006 00:00 UT</date>
<teaser>Das Experiment ist beendet. Die Datenschleuder ist dank dem Einsatz hochmoderner Technologien (HTML) auf dem besten Wege, den dreijährigen Rückstand wieder aufzuholen. Redaktionssysteme sind im Prinzip in Ordnung. In der Praxis rockt jedoch vi.</teaser>
</schleuder>
<schleuder id="89">
<image>covers/ds89.jpg</image>
<link>/pdfs/ds089.pdf</link>
<filesize>3860454</filesize>
<!--date></date-->
</schleuder>
<schleuder id="88">
<image>covers/ds88.jpg</image>
<link>/pdfs/ds088.pdf</link>
<filesize>1262835</filesize>
<!--date></date-->
</schleuder>
<schleuder id="87">
<image>covers/ds87.jpg</image>
<link>/pdfs/ds087.pdf</link>
<filesize>2331105</filesize>
<!--date></date-->
</schleuder>
<schleuder id="86">
<image>covers/ds86.jpg</image>
<link>/pdfs/ds086.pdf</link>
<filesize>1807977</filesize>
<!--date></date-->
</schleuder>
<schleuder id="85">
<image>covers/ds85.jpg</image>
<link>/pdfs/ds085.pdf</link>
<filesize>1635260</filesize>
<!--date></date-->
</schleuder>
<schleuder id="84">
<image>covers/ds84.jpg</image>
<link>/pdfs/ds084.pdf</link>
<filesize>890339</filesize>
<!--date></date-->
</schleuder>
<schleuder id="83">
<image>covers/ds83.jpg</image>
<link>/pdfs/ds083.pdf</link>
<filesize>1114051</filesize>
<!--date></date-->
</schleuder>
<schleuder id="82">
<image>covers/ds82.jpg</image>
<link>/pdfs/ds082.pdf</link>
<filesize>1692019</filesize>
<!--date></date-->
</schleuder>
<schleuder id="81">
<image>covers/ds81.jpg</image>
<link>/pdfs/ds081.pdf</link>
<filesize>659054</filesize>
<!--date></date-->
</schleuder>
<schleuder id="80">
<image>covers/ds80.jpg</image>
<link>/pdfs/ds080.pdf</link>
<filesize>563840</filesize>
<!--date></date-->
</schleuder>
<schleuder id="79">
<image>covers/ds79.jpg</image>
<link>/pdfs/ds079.pdf</link>
<filesize>5295970</filesize>
<!--date></date-->
</schleuder>
<schleuder id="78">
<image>covers/ds78.jpg</image>
<link>/pdfs/ds078.pdf</link>
<filesize>3068721</filesize>
<!--date></date-->
</schleuder>
<schleuder id="77">
<image>covers/ds77.jpg</image>
<link>/pdfs/ds077.pdf</link>
<filesize>7138473</filesize>
<!--date></date-->
</schleuder>
<schleuder id="76">
<image>covers/ds76.jpg</image>
<link>/pdfs/ds076.pdf</link>
<filesize>8175112</filesize>
<!--date></date-->
</schleuder>
<schleuder id="75">
<image>covers/ds75.jpg</image>
<link>/pdfs/ds075.pdf</link>
<filesize>8351323</filesize>
<!--date></date-->
</schleuder>
<schleuder id="74">
<image>covers/ds74.jpg</image>
<link>/pdfs/ds074.pdf</link>
<filesize>2064807</filesize>
<!--date></date-->
</schleuder>
<schleuder id="73">
<image>covers/ds73.jpg</image>
<link>/pdfs/ds073.pdf</link>
<filesize>5497703</filesize>
<!--date></date-->
</schleuder>
<schleuder id="72">
<image>covers/ds72.jpg</image>
<link>/pdfs/ds072.pdf</link>
<filesize>278270</filesize>
<!--date></date-->
</schleuder>
<schleuder id="71">
<image>covers/ds71.jpg</image>
<link>/pdfs/ds071.pdf</link>
<filesize>499707</filesize>
<!--date></date-->
</schleuder>
<schleuder id="70">
<image>covers/ds70.jpg</image>
<link>/pdfs/ds070.pdf</link>
<filesize>4904429</filesize>
<!--date></date-->
</schleuder>
<schleuder id="68/69">
<image>covers/ds68.jpg</image>
<link>/pdfs/ds068.pdf</link>
<filesize>8750789</filesize>
<!--date></date-->
</schleuder>
<schleuder id="67">
<image>covers/ds67.jpg</image>
<link>/pdfs/ds067.pdf</link>
<filesize>685776</filesize>
<!--date></date-->
</schleuder>
<schleuder id="66">
<image>covers/ds66.jpg</image>
<link>/pdfs/ds066.pdf</link>
<filesize>381865</filesize>
<!--date></date-->
</schleuder>
<schleuder id="65">
<image>covers/ds65.jpg</image>
<link>/pdfs/ds065.pdf</link>
<filesize>191921</filesize>
<!--date></date-->
</schleuder>
<schleuder id="64">
<image>covers/ds64.jpg</image>
<link>/pdfs/ds064.pdf</link>
<filesize>683107</filesize>
<!--date></date-->
</schleuder>
<schleuder id="63">
<image>covers/ds63.jpg</image>
<link>/pdfs/ds063.pdf</link>
<filesize>402940</filesize>
<!--date></date-->
</schleuder>
<schleuder id="62">
<image>covers/ds62.jpg</image>
<link>/pdfs/ds062.pdf</link>
<filesize>645827</filesize>
<!--date></date-->
</schleuder>
<schleuder id="61">
<image>covers/ds61.jpg</image>
<link>/pdfs/ds061.pdf</link>
<filesize>2218050</filesize>
<!--date></date-->
</schleuder>
<schleuder id="60">
<image>covers/ds60.jpg</image>
<link>/pdfs/ds060.pdf</link>
<filesize>525227</filesize>
<!--date></date-->
</schleuder>
<schleuder id="59">
<image>covers/ds59.jpg</image>
<link>/pdfs/ds059.pdf</link>
<filesize>441467</filesize>
<!--date></date-->
</schleuder>
<schleuder id="58">
<image>covers/ds58.jpg</image>
<link>/pdfs/ds058.pdf</link>
<filesize>287742</filesize>
<!--date></date-->
</schleuder>
<schleuder id="57">
<image>covers/ds57.jpg</image>
<link>/pdfs/ds057.pdf</link>
<filesize>761897</filesize>
<!--date></date-->
</schleuder>
<schleuder id="56">
<image>covers/ds56.jpg</image>
<link>/pdfs/ds056.pdf</link>
<filesize>467698</filesize>
<!--date></date-->
</schleuder>
<schleuder id="55">
<image>covers/ds55.jpg</image>
<link>/pdfs/ds055.pdf</link>
<filesize>2922086</filesize>
<!--date></date-->
</schleuder>
<schleuder id="54">
<image>covers/ds54.jpg</image>
<link>/pdfs/ds054.pdf</link>
<filesize>7974465</filesize>
<!--date></date-->
</schleuder>
<schleuder id="53">
<image>covers/ds53.jpg</image>
<link>/pdfs/ds053.pdf</link>
<filesize>817544</filesize>
<!--date></date-->
</schleuder>
<schleuder id="52">
<image>covers/ds52.jpg</image>
<link>/pdfs/ds052.pdf</link>
<filesize>1152589</filesize>
<!--date></date-->
</schleuder>
<schleuder id="51">
<image>covers/ds51.jpg</image>
<link>/pdfs/ds051.pdf</link>
<filesize>1887242</filesize>
<!--date></date-->
</schleuder>
<schleuder id="50">
<image>covers/ds50.jpg</image>
<link>/pdfs/ds050.pdf</link>
<filesize>1275237</filesize>
<!--date></date-->
</schleuder>
<schleuder id="49">
<image>covers/ds49.jpg</image>
<link>/pdfs/ds049.pdf</link>
<filesize>943611</filesize>
<!--date></date-->
</schleuder>
<schleuder id="48">
<image>covers/ds48.jpg</image>
<link>/pdfs/ds048.pdf</link>
<filesize>841492</filesize>
<!--date></date-->
</schleuder>
<schleuder id="47">
<image>covers/ds47.jpg</image>
<link>/pdfs/ds047.pdf</link>
<filesize>1369065</filesize>
<!--date></date-->
</schleuder>
<schleuder id="46">
<image>covers/ds46.jpg</image>
<link>/pdfs/ds046.pdf</link>
<filesize>1432054</filesize>
<!--date></date-->
</schleuder>
<schleuder id="45">
<image>covers/ds45.jpg</image>
<link>/pdfs/ds045.pdf</link>
<filesize>959569</filesize>
<!--date></date-->
</schleuder>
<schleuder id="44,5">
<image>covers/ds44,5.jpg</image>
<link>/pdfs/ds044,5.pdf</link>
<filesize>2245359</filesize>
<!--date></date-->
</schleuder>
<schleuder id="44">
<image>covers/ds44.jpg</image>
<link>/pdfs/ds044.pdf</link>
<filesize>934477</filesize>
<!--date></date-->
</schleuder>
<schleuder id="43">
<image>covers/ds43.jpg</image>
<link>/pdfs/ds043.pdf</link>
<filesize>1511021</filesize>
<!--date></date-->
</schleuder>
<schleuder id="42">
<image>covers/ds42.jpg</image>
<link>/pdfs/ds042.pdf</link>
<filesize>1008532</filesize>
<!--date>???, ?? Mar 1993 00:00 UT</date-->
</schleuder>
<schleuder id="41">
<image>covers/ds41.jpg</image>
<link>/pdfs/ds041.pdf</link>
<filesize>1772903</filesize>
<!--date>nlt 27.12.92: ???, ?? ??? 1992 00:00 UT</date-->
</schleuder>
<schleuder id="40">
<image>covers/ds40.jpg</image>
<link>/pdfs/ds040.pdf</link>
<filesize>724630</filesize>
<!--date>???, ?? ??? 1992 00:00 UT</date-->
</schleuder>
<schleuder id="39">
<image>covers/ds39.jpg</image>
<link>/pdfs/ds039.pdf</link>
<filesize>5660515</filesize>
<!--date>???, ?? ??? 1992 00:00 UT</date-->
</schleuder>
<schleuder id="38">
<image>covers/ds38.jpg</image>
<link>/pdfs/ds038.pdf</link>
<filesize>9309080</filesize>
<!--date>???, ?? Mar 1992 00:00 UT</date-->
</schleuder>
<schleuder id="37">
<image>covers/ds37.jpg</image>
<link>/pdfs/ds037.pdf</link>
<filesize>5955897</filesize>
<!--date>???, ?? Nov 1991 00:00 UT</date-->
</schleuder>
<schleuder id="36">
<image>covers/ds36.jpg</image>
<link>/pdfs/ds036.pdf</link>
<filesize>3988877</filesize>
<!--date>???, ?? Sep 1991 00:00 UT</date-->
</schleuder>
<schleuder id="35">
<image>covers/ds35.jpg</image>
<link>/pdfs/ds035.pdf</link>
<filesize>1132711</filesize>
<!--date>???, ?? Jun 1991 00:00 UT</date-->
</schleuder>
<schleuder id="34">
<image>covers/ds34.jpg</image>
<link>/pdfs/ds034.pdf</link>
<filesize>2377237</filesize>
<!--date>???, ?? Mar 1991 00:00 UT</date-->
</schleuder>
<schleuder id="33">
<image>covers/ds33.jpg</image>
<link>/pdfs/ds033.pdf</link>
<filesize>3594296</filesize>
<!--date>???, ?? Oct 1990 00:00 UT</date-->
</schleuder>
<schleuder id="32">
<image>covers/ds32.jpg</image>
<link>/pdfs/ds032.pdf</link>
<filesize>1007002</filesize>
<!--date>???, ?? Feb 1990 00:00 UT</date-->
</schleuder>
<schleuder id="31">
<image>covers/ds31.jpg</image>
<link>/pdfs/ds031.pdf</link>
<filesize>1686370</filesize>
<!--date>???, ?? Dec 1989 00:00 UT</date-->
</schleuder>
<schleuder id="30">
<image>covers/ds30.jpg</image>
<link>/pdfs/ds030.pdf</link>
<filesize>793690</filesize>
<!--date>net 8.9.89: ???, ?? Sep 1989 00:00 UT</date-->
</schleuder>
<schleuder id="28/29">
<image>covers/ds28-29.jpg</image>
<link>https://www.offiziere.ch/trust-us/ds/28/index.html</link>
<!--date>net 2.1.89: ???, ?? ??? 1989 00:00 UT</date-->
</schleuder>
<schleuder id="26/27">
<image>covers/ds26-27.jpg</image>
<link>/pdfs/ds2627.pdf</link>
<filesize>11978057</filesize>
<!--date>???, ?? Sep 1988 00:00 UT</date-->
</schleuder>
<schleuder id="25">
<image>covers/ds25.jpg</image>
<link>/pdfs/ds025.pdf</link>
<filesize>7984192</filesize>
<!--date>???, ?? Mar 1988 00:00 UT</date-->
</schleuder>
<schleuder id="24">
<image>covers/ds24.jpg</image>
<link>/pdfs/ds024.pdf</link>
<filesize>3317604</filesize>
<!--date>???, ?? Dec 1987 00:00 UT</date-->
</schleuder>
<schleuder id="23">
<image>covers/ds23.jpg</image>
<link>/pdfs/ds023.pdf</link>
<filesize>4669143</filesize>
<!--date>???, ?? Oct 1987 00:00 UT</date-->
</schleuder>
<schleuder id="22">
<image>covers/ds22.jpg</image>
<link>https://www.offiziere.ch/trust-us/ds/22/index.html</link>
<!--date>???, ?? Jul 1987 00:00 UT</date-->
</schleuder>
<schleuder id="21">
<image>covers/ds21.jpg</image>
<link>/pdfs/ds021.pdf</link>
<filesize>8305087</filesize>
<!--date>???, ?? Jun 1987 00:00 UT</date-->
</schleuder>
<schleuder id="20">
<image>covers/ds20.jpg</image>
<link>/pdfs/ds020.pdf</link>
<filesize>8998068</filesize>
<!--date>???, ?? ??? 1987 00:00 UT</date-->
</schleuder>
<schleuder id="19">
<image>covers/ds19.jpg</image>
<link>/pdfs/ds019.pdf</link>
<filesize>8295587</filesize>
<!--date>da steht echt 31.4.87 im Impressum: ???, 31 Apr 1987 00:00 UT</date-->
</schleuder>
<schleuder id="18">
<image>covers/ds18.jpg</image>
<link>/pdfs/ds018.pdf</link>
<filesize>10486554</filesize>
<!--date>???, ?? Feb 1987 00:00 UT</date-->
</schleuder>
<schleuder id="17">
<image>covers/ds17.jpg</image>
<link>/pdfs/ds017.pdf</link>
<filesize>5632452</filesize>
<!--date>???, ?? Dec 1986 00:00 UT</date-->
</schleuder>
<schleuder id="16">
<date>Thu, 11 Sep 1986 00:00 UT</date>
<image>covers/ds16.jpg</image>
<link>/pdfs/ds016.pdf</link>
<filesize>1177879</filesize>
<date>Thu, 11 Sep 1986 00:00 UT</date>
</schleuder>
<schleuder id="15">
<image>covers/ds15.jpg</image>
<link>/pdfs/ds015.pdf</link>
<filesize>1116319</filesize>
<!--date>???, ?? Mar 1986 00:00 UT</date-->
</schleuder>
<schleuder id="14">
<image>covers/ds14.jpg</image>
<link>/pdfs/ds014.pdf</link>
<filesize>629409</filesize>
<!--date>???, ?? Dec 1985 00:00 UT</date-->
</schleuder>
<schleuder id="13">
<image>covers/ds13.jpg</image>
<link>/pdfs/ds013.pdf</link>
<filesize>1400728</filesize>
<!--date>???, ?? Sep 1985 00:00 UT</date-->
</schleuder>
<schleuder id="11/12">
<image>covers/ds11-12.jpg</image>
<link>/pdfs/ds1112.pdf</link>
<filesize>652112</filesize>
<!--date></date-->
</schleuder>
<schleuder id="9/10">
<image>covers/ds9-10.jpg</image>
<link>/pdfs/ds0910.pdf</link>
<filesize>604829</filesize>
<!--date></date-->
</schleuder>
<schleuder id="8,5">
<image>covers/ds8,5.jpg</image>
<link>/alteszeug.html</link>
<!--date></date-->
</schleuder>
<schleuder id="8">
<image>covers/ds8.jpg</image>
<link>/pdfs/ds008.pdf</link>
<filesize>520716</filesize>
<!--date>net 13feb85: ???, ?? ??? 1985 00:00 UT</date-->
</schleuder>
<schleuder id="7">
<image>covers/ds7.jpg</image>
<link>/pdfs/ds007.pdf</link>
<filesize>159023</filesize>
<!--date>nlt 27dec84: ???, ?? Dec 1984 00:00 UT</date-->
</schleuder>
<schleuder id="5/6">
<image>covers/ds5-6.jpg</image>
<link>/pdfs/ds0506.pdf</link>
<filesize>995187</filesize>
<!--date>net oct84: ???, ?? ??? 1984 00:00 UT</date-->
</schleuder>
<schleuder id="4">
<date>Sun, 12 Aug 1984 00:00 UT</date>
<image>covers/ds4.jpg</image>
<link>/pdfs/ds004.pdf</link>
<filesize>3338710</filesize>
<date>Sun, 12 Aug 1984 00:00 UT</date>
</schleuder>
<schleuder id="3">
<date>Tue, 12 Jun 1984 00:00</date>
<image>covers/ds3.jpg</image>
<link>/pdfs/ds003.pdf</link>
<filesize>2638305</filesize>
<date>Tue, 12 Jun 1984 00:00</date>
</schleuder>
<schleuder id="2">
<image>covers/ds02.jpg</image>
<link>/pdfs/ds002.pdf</link>
<filesize>748189</filesize>
<!--date>???, ?? Apr 1984 00:00 UT</date-->
</schleuder>
<schleuder id="1">
<image>covers/ds1.jpg</image>
<link>https://www.offiziere.ch/trust-us/ds/01/index.html</link>
<!--date></date-->
</schleuder>
</schleudern>

271
gen.sh
View File

@ -1,24 +1,44 @@
#!/usr/bin/env sh
#~ set -x
assert_tools () {
err=0
while test $# -gt 0; do
which $1 >/dev/null 2>/dev/null || {
>&2 echo "tool missing: "$1
>&2 printf "tool missing: $1\n"
err=$(( $err + 1 ))
}
shift
done
test $err -eq 0 || exit $err
}
test $# -eq 0 && {
assert_source () {
dependencies="test printf"
assert_tools ${dependencies}
test $# -gt 0 && {
datafn="$1";
} || {
>&2 printf "option for data source missing.\n";
datafn="data.xml";
>&2 printf "assuming fallback '${datafn}'.\n";
}
test -f "$datafn" && { >&2 printf "from ${datafn} …\n"; exit 0; } || { >&2 printf "failed.\nfile '${datafn}' does not exist.\n"; exit 1; }
printf "$datafn"
}
build () {
datafn="$1"
dependencies="xsltproc"
assert_tools ${dependencies}
xsltproc --encoding utf-8 -o ds-feed.xml rss.xsl data.xml
xsltproc --encoding iso-8859-1 -o download.html download.xsl data.xml
xsltproc --encoding utf-8 -o index.html index.xsl data.xml
>&2 printf "building ds-feed.xml … "
xsltproc --encoding utf-8 -o ds-feed.xml rss.xsl $datafn && { >&2 printf "done.\n"; } || { >&2 printf "failed on rss.xsl.\n"; exit 1; }
>&2 printf "building download.html … "
xsltproc --encoding iso-8859-1 -o download.html download.xsl $datafn && { >&2 printf "done.\n"; } || { >&2 printf "failed on download.xsl.\n"; exit 1; }
>&2 printf "building index.html … "
xsltproc --encoding utf-8 -o index.html index.xsl $datafn && { >&2 printf "done.\n"; } || { >&2 printf "failed on index.xsl.\n"; exit 1; }
exit 0
}
test "$1" = "sort" && {
sortxml () {
#~ test "$1" = "sortxml" && {
dependencies="xsltproc"
assert_tools ${dependencies}
xsltproc --encoding utf-8 -o sorted.xml sort.xsl data.xml
@ -27,12 +47,12 @@ test "$1" = "sort" && {
linkcheck () {
dependencies="curl uuid"
assert_tools ${dependencies}
tmpfile="/tmp/"$(uuid); curl https://ds.ccc.de/download.html > $tmpfile
for f in $(echo "download.html "$tmpfile); do
tmpfile="/tmp/"$(uuid); curl -k https://ds.ccc.de/download.html > $tmpfile
for f in download.html ${tmpfile} ; do
test -e $f || continue
for e in $(cat ${f}|sed 's/<a /\n<a /g'|grep -i " href="|cut -d"=" -f2|cut -d'"' -f2); do
status=$(curl --max-time 1 --head --silent --output /dev/null --write-out "%{http_code}" $e )
test $status -eq 200 && >&2 echo ${e}" "${status}" OK" || >&2 echo ${e}" "${status}" FAILED"
status=$(curl -k --max-time 1 --head --silent --output /dev/null --write-out "%{http_code}" $e )
test $status -eq 200 && >&2 printf ${e}" "${status}" OK\n" || >&2 printf ${e}" "${status}" FAILED\n"
done
done
}
@ -42,6 +62,7 @@ mirror_website () {
local url=$@
local domain=`expr "$url" : '^http[s]*://\([^/?]*\)'`
wget \
--no-check-certificate \
--recursive \
--no-clobber \
--page-requisites \
@ -53,128 +74,164 @@ mirror_website () {
$url
}
newdataentry () {
dependencies="cat grep head cut date printf"
dependencies="cat grep head cut rev date printf"
assert_tools ${dependencies}
#~ datafn=$(assert_source $1) && { shift; } || { >&2 printf "file '${datafn}' not found."; err=1; exit 1; }
datafn="data.xml"
err=0
customdir=$(pwd)
fl=""
test $# -eq 0 && {
>&2 echo "determining issue number based on data.xml.\n"
lastentry=$(cat data.xml |grep -i "<schleuder id="|head -1|cut -d'"' -f2)
newentry=$(( $lastentry + 1 ))
} || {
# todo: switches
#~ for o in "$@"; do
#~ on=$(echo $o|cut -d"=" -f1)
#~ ov=$(echo $o|cut -d"=" -f2-)
#~ case $on in
# custom data directory for availability test and filesize, default pwd
#~ c)
#~ customdir) ;;
# custom issue, default next after top entry in data.xml
#~ i)
#~ issue) ;;
# custom timestamp, default: current time
#~ d)
#~ datetime) ;;
# custom teaser xml-text, default: none
#~ t)
#~ teaser) ;;
# custom fs for files
#~ p)
#~ pdffs) ;;
#~ e)
#~ epubfs) ;;
# help text
#~ h)
#~ help)
#~ *) ;;
#~ esac
#~ done
test -d $1 && {
customdir=$1; shift
>&2 echo "custom base directory for files such as jpg, pdf, epub: "${customdir}".\n"
}
test "$1" = "help" && {
echo "prints a new data entry for a release of datenschleuder\n"
echo "release [options]\n"
echo "option\tdescription\n"
echo "directory\tcustom data directory for availability test and filesize, default pwd"
echo "number\tprint entry for release with custom number, default is the increment of the top entry in data.xml\n"
echo "date\tuse a unix timestamp for a custom date\n"
echo "teaser\tinclude teaser xml-message as last argument(s)\n"
echo "full example: `./gen.sh release 99 1568505600 Die Ausgabe 99 ist fertig.`"
exit 1
}
test $(( $1 * 1 )) -eq $1 && {
>&2 echo "custom entry for data.xml.\n"
newentry=$1; shift;
} || { echo "argument not a number."; exit 1; }
test $(( $1 * 1 )) -eq $1 && {
>&2 echo "custom datetime.\n"
datetime=$1; shift;
} || { datetime=0; } # remaining arguments should be teaser xml-message.
>&2 printf "determining issue number based on '${datafn}'.\n"
lastentry=$(grep -i "<schleuder id=" ${datafn} | head -1 | cut -d'"' -f2)
#~ lastentry=$(grep "<schleuder id=" ${datafn} | cut -d'"' -f2 | sort | tail -1)
newentry=$(( $lastentry + 1 ))
# todo: switches
#~ for o in "$@"; do
#~ on=$(printf $o|cut -d"=" -f1)
#~ ov=$(printf $o|cut -d"=" -f2-)
#~ case $on in
# custom data directory for availability test and filesize, default pwd
#~ c)
#~ customdir) ;;
# custom issue, default next after top entry in ${datafn}
#~ i)
#~ issue) ;;
# custom timestamp, default: current time
#~ d)
#~ datetime) ;;
# custom teaser xml-text, default: none
#~ t)
#~ teaser) ;;
# custom fs for files
#~ p)
#~ pdffs) ;;
#~ e)
#~ epubfs) ;;
# help text
#~ h)
#~ help)
#~ *) ;;
#~ esac
#~ done
test -d $1 && {
customdir=$1; shift
>&2 printf "custom base directory for files such as jpg, pdf, epub: "${customdir}".\n\n"
}
echo "<schleuder id=\"$newentry\">"
test "${datetime}" = "" || test $datetime -eq 0 && {
#~ datetime=$(LANG=en_US.utf8 date -u +"%a %d %b %Y %H:%M") # manual copy of known entries
datetime=$(LANG=en_US.utf8 date -u -R |rev|cut -d":" -f2-|rev) # RFC-5322-Format without seconds and TZ
} || {
datetime=$(LANG=en_US.utf8 date -d @${datetime} -u -R|rev|cut -d":" -f2-|rev)
test "$1" = "help" && {
printf "prints a new data entry for a release of datenschleuder\n\n"
printf "release [options]\n\n"
printf "option\tdescription\n\n"
printf "directory\tcustom data directory for availability test and filesize, default pwd\n\n"
printf "number\tprint entry for release with custom number, default is the increment of the top entry in ${datafn}\n\n"
printf "date\tuse a unix timestamp for a custom date\n\n"
printf "teaser\tinclude teaser xml-message as last argument(s)\n\n"
printf "full example: './gen.sh release 99 1568505600 Die Ausgabe 99 ist fertig.'\n"
exit 1
}
echo "\t<date>"${datetime}" UT</date>" # custom format universal time
2>/dev/null test $(( $1 * 1 )) -eq $1 && {
newentry=$1; shift;
>&2 printf "custom issue number '${newentry}' for '${datafn}'.\n"
} || {
printf "next argument not a number. assuming issue based on top entry.\n"
}
2>/dev/null test $(( $1 * 1 )) -eq $1 && {
>&2 printf "custom datetime.\n\n"
datetime="$1"; shift;
} || { printf "next argument not a number. using actual system time.\n"; datetime=0; } # remaining arguments should be teaser xml-message.
printf "\nschleuder id=\"$newentry\">\n"
# todo: switch for dtg, integrate custom datetime input early
# or simply implement xslt for handling ISO and nothing else for input
# RFC-5322-Format without seconds and TZ
dtg="TZ=:UTC LANG=en_US.utf8 date -u -R |rev|cut -d\":\" -f2-|rev"; tz=" UT"
# ISO dtg as issues may provide datetime-data on months but mostly not on days …
#~ dtg="TZ=:UTC LANG=en_US.utf8 date +%Y-%m-%d %H:%M %Z"; tz=""
test $datetime -eq 0 && {
datetime=$(TZ=:UTC LANG=en_US.utf8 date -u -R |rev|cut -d":" -f2-|rev) #
} || {
#~ dtg="TZ=:UTC LANG=en_US.utf8 date -d @${datetime} +\"%Y-%m-%d %H:%M %Z\""; tz=""
dtg="TZ=:UTC LANG=en_US.utf8 date -d @${datetime} -u -R |rev|cut -d\":\" -f2-|rev"; tz=" UT"
#~ datetime="$(TZ=:UTC LANG=en_US.utf8 date -d @${datetime} -u -R|rev|cut -d":" -f2-|rev)"
# TZ=:UTC LANG=en_US.utf8 date -d @${datetime} +"%Y-%m-%d %H:%M %Z"
}
datetime="$(sh -c "${dtg}")"
printf "\t<date>${datetime}${tz}</date>\n" # custom format universal time
fn="ds"$(printf "%03d" $newentry)
for d in $(echo "covers pdfs epubs"); do
for d in covers pdfs epubs ; do
case "$d" in
covers) ffn=${d}"/"${fn}".jpg"; cover=$ffn ;;
pdfs) ffn=${d}"/"${fn}".pdf" ;;
epubs) ffn=${d}"/"${fn}".epub" ;;
#~ *) echo "file "${ffn}" not found, in "${d}"." ;;
#~ *) printf "file "${ffn}" not found, in "${d}".\n" ;;
esac
#~ echo $ffn
#~ printf "$ffn\n"
test -e ${customdir}"/"${ffn} && {
test "$d" = "covers" && {
echo "\t<image>"${cover}"</image>"
printf "\t<image>"${cover}"</image>\n"
} || {
fs=$(stat -c %s ${customdir}"/"${ffn})
echo "\t<link filesize=\""${fs}"\">"${ffn}"</link>"
printf "\t<link filesize=\""${fs}"\">"${ffn}"</link>\n"
}
} || {
mfl=${mfl}" "${ffn}"\n"
#~ echo "file "${ffn}" not found."
#~ printf "file "${ffn}" not found.\n"
err=3
}
done
#~ echo "\t<preface></preface>" # not used on server yet
#~ printf "\t<preface></preface>\n" # not used on server yet
test $# -eq 0 && { teaser="" ; } || {
teaser=$@ ;
echo "\t<teaser>"${teaser}"</teaser>"
teaser="$@";
printf "\t<teaser>"${teaser}"</teaser>\n"
}
echo "</schleuder>"
test "$teaser" = "" && { >&2 echo "\nmissing teaser message."; }
test -e ${customdir}"/"$cover || { >&2 echo "\nmissing cover file: "${cover}; }
test $err -gt 0 && { >&2 echo "\nmissing files:\n"${mfl}; }
printf "</schleuder>\n"
test "$teaser" = "" && { >&2 printf "\nmissing teaser message.\n"; }
test -e ${customdir}"/"$cover || { >&2 printf "\nmissing cover file: "${cover}"\n"; }
test $err -gt 0 && { >&2 printf "\nmissing files:\n"${mfl}"\n"; }
}
newinfoentry () {
echo "not implemented yet.\n\nwill be similar to `release`."
}
# a mirror is useful for local testing with files
test "$1" = "mirror" && {
shift
>&2 echo "downloading the website may take quite some time."
mirror_website http://ds.ccc.de/
}
test "$1" = "linkcheck" && {
shift
linkcheck http://ds.ccc.de/
}
test "$1" = "release" && {
shift
newdataentry $@
}
test "$1" = "info" && {
shift
newinfoentry $@
>&2 printf "not implemented yet.\n\nwill be similar to 'release'.\n"
}
echo $# $@
if test $# -lt 1 ; then
printf "missing parameter.\n"
exit 1
else
# a mirror is useful for local testing with files
case "$1" in
build)
f=$(assert_source $@) && { shift; } || { exit 1; }
build "${f}"
;;
#~ sortxml)
#~ f=$(assert_source $@) && { shift; } || { exit 1; }
#~ sortxml "${f}"
#~ ;;
mirror)
>&2 printf "downloading the website may take quite some time.\n"
mirror_website http://ds.ccc.de/
;;
linkcheck)
linkcheck http://ds.ccc.de/
;;
release)
shift
newdataentry $@
;;
info)
shift
newinfoentry $@
;;
*)
printf "this is not implemented yet.\n"
;;
esac
fi
# generate small size version of pdf, might help e.g. for email attachments
#gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -q -o ds100-smaller.pdf ds100.pdf