-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathflightaware_tracklog_download.user.js
126 lines (103 loc) · 3.31 KB
/
flightaware_tracklog_download.user.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
// ==UserScript==
// @name Flight aware - tracklog
// @namespace http://tampermonkey.net/
// @version 1.0
// @description Download tracklog to csv
// @downloadURL https://raw.githubusercontent.com/AlucardDH/userscripts/master/flightaware_tracklog_download.user.js
// @updateURL https://raw.githubusercontent.com/AlucardDH/userscripts/master/flightaware_tracklog_download.user.js
// @author Damien Hembert
// @match https://fr.flightaware.com/live/flight/*/tracklog
// @grant none
// ==/UserScript==
var DATE;
var SEPARATOR = ',';
var HEADERS = [];
var FORMATTERS = {
'LatitudeLat':function(td) {
return $($(td).children()[0]).text();
},
'LongitudeLon':function(td) {
return $($(td).children()[0]).text();
},
'Horaire (CET)CET':function(td) {
var text = $($(td).children()[0]).text();
return DATE+text.substring(text.indexOf(' '));
},
'CapDir':function(td){
var text = $(td).text();
return text.substring(1,text.length-1);
},
'mètres':function(td) {
return $($(td).find('span')[0]).text().replace(/\./,'');
}
}
var IGNORE = {
'Taux':true,
'Centre d\'informations':true
}
function parseUrl() {
var result = {};
var parse = document.location.href.match(/flight\/(.*)\/history\/(\d{8})\/(\d{4}Z)\/(\w{4})\/(\w{4})/);
result.flightNumber=parse[1];
result.date=parse[2];
result.time=parse[3];
result.departure=parse[4];
result.arrival=parse[5];
return result;
}
function isLineIgnore(tr) {
var result = tr.className.indexOf('flight_event')>-1 || !$(tr).text().trim();
//console.log(tr,$(tr).text().trim(),result);
return result;
}
function getHeaderCsv(tr) {
var result = '';
$(tr).find('th').each(function(index,th) {
var header = $(th).text();
HEADERS.push(header);
if(!IGNORE[header]) {
result += header+SEPARATOR;
}
});
return result.substring(0,result.length-1);
}
function getLineCsv(tr) {
var result = '';
$(tr).find('td').each(function(index,td) {
var header = HEADERS[index];
if(!IGNORE[header]) {
var text;
if(FORMATTERS[header]) {
text = FORMATTERS[HEADERS[index]](td);
} else {
text = $(td).text();
}
result += text+SEPARATOR;
}
});
return result.substring(0,result.length-1);
}
function downloadButton(content,filename) {
return $('<a id="download" href="data:application/octet-stream,'+content.replace(/\n/g,'%0A').replace(/ /g,'%20')+'" download="'+filename+'">Download as CSV</a>');
}
(function() {
'use strict';
var infos = parseUrl();
DATE = infos.date;
var resultCsv = '';
var line=0;
$("#tracklogTable").find('tr').each(function(index,tr) {
var lineCsv = null;
if(line==0) {
lineCsv = getHeaderCsv(tr);
} else if(!isLineIgnore(tr)) {
lineCsv = getLineCsv(tr);
}
if(lineCsv && lineCsv.trim()) {
resultCsv += lineCsv+'\n';
}
line++;
});
console.log(resultCsv);
$($('#tracklogTable').parents(".row")[0]).prepend(downloadButton(resultCsv,infos.flightNumber+'-'+infos.date+'-'+infos.time+'-'+infos.departure+'-'+infos.arrival+'.csv'));
})();