async function getLines(stopCode, line){ // Si line commence par X ou T, on utilise C38 sinon SEM var cur_line = line.split(':'); switch(cur_line[0]){ case 'TPV': var url = 'https://data.mobilites-m.fr/api/routers/default/index/clusters/' + stopCode + '/stoptimes?route=TPV%3A' + cur_line[1]; break; case 'C38': var url = 'https://data.mobilites-m.fr/api/routers/default/index/clusters/' + stopCode + '/stoptimes?route=C38%3A' + cur_line[1]; break; case 'SEM': var url = 'https://data.mobilites-m.fr/api/routers/default/index/clusters/' + stopCode + '/stoptimes?route=SEM%3A' + cur_line[1]; break; case 'GSV': var url = 'https://data.mobilites-m.fr/api/routers/default/index/clusters/' + stopCode + '/stoptimes?route=GSV%3A' + cur_line[1]; break; } var result = await fetch(url, { method: 'GET', headers: { 'Origin': 'LiveTAG' } }); result = await result.json(); return result; } function calcul(tpsattente){ var heureactuelle = new Date(); var heureactuelle = heureactuelle.getHours() * 3600 + heureactuelle.getMinutes() * 60 + heureactuelle.getSeconds(); var tpsattente = tpsattente - heureactuelle; return tpsattente / 60; } function apiCall(stop_id, box, line, inFavorites = true){ var result = getLines(stop_id, line); result.then(async function (result) { // Récup du JSON if (result[0] == undefined) { box.innerHTML = current_stop; box.innerHTML += '

Aucun passage prévu

'; if (!inFavorites) { line = line.split(':'); network = line[0]; line = line[1]; var isFav = await isFavorite(stop_id); if (!isFav[0]) { box.innerHTML += '

Ajouter cet arrêt en favori

'; } else { box.innerHTML += '

Retirer cet arrêt des favoris

'; } } } else { // On récupère les terminus var terminus = getTerminus(result); var final = ""; for (var i = 0; i < result.length; i++) { if (result[i].times.length < 2) { var len = result[i].times.length; } else { var len = 2; } for (var j = 0; j < len; j++) { var tpsattente = result[i].times[j].realtimeArrival; var direction = result[i].pattern.lastStopName; // On split avec la virgule pour récupérer le nom du terminus var direction = direction.split(','); var direction = direction[1]; var attente = calcul(tpsattente); attente = Math.round(attente); if (result[i].times[j].realtime) { if (advancedMode) { let line_delay = Math.floor(result[i].times[j].arrivalDelay / 60); if (line_delay < 0) { var realTime = ' (A' + Math.abs(line_delay) + ')'; } else if (line_delay > 1) { var realTime = ' (R' + line_delay + ')'; } else { var realTime = ' (A l\'heure)'; } } else { var realTime = ''; } } else { var realTime = '*'; } if (attente < 1) { var tps = "<1 min" + realTime; } else if (attente > 59) { var tps = "> 1h" + realTime; } else { var tps = attente + " min" + realTime; } // On ajoute le temps d'attente au tableau associatif terminus[direction].push(tps); } } // On ordonne les temps d'attente (attention, le <1 min doit être en premier et le > 1h en dernier), on limite le nombre de temps d'attente à 2 for (var key in terminus) { terminus[key].sort(function (a, b) { if (a == "<1 min") { return -1; } else if (b == "<1 min") { return 1; } else if (a == "> 1h") { return 1; } else if (b == "> 1h") { return -1; } else { return a - b; } }); terminus[key] = terminus[key].slice(0, 2); } // On affiche les terminus et les temps d'attente final = current_stop; for (var key in terminus) { final += '

' + key + ' : ' + terminus[key].join(' - ') + '

'; } if (!inFavorites) { line = line.split(':'); network = line[0]; line = line[1]; var isFav = await isFavorite(stop_id); if (!isFav[0]) { var city_name = current_box.parentElement.getElementsByTagName('span')[0].innerText; var stop_name = current_box.parentElement.getElementsByTagName('p')[0].innerText; city_name = city_name.replace('\'', '\\\'') stop_name = stop_name.replace('\'', '\\\'') final += '

Ajouter cet arrêt en favori

'; } else { final += '

Retirer cet arrêt des favoris

'; } } box.innerHTML = final; } }); } var current_stop = ""; var current_stopid = ""; var current_box = ""; var current_boxid = "";