Compare commits

...

6 Commits

Author SHA1 Message Date
~lucidiot cded417589
Drop IRC notifications
continuous-integration/drone Build is passing Details
2024-02-20 14:38:46 +00:00
~lucidiot 734df11d95
Drop TAIID feeds, closes #107 2024-02-20 14:38:23 +00:00
~lucidiot a5d7575384
Prevent concurrent executions of the feed generator 2024-01-19 14:28:09 +00:00
~lucidiot 5c13229bcd
Force UTF-8 encoding on pup commands 2024-01-19 14:27:52 +00:00
~lucidiot 40b0da7709
Add timeout on curl commands 2024-01-19 14:27:37 +00:00
~lucidiot 3861f497de
New domain name for Finnish SIA 2024-01-19 14:26:58 +00:00
4 changed files with 19 additions and 196 deletions

View File

@ -31,28 +31,3 @@ steps:
- main
repo:
- lucidiot/itsb
- name: irc
image: plugins/irc
settings:
host: m455.casa
port: 6697
nick: lucibot
channel: '#station'
enable_tls: yes
use_sasl: yes
sasl_password:
from_secret: sasl_password
template: 'deploying https://tildegit.org/lucidiot/itsb/commit/{{ build.commit }} - {{ build.status }} ({{ build.link }})'
when:
status:
- success
- failure
branch:
- main
repo:
- lucidiot/itsb
# For some reason, the IRC plugin works but causes
# an "Error, disconnected: EOF" when quitting, which
# makes the pipeline fail every time…
failure: ignore

134
itsb.xml
View File

@ -959,135 +959,15 @@
</feed>
</source>
<source id="taiid">
<name>Transport Accident and Incident Investigations Division</name>
<region>Lithuania</region>
<type>Rail, aviation, marine</type>
<frequency>50-100 reports/year</frequency>
<url>https://tm.lrv.lt/en/fields-of-activity/transport-accident-and-incident-investigations</url>
<feed format="rss" lang="English" id="taiid-en-all">
<curl>
<url>https://tm.lrv.lt/en/fields-of-activity/transport-accident-and-incident-investigations/accidents-and-incidents</url>
</curl>
<pup>.panel-body tr:not(:first-child)</pup>
<jq path="taiid.jq">
<arg name="language">en</arg>
<arg name="title">TAIID</arg>
<arg name="description">Lithuania Transport Accident and Incident Investigations Division reports</arg>
<arg name="link">https://tm.lrv.lt/en/fields-of-activity/transport-accident-and-incident-investigations/accidents-and-incidents</arg>
</jq>
<json2xml />
<output>taiid/en/all.xml</output>
</feed>
<feed format="rss" lang="English" type="air" id="taiid-en-air">
<curl>
<url>https://tm.lrv.lt/en/fields-of-activity/transport-accident-and-incident-investigations/civil-aviation</url>
</curl>
<pup>.panel-body tr:not(:first-child)</pup>
<jq path="taiid.jq">
<arg name="language">en</arg>
<arg name="title">TAIID Aviation</arg>
<arg name="description">Lithuania Transport Accident and Incident Investigations Division aviation reports</arg>
<arg name="link">https://tm.lrv.lt/en/fields-of-activity/transport-accident-and-incident-investigations/civil-aviation</arg>
</jq>
<json2xml />
<output>taiid/en/air.xml</output>
</feed>
<feed format="rss" lang="English" type="rail" id="taiid-en-rail">
<curl>
<url>https://tm.lrv.lt/en/fields-of-activity/transport-accident-and-incident-investigations/railway-transport</url>
</curl>
<pup>.panel-body tr:not(:first-child)</pup>
<jq path="taiid.jq">
<arg name="language">en</arg>
<arg name="title">TAIID Rail</arg>
<arg name="description">Lithuania Transport Accident and Incident Investigations Division rail reports</arg>
<arg name="link">https://tm.lrv.lt/en/fields-of-activity/transport-accident-and-incident-investigations/railway-transport</arg>
</jq>
<json2xml />
<output>taiid/en/rail.xml</output>
</feed>
<feed format="rss" lang="English" type="marine" id="taiid-en-marine">
<curl>
<url>https://tm.lrv.lt/en/fields-of-activity/transport-accident-and-incident-investigations/maritime</url>
</curl>
<pup>.panel-body tr:not(:first-child)</pup>
<jq path="taiid.jq">
<arg name="language">en</arg>
<arg name="title">TAIID Maritime</arg>
<arg name="description">Lithuania Transport Accident and Incident Investigations Division maritime reports</arg>
<arg name="link">https://tm.lrv.lt/en/fields-of-activity/transport-accident-and-incident-investigations/maritime</arg>
</jq>
<json2xml />
<output>taiid/en/marine.xml</output>
</feed>
<feed format="rss" lang="Lithuanian" id="taiid-lt-all">
<curl>
<url>https://tm.lrv.lt/lt/veiklos-sritys-1/transporto-avariju-ir-incidentu-tyrimai-1/avarijos-ir-incidentai</url>
</curl>
<pup>.panel-body tr:not(:first-child)</pup>
<jq path="taiid.jq">
<arg name="language">lt</arg>
<arg name="title">TAITS</arg>
<arg name="description">Lietuvos Transporto Avarijų ir Incidentų Tyrimai Skyriaus ataskaitos</arg>
<arg name="link">https://tm.lrv.lt/lt/veiklos-sritys-1/transporto-avariju-ir-incidentu-tyrimai-1/avarijos-ir-incidentai</arg>
</jq>
<json2xml />
<output>taiid/lt/all.xml</output>
</feed>
<feed format="rss" lang="Lithuanian" type="air" id="taiid-lt-air">
<curl>
<url>https://tm.lrv.lt/lt/veiklos-sritys-1/transporto-avariju-ir-incidentu-tyrimai-1/oro-transportas</url>
</curl>
<pup>.panel-body tr:not(:first-child)</pup>
<jq path="taiid.jq">
<arg name="language">lt</arg>
<arg name="title">TAITS Aviacija</arg>
<arg name="description">Lietuvos Transporto Avarijų ir Incidentų Tyrimai Skyriaus aviacija ataskaitos</arg>
<arg name="link">https://tm.lrv.lt/lt/veiklos-sritys-1/transporto-avariju-ir-incidentu-tyrimai-1/oro-transportas</arg>
</jq>
<json2xml />
<output>taiid/lt/air.xml</output>
</feed>
<feed format="rss" lang="Lithuanian" type="rail" id="taiid-lt-rail">
<curl>
<url>https://tm.lrv.lt/lt/veiklos-sritys-1/transporto-avariju-ir-incidentu-tyrimai-1/gelezinkeliu-transportas</url>
</curl>
<pup>.panel-body tr:not(:first-child)</pup>
<jq path="taiid.jq">
<arg name="language">lt</arg>
<arg name="title">TAITS Geležinkelio</arg>
<arg name="description">Lietuvos Transporto Avarijų ir Incidentų Tyrimai Skyriaus geležinkelio ataskaitos</arg>
<arg name="link">https://tm.lrv.lt/lt/veiklos-sritys-1/transporto-avariju-ir-incidentu-tyrimai-1/gelezinkeliu-transportas</arg>
</jq>
<json2xml />
<output>taiid/lt/rail.xml</output>
</feed>
<feed format="rss" lang="Lithuanian" type="marine" id="taiid-lt-marine">
<curl>
<url>https://tm.lrv.lt/lt/veiklos-sritys-1/transporto-avariju-ir-incidentu-tyrimai-1/juru-transportas</url>
</curl>
<pup>.panel-body tr:not(:first-child)</pup>
<jq path="taiid.jq">
<arg name="language">lt</arg>
<arg name="title">TAITS Jūrinis</arg>
<arg name="description">Lietuvos Transporto Avarijų ir Incidentų Tyrimai Skyriaus jūrinis ataskaitos</arg>
<arg name="link">https://tm.lrv.lt/lt/veiklos-sritys-1/transporto-avariju-ir-incidentu-tyrimai-1/juru-transportas</arg>
</jq>
<json2xml />
<output>taiid/lt/marine.xml</output>
</feed>
</source>
<source id="sia">
<name>Safety Investigation Authority</name>
<region>Finland</region>
<type>Road, rail, aviation, marine, industrial, criminal, other</type>
<frequency>20 reports/year</frequency>
<url>https://onnettomuustutkinta.fi/</url>
<url>https://turvallisuustutkinta.fi/</url>
<feed format="rss" lang="English" id="sia-en">
<curl>
<url>https://onnettomuustutkinta.fi/api/oh-internet-sisallonhallinta/hae_nostolista.srv</url>
<url>https://turvallisuustutkinta.fi/api/oh-internet-sisallonhallinta/hae_nostolista.srv</url>
<header name="Content-Type">application/json; charset=UTF-8</header>
<requestBody>
<![CDATA[{
@ -1102,14 +982,14 @@
<arg name="language">en</arg>
<arg name="title">SIA</arg>
<arg name="description">Safety Investigation Authority reports</arg>
<arg name="link">https://onnettomuustutkinta.fi/en/index/currentissues/completedinvestigations.html</arg>
<arg name="link">https://turvallisuustutkinta.fi/en/index/currentissues/completedinvestigations.html</arg>
</jq>
<json2xml />
<output>sia/en.xml</output>
</feed>
<feed format="rss" lang="Finnish" id="sia-fi">
<curl>
<url>https://onnettomuustutkinta.fi/api/oh-internet-sisallonhallinta/hae_nostolista.srv</url>
<url>https://turvallisuustutkinta.fi/api/oh-internet-sisallonhallinta/hae_nostolista.srv</url>
<header name="Content-Type">application/json; charset=UTF-8</header>
<requestBody>
<![CDATA[{
@ -1124,14 +1004,14 @@
<arg name="language">fi</arg>
<arg name="title">Onnettomuustutkintakeskus</arg>
<arg name="description">Onnettomuustutkintakeskus - Valmistuneet tutkinnat</arg>
<arg name="link">https://onnettomuustutkinta.fi/fi/index/ajankohtaista/valmistuneettutkinnat.html</arg>
<arg name="link">https://turvallisuustutkinta.fi/fi/index/ajankohtaista/valmistuneettutkinnat.html</arg>
</jq>
<json2xml />
<output>sia/fi.xml</output>
</feed>
<feed format="rss" lang="Swedish" id="sia-sv">
<curl>
<url>https://onnettomuustutkinta.fi/api/oh-internet-sisallonhallinta/hae_nostolista.srv</url>
<url>https://turvallisuustutkinta.fi/api/oh-internet-sisallonhallinta/hae_nostolista.srv</url>
<header name="Content-Type">application/json; charset=UTF-8</header>
<requestBody>
<![CDATA[{
@ -1146,7 +1026,7 @@
<arg name="language">sv</arg>
<arg name="title">Olycksutredningscentralen</arg>
<arg name="description">Olycksutredningscentralen - Publicerade rapporter</arg>
<arg name="link">https://onnettomuustutkinta.fi/sv/index/aktuellt/publiceraderapporter.html</arg>
<arg name="link">https://turvallisuustutkinta.fi/sv/index/aktuellt/publiceraderapporter.html</arg>
</jq>
<json2xml />
<output>sia/sv.xml</output>

View File

@ -1,42 +0,0 @@
# TAIID feed generator
# Required arguments:
# $title: Feed title
# $language: ISO 639-1 language code (lt or en)
# $description: Feed description
# $link: Feed link
# Expects pup JSON output holding <tr> tags, outputs xmltodict-compatible JSON
# WARNING: Dates are locale-sensitive; the RSS feed might not generate correctly with another locale.
import "./helpers" as helpers;
{
"rss": {
"@version": "2.0",
"channel": {
"title": $title,
"description": $description,
"link": $link,
"language": ($language + "-LT"),
"pubDate": (now | strftime("%a, %d %b %Y %T %z")),
"docs": "https://www.rssboard.org/rss-specification",
"ttl": 1440,
"generator": "ITSB",
"item": [
.[]
# Ignore reports without links
| select(.children[-2].children != null)
| {
"title": .children[-2].children[0].text,
"link": (.children[-2].children[0].href | helpers::urlresolve($link)),
"guid": {
"@isPermaLink": "true",
"#text": (.children[-2].children[0].href | helpers::urlresolve($link))
},
"pubDate": (
try (.children[-3].text | strptime("%Y-%m-%d") | mktime | strftime("%a, %d %b %Y %T %z"))
catch []
)
}
]
}
}
}

View File

@ -78,6 +78,14 @@ function log {
}
[ -z "$DIR" ] && DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
if [ -e "$DIR/.itsb-feedgen" ]; then
echo "The lockfile at $DIR/.itsb-feedgen already exists."
exit 1
fi
log Creating lockfile at "$DIR/.itsb-feedgen"
touch "$DIR/.itsb-feedgen"
trap "rm -f \"$DIR/.itsb-feedgen\"" EXIT INT TERM
log Building to $DIR/feeds
mkdir -p $DIR/feeds
@ -98,6 +106,8 @@ fi
<xsl:text>
</xsl:text>
<xsl:apply-templates select="//itsb:feed[not(itsb:link)]" />
<xsl:text><![CDATA[
rm "$DIR/.itsb-feedgen"]]></xsl:text>
</xsl:template>
<xsl:template match="itsb:feed[not(itsb:link)]">
@ -132,7 +142,7 @@ fi
</xsl:template>
<xsl:template match="itsb:curl">
<xsl:text>curl --fail -s </xsl:text>
<xsl:text>curl --fail -s --max-time 60 </xsl:text>
<xsl:if test="itsb:url/@verify-ssl = 'false' or itsb:url/@verify-ssl = '0'">
<xsl:text>-k </xsl:text>
</xsl:if>
@ -203,7 +213,7 @@ fi
</xsl:template>
<xsl:template match="itsb:pup">
<xsl:text>pup '</xsl:text>
<xsl:text>pup --charset utf-8 '</xsl:text>
<xsl:call-template name="escape">
<xsl:with-param name="text" select="text()" />
</xsl:call-template>