#! /bin/sh # # NAME # mobile.vvs.de - web scraper for VVS departure information # # SYNOPSIS # mobile.vvs.de ORIGIN [HH [MM [YYmmdd]]] # # DESCRIPTION # The mobile.vvs.de utility fetches departure information from the # Internet and prints the results to standard output. # # OPERANDS # ORIGIN The point of departure. # # HH, MM, YYmmdd # The time and date of departure. Defaults to the current # time and date. # # STDIN # Not used. # # INPUT FILES # None. # # ENVIRONMENT VARIABLES # The following environment variables affect the execution of mobile.vvs.de: # # limit Limits the number of entries to be fetched. # # origin, H, M, Ymd # Provide defaults operands. If origin is set, then ORIGIN # becomes optional. The order of the operands doesn't change # by these variables. These variables are overridden by the # operands. # # ASYNCHRONOUS EVENTS # Defaults. # # STDOUT # The first line has the format: # # "\e[4m%s:%s %s\e[m\n", H, M, origin_real_name # # where H and M are the corresponding provided or default operands. # origin_real_name is the real name of the point of departure. # # The subsequent lines specify the departing means of transport. # Each line has the format: # # "%s %s → %s\n", time_of_departure, line_number, destination # # where time_of_departure is self-evident, and line_number and # destination identify the route and direction. # # STDERR # Not used. # # OUTPUT FILES # None. # # EXTENDED DESCRIPTION # None. # # EXIT STATUS # 0 A departure board could be fetched. # # 1 ORIGIN doesn't specify an acceptable point of departure. # # EXAMPLES # 1. Get the top three current departures at Stuttgart, Hauptbahnhof: # # $ limit=3 mobile.vvs.de hauptbahnhof # # FUTURE DIRECTIONS # None. # # BUGS # The format of STDOUT suffers from bit rot. # # SEE ALSO # vvs.de # # COPYRIGHT # All departure information is copyrighted by Verkehrs- und # Tarifverbund Stuttgart GmbH. The original copyright statement can # be obtained online at http://www.vvs.de/impressum . # # The following code is your fault. # set -euf ltrim() { sed "s/^[${1-$symbols}]*//" } POST() { ## TODO url-encode, trim tr '\n' '&' | sed 's/&$//' | w3m -config /dev/null -cols 256 -post /dev/stdin -dump "${1-$URI}" } limit=${limit-10} origin="${1-$origin}" H="${2-${H-`date +%H`}}" M="${3-${M-`date +%M`}}" Ymd="${4-${Ymd-`date +%Y%m%d`}}" URI='http://mobil.vvs.de/mobile/XSLT_DM_REQUEST' echo " sessionID=0 requestID=0 language=de locationServerActive=1 useRealtime=1 anySigWhenPerfectNoOtherMatches=1 limit=$limit deleteAssignedStops_dm=1 mode=direct convertCrossingsITKernel2LocationServer=1 convertStopsPTKernel2LocationServer=1 convertAddressesITKernel2LocationServer=1 convertPOIsITKernel2LocationServer=1 itdLPxx_dest= useAllStops=1 maxAssignedStops=1 itOptionsActive=1 trITMOTvalue100=5 ptOptionsActive=1 useProxFootSearch=0 w_regPrefAm=1 w_objPrefAl=2 w_objPrefAl=12 itdLPxx_script=true place_dm= placeState_dm=empty nameState_dm=empty nameInfo_dm=invalid typeInfo_dm=invalid placeInfo_dm=invalid reducedAnyWithoutAddressObjFilter_dm=103 reducedAnyPostcodeObjFilter_dm=64 reducedAnyTooManyObjFilter_dm=2 anyObjFilter_dm=126 type_dm=any name_dm=$origin itdTimeHour=`echo $H | ltrim 0` itdTimeMinute=`echo $M | ltrim 0` itdDate=$Ymd " | POST "$URI" | sed -rn ' s/^Von:[^[:alpha:]]+(.*)$/'$H:$M' \1/p /Haltestelle/,/^ *$/{ /Haltestelle|^ *$/!{ s/[[:space:]]*\[info\][[:space:]]*$// p } } ' | { read REPLY echo "$REPLY" while read time dev no dest ; do printf "$time %3s → %s\n" $no "$dest" done } ####