Récupérer un itinéraire sur le réseau CTS - retour accueil
git clone git://bebou.netlib.re/cts
Log | Files | Refs | README |
commit 3495679945effd6ec6e1ecc6804f2a0e14b5f207 Auteurice: Arthur Pons <arthur.pons@unistra.fr> Date: Thu, 20 Mar 2025 20:12:14 +0100 Premier commit du script fonctionnel Diffstat:
A | .gitignore | | | 2 | ++ |
A | README.md | | | 35 | +++++++++++++++++++++++++++++++++++ |
A | cts | | | 88 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
3 files changed, 125 insertions(+), 0 deletions(-)
diff --git a/.gitignore b/.gitignore @@ -0,0 +1,2 @@ +.*.sw? +bdd diff --git a/README.md b/README.md @@ -0,0 +1,35 @@ +# cts + +Un script permettant de récupérer un itinéraire sur le réseau de la CTS. + +## Usage + +Pour récupérer les itinéraires permettant de rejoindre le Molodoï depuis le +Phare citadelle le 24 mars 2025 à partir de 16h30 : + + $ cts -j 2025-03-24 -t 16h30 -d "Phare citadelle" -a Molodoi + +### Les arguments + + -j : Le jour de départ au format YYYY-MM-DD ou YYYY/MM/DD. La valeur par + défaut est ajourd'hui. + -t : L'heure de départ au format HHhMM. La valeur par défaut est maintenant. + -d : Lieu de départ. La valeur par défaut est l'arrêt Boecklin. + -a : Lieu d'arrivée. La valeur par défaut est l'arrêt Gare Centrale. + +## Dépendances + + * un shell posix + * un linux + * curl + * jq + * fzy + +## Limites + + * Pas encore possible de choisir l'heure d'arrivée plutôt que l'heure de départ. + * Pas de cartes. + * Pleins d'autres + + + diff --git a/cts b/cts @@ -0,0 +1,88 @@ +#! /bin/sh + +usage() { +<<. cat +Synopsis : cts [-j jour] [-t heure] [-d départ] [-a arrivée] [-h] + +Affiche les itinéraires que la CTS propose pour aller de _départ_ à _arrivée_ +en partant à _jour_ à _heure_. + + -j : Le jour de départ au format 2025-11-23. La valeur par défaut est ajourd'hui. + -t : L'heure de départ au format 18h23. La valeur par défaut est maintenant. + -d : Lieu de départ. La valeur par défaut est l'arrêt Boecklin. + -a : Lieu d'arrivée. La valeur par défaut est l'arrêt Gare Centrale. +. +} + +imprimer() { + if [ "$1" = "trajet" ];then + <<. cat +--------------------------- +Départ $heuredep à $arrdep +Arrivée $heurearr à $arrarr +Durée : ${duree}m +---- +. + else + <<. cat +$type $num +$heuredepsection $arrdepsection +$heurearrsection $arrarrsection +. + fi +} + +getstation() { +curl -Ls 'https://www.cts-strasbourg.eu/system/modules/eu.cts.module.itineraire/actions/action_searchpoints.jsp' \ + -H 'content-type: application/x-www-form-urlencoded; charset=UTF-8' \ + --data-raw "name=$1" | + jq -r ' + .points[] | + [ .name.value, + .displayedType.value, + .type.value, + .id.value ]|@tsv + ' | tee "bdd/$1" +} + +j=$(date +"%Y%%2F%m%%2F%d") +h=$(date +%H) +m=$(date +%M) +d="143972";dtype="STOP_PLACE" +a="144528";atype="STOP_PLACE" +while getopts "hj:t:d:a:" opt;do + case $opt in + ( h ) usage;exit 0;; + ( d | a ) + choice=$(getstation "$OPTARG" | fzy) + arrtype=$(printf "$choice" | cut -f3) + id=$(printf "$choice" | cut -f4) + eval "$opt=$id" + eval "${opt}type=$arrtype" ;; + ( j ) eval "$opt=$(echo "$OPTARG" | sed 's,[-/],%2F,g')";; + ( t ) + h=$(echo "$OPTARG" | cut -f1 -d'h') + m=$(echo "$OPTARG" | cut -f2 -d'h') ;; + ( * ) printf "$opt not an argument";exit 1 + esac +done + +tmp=$(mktemp) +curl -Ls 'https://www.cts-strasbourg.eu/system/modules/eu.cts.module.itineraire/actions/action_gettrips.jsp' \ + -H 'content-type: application/x-www-form-urlencoded; charset=UTF-8' \ + --data-raw "date=$j&hour=$h&minute=$m&depOrArrFlag=0&departure=$d&depType=$dtype&arrival=$a&arrType=$atype&algorithm=FASTEST&train=true&bus=true&tram=true&car=true&depInsee=67482&arrInsee=67482" | + jq -r ' + .trips[] | + ( .departureStop | "heuredep="+.hour.value, "arrdep="+.name.value), + ( .arrivalStop | "heurearr="+.hour.value, "arrarr="+.name.value), + "duree="+(.duration.value | tostring), + "imprimer trajet", + ( .sections[] | + "type="+.type.value, + "num="+.lineNumber.value, + "arrdepsection="+.depStop.value, + "heuredepsection="+.depHour.value, + "arrarrsection="+.arrStop.value, + "heurearrsection="+.arrHour.value, + "imprimer section")' | sed 's/=/="/;/=/ s/$/"/' > "$tmp" +. "$tmp"