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
7 # Værvarsel fra yr.no, levert av NRK og Meteorologisk institutt (http://www.yr.no)
9 # LISENS: http://sam.zoy.org/wtfpl/COPYING
11 # Fallback-sted (default)
18 # Cache-tid i sekunder (minimum 3600 = 60 minutter, per Yr.no sine bruksvilkår"
21 APIBASE
="https://www.yr.no"
23 # Stedsnavn er alle paramterne vi får med, eller fallback
25 STEDSNAVN
="${FALLBACK}"
27 STEDSNAVN
="${*//[^a-zA-Z0-9\-ÆØÅæøå]/}"
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})"
39 SEARCHFILE
="/tmp/YrSearch-${STEDSNAVN}.json"
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}"
48 curl
-s -G -X GET
--header "Accept: application/json" --data-urlencode "q=${STEDSNAVN}" --data-urlencode "language=nb" "${APIBASE}/api/v0/locations/Search" > "${SEARCHFILE}"
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}"
60 curl
-s "${APIBASE}/${OBSPATH}" > "${OBSFILE}"
63 echo "Fant ingen værobservasjoner for ${STEDSNAVN_MATCHED}, jeg funker bare i Norge"
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}")
71 # Og litt ekstra datatygging
72 TIME
=$
(date +%H.
%M
-d "${TIME_ZULU}")
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"