#!/bin/bash # TODO: If $stop similar to "Bus Station" then reject and suggest user tries supplying a route number to see when their next bus leaves the station # TODO: Fix space at the start of new lines in result read stop # function to provide data to a for loop _jq() { echo ${json} | base64 --decode | jq -r ${1} } _liveresult() { livetimes=$(curl --silent https://admin.libertybus.je/api/v1/soj/stop_updates/${stop}) # doesn't work without encoding in base64 (why?) for json in $(echo "${livetimes}" | jq -r '.[] | @base64'); do result="$result Dest: $(_jq '.destination') |" result="$result ETA: $(_jq '.eta') |" result="$result Route: $(_jq '.service_number')\n" done echo -e $result # is this the correct exit code? exit 0 } _stopsreturn() { stops=$(curl --silent https://admin.libertybus.je/api/v1/stops/"${stop}" | jq -r '.') stopslen=$(echo ${stops} | jq '. | length') # if length of $stops array is 1 then only one bus stop matches and we can return live tiems for that stop if [ $stopslen = 1 ]; then stop=$(echo ${stops} | jq '.[].stop_id') _liveresult # multiple stops returned in $stops so we will return stop names and codes so user can retry else for json in $(echo "${stops}" | jq -r '.[] | @base64'); do result="$result Stop: $(_jq '.name') |" result="$result Code: $(_jq '.stop_id')\n" done echo -e $result # is this the correct exit code? exit 0 fi } if [ "$stop" == "-h" ] || [ "$stop" == "--help" ]; then echo "Usage: '!livetimes ' where is either the 4 digit stop code, the full unique or partial bus stop name. If a bus stop name is used and there are multiple matches then a list of matching stops will be returned with their codes." # is this the correct exit code? exit 0 elif [[ "$stop" =~ ^-?[0-9]+$ ]] && [ $(echo ${#stop} == 4) ]; then _liveresult else _stopsreturn fi