#!/usr/bin/env bash # Script to get a summary of the weather from darksky # Uses: https://www.latlong.net/convert-address-to-lat-long.html to get the coordinates from a location name # Uses https://darksky.net/dev/docs for the forcast # You will need to use your own api key, I have put mine in darksky.private # requires jq, curl, bash, sed (with -E option) # I have made it show informatio I am interested in # Eventually, it would be nice to use this to create a graphical output like wttr.in initial=$@ place=${initial// /+} if [ -z "$place" ]; then place="Bury+St+Edmunds" fi coordinates=$( curl 'https://www.latlong.net/_spm4.php' \ -H 'dnt: 1' \ -H 'x-requested-with: XMLHttpRequest' \ -H 'accept: */*' \ --data 'c1='"$place"'&action=gpcm&cp=' -s ) if [ -z "$coordinates" ]; then echo "Can't find coordinates" exit 2 fi # This file sets the variable $secret to my api key source "$(dirname $0)/darksky.private" url="https://api.darksky.net/forecast/$secret/$coordinates?units=uk2" function convertDate(){ timestamp=$(echo "$1" | grep -Eo '[0-9]{10}') formatted=$(date -d @"$timestamp") echo $1 | sed "s/$timestamp/\"$formatted\"/" | sed -E 's/^([^:]+)/"\1"/' } jqstatement='{ summary: [ .currently.summary, .minutely.summary, .hourly.summary, .daily.summary ], forcast: [ .daily.data[] | { time: .time, summary: .summary, sunrise: .sunriseTime, sunset: .sunsetTime, temperatureHigh: { temperature: .temperatureHigh, time: .temperatureHighTime }, temperatureLow: { temperature: .temperatureLow, time: .temperatureLowTime }, pricipitation:{ type: .precipType, probability: .precipProbability } } ], alerts: .alerts }' export -f convertDate curl -s $url | jq "$jqstatement" | sed -E "s/(.*)([0-9]{10})(.*)/convertDate \"&\"/eg" | jq