Skip to content

Instantly share code, notes, and snippets.

@tintinweb
Created January 24, 2024 23:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tintinweb/3ab44256d147700b1850dcebdc0e81ae to your computer and use it in GitHub Desktop.
Save tintinweb/3ab44256d147700b1850dcebdc0e81ae to your computer and use it in GitHub Desktop.
BenkoJet - a hacky adsbexchange jet tracker (+ future BenkoJet tweeter?) 🐦
/***
BenkoJet auto-tweet'er
todo:
- grab a user token from adsbexchange
- implement twitter api
- only tweet if last flight changed
super cheap. salut 🫑
{
registration: 'OE-IRB',
icao: '440cbc',
ac_type: 'GLEX',
year: null,
manufacturer: null,
model: 'Bombardier BD700-Global 6000/6500',
ownop: null,
short_type: 'L2J',
faafieldlength: 3667,
aclength: 99.4,
acheight: 25.5,
wingspan: 94,
range: 6226,
burnrate: 513
}
--------------------------------------------------------------------------------------------------------------------
πŸ‘¨β€βœˆοΈ BenkoJet Bombardier BD700-Global 6000/6500 (OE-IRB) ist vor kurzem in 'Innsbruck Airport' gelandet πŸ₯³!
6:55:29 PM 7:36:32 PM
[Vienna International Airport] πŸ›« ☁️☁️☁️☁️☁️ 0:41 ☁️☁️☁️☁️☁️ πŸ›¬ [Innsbruck Airport]
↔️ 401.884 km
--------------------------------------------------------------------------------------------------------------------
*/
class BenkoJet {
constructor(icaoId) {
this.icaoId = icaoId;
}
async icao() {
const payload = {
"user_token": "<auth-jwt>",
"payload": {
"icao": this.icaoId,
"full_details": true
}
}
const ret = await fetch("https://adsbexchange.com/api/aircraft/v2/operations/icao", {
"headers": { // make this look like a browser request
"accept": "application/json, text/javascript, */*; q=0.01",
"accept-language": "en-GB,en-US;q=0.9,en;q=0.8",
"content-type": "application/json",
"sec-ch-ua": "\"Google Chrome\";v=\"119\", \"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "\"macOS\"",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-site",
"Referer": "https://globe.adsbexchange.com/",
"Referrer-Policy": "strict-origin-when-cross-origin"
},
"body": JSON.stringify(payload),
"method": "POST"
});
return await ret.json();
}
}
async function main() {
const benko = new BenkoJet("440cbc")
// run the script 2 times a day
const icao = await benko.icao();
console.log(icao.aircraft_details)
// store this as "latest.json"
const latest = icao.items[0]
// todo: check current icao.items against latest.json.
// todo: if has changed, tweet about it πŸš€
const message = `πŸ‘¨β€βœˆοΈ BenkoJet ${icao.aircraft_details.model} (${icao.aircraft_details.registration}) ist vor kurzem in '${latest.landing_name}' gelandet πŸ₯³!
${new Date(latest.takeoff_time_epoch).toLocaleTimeString()} ${new Date(latest.landing_time_epoch).toLocaleTimeString()}
[${latest.takeoff_name}] πŸ›« ☁️☁️☁️☁️☁️ ${latest.duration} ☁️☁️☁️☁️☁️ πŸ›¬ [${latest.landing_name}]
↔️ ${latest.distance * 1.85200} km
`;
// todo: tweet
console.log(message)
return;
}
main();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment