Diverse gamle patcher og forbedringer
[einar-bin] / temp.sh
1 #!/bin/bash
2 #
3 # Et raskt bash-script for å hente ut nyeste temperaturobservasjon
4 # for et gitt stedsnavn fra yr.no.
5 # Skrevet av Einar Jørgen Haraldseid for #kopweb @ EFNet
6 #
7 # Værvarsel fra yr.no, levert av NRK og Meteorologisk institutt (http://www.yr.no)
8
9 # LISENS: http://sam.zoy.org/wtfpl/COPYING
10
11 # Fallback-sted (default)
12 FALLBACK="Gjøvik"
13
14 # Norsk format på tid
15 LC_TIME="nb_NO"
16 LANG="nb_NO"
17
18 # Cache-tid i sekunder (minimum 3600 = 60 minutter, per Yr.no sine bruksvilkår"
19 CACHETID="3600"
20
21 APIBASE="https://www.yr.no"
22
23 # Stedsnavn er alle paramterne vi får med, eller fallback
24 if [ $# -lt 1 ]; then
25 STEDSNAVN="${FALLBACK}"
26 else
27 STEDSNAVN="${*//[^a-zA-Z0-9\-ÆØÅæøå]/}"
28 fi
29
30 # Behandler Vårstien spesielt
31 if [ "$STEDSNAVN" == "Vårstien" ]; then
32 TEMPERATURE=$(jq '.temperature_C' /var/tmp/heimdalsgate.json)
33 LASTMEASURE=$(jq '.time' /var/tmp/heimdalsgate.json | tr -d \")
34 LASTTIMESTAMP=$(LANG="nb_NO" date -d "TZ=\"UTC\" $LASTMEASURE" +%-d.\ %B\ kl.\ %H.%M)
35 echo "Temperatur for Vårstien er ${TEMPERATURE}°C (Observasjon fra Vårstien ${LASTTIMESTAMP})"
36 exit 0
37 fi
38
39 SEARCHFILE="/tmp/YrSearch-${STEDSNAVN}.json"
40
41 # Sjekk om vi har hentet filer allerede de siste X minuttene, hent ved behov
42 # Takk til Sakarias for elegant løsning
43 if [ -f "${SEARCHFILE}" ]; then
44 if [ "$(stat --format=%Y "${SEARCHFILE}")" -le $(( $(date +%s) - CACHETID )) ]; then
45 curl -s -G -X GET --header "Accept: application/json" --data-urlencode "q=${STEDSNAVN}" --data-urlencode "language=nb" "${APIBASE}/api/v0/locations/Search" > "${SEARCHFILE}"
46 fi
47 else
48 curl -s -G -X GET --header "Accept: application/json" --data-urlencode "q=${STEDSNAVN}" --data-urlencode "language=nb" "${APIBASE}/api/v0/locations/Search" > "${SEARCHFILE}"
49 fi
50
51 STEDSNAVN_MATCHED=$(jq -r '._embedded.location | .[0].name' "${SEARCHFILE}")
52 LOCATION_ID=$(jq -r '._embedded.location | .[0].id' "${SEARCHFILE}")
53 OBSFILE="/tmp/YrObservation-${LOCATION_ID}.json"
54 if OBSPATH=$(jq -r '._embedded.location | .[0]._links.observations[0].href' "${SEARCHFILE}" 2> /dev/null); then
55 if [ -f "${OBSFILE}" ]; then
56 if [ "$(stat --format=%Y "${OBSFILE}")" -le $(( $(date +%s) - CACHETID )) ]; then
57 curl -s "${APIBASE}/${OBSPATH}" > "${OBSFILE}"
58 fi
59 else
60 curl -s "${APIBASE}/${OBSPATH}" > "${OBSFILE}"
61 fi
62 else
63 echo "Fant ingen værobservasjoner for ${STEDSNAVN_MATCHED}, jeg funker bare i Norge"
64 exit 0
65 fi
66
67 TEMP=$(jq -r ._embedded.stations[0].observations.temperature.intervals[-1].value "${OBSFILE}")
68 TIME_ZULU=$(jq -r ._embedded.stations[0].observations.temperature.intervals[-1].time "${OBSFILE}")
69 STASJON=$(jq -r ._embedded.stations[0].name "${OBSFILE}")
70
71 # Og litt ekstra datatygging
72 TIME=$(date +%H.%M -d "${TIME_ZULU}")
73
74 # Spytt ut en fin linje
75 echo "Temperatur for ${STEDSNAVN_MATCHED} er ca. ${TEMP}°C (Observasjon fra ${STASJON} målestasjon kl. ${TIME}) - Værvarsel fra yr.no, levert av NRK og Meteorologisk institutt"