Advertisement
Guest User

tracker.py

a guest
Jul 4th, 2017
495
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 59.53 KB | None | 0 0
  1. #
  2. # tracker.py
  3. #
  4. # kevinabrandon@gmail.com
  5. #
  6.  
  7. import sys
  8. from time import sleep
  9. from twitter import *
  10. import flightdata
  11. import screenshot
  12. from configparser import ConfigParser
  13. from string import Template
  14. import geomath
  15.  
  16. # Read the configuration file for this application.
  17. parser = ConfigParser()
  18. parser.read('config.ini')
  19.  
  20. # Assign AboveTustin variables.
  21. abovetustin_distance_alarm = int(parser.get('abovetustin', 'distance_alarm')) # The alarm distance in miles.
  22. abovetustin_elevation_alarm = int(parser.get('abovetustin', 'elevation_alarm')) # The angle in degrees that indicates if the airplane is overhead or not.
  23. abovetustin_wait_x_updates = int(parser.get('abovetustin', 'wait_x_updates')) # Number of updates to wait after the airplane has left the alarm zone before tweeting.
  24. abovetustin_sleep_time = float(parser.get('abovetustin', 'sleep_time')) # Time between each loop.
  25.  
  26. # Assign Twitter variables.
  27. twitter_consumer_key = parser.get('twitter', 'consumer_key')
  28. twitter_consumer_secret = parser.get('twitter', 'consumer_secret')
  29. twitter_access_token = parser.get('twitter', 'access_token')
  30. twitter_access_token_secret = parser.get('twitter', 'access_token_secret')
  31.  
  32. # Login to twitter.
  33. twit = Twitter(auth=(OAuth(twitter_access_token, twitter_access_token_secret, twitter_consumer_key, twitter_consumer_secret)))
  34.  
  35. # Given an aircraft 'a' tweet.
  36. # If we have a screenshot, upload it to twitter with the tweet.
  37. def Tweet(a, havescreenshot):
  38. # compile the template arguments
  39. templateArgs = dict()
  40. templateArgs['flight'] = a.flight
  41. if templateArgs['flight'] == 'N/A':
  42. templateArgs['flight'] = a.hex
  43. templateArgs['flight'] = templateArgs['flight'].replace(" ", "")
  44. templateArgs['icao'] = a.hex
  45. templateArgs['icao'] = templateArgs['icao'].replace(" ", "")
  46. templateArgs['dist'] = "%.1f" % a.distance
  47. templateArgs['alt'] = a.altitude
  48. templateArgs['el'] = "%.1f" % a.el
  49. templateArgs['az'] = "%.1f" % a.az
  50. templateArgs['heading'] = geomath.HeadingStr(a.track)
  51. templateArgs['speed'] = "%.1f" % a.speed
  52. templateArgs['time'] = a.time.strftime('%H:%M:%S')
  53. templateArgs['squawk'] = a.squawk
  54. templateArgs['vert_rate'] = a.vert_rate
  55. templateArgs['rssi'] = a.rssi
  56.  
  57. tweet = Template(parser.get('tweet', 'tweet_template')).substitute(templateArgs)
  58.  
  59. #conditional hashtags:
  60. hashtags = []
  61.  
  62. flights_to_hashtags = {
  63. '!': " #Inconnu",
  64. '@FlightAwareADSB:': " #Inconnu",
  65. '~180a9f': " #Inconnu",
  66. '~217dbb': " #Inconnu",
  67. '~2a45b8': " #Inconnu",
  68. '~7ec161': " #Inconnu",
  69. '~84e522': " #Inconnu",
  70. '~8b403d': " #Inconnu",
  71. '~9365d6': " #Inconnu",
  72. '~ac7d3d': " #Inconnu",
  73. '~de755e': " #Inconnu",
  74. '02a041': " #Inconnu",
  75. '3911d3': " #Inconnu",
  76. '39470b': " #Inconnu",
  77. '39810000': " #Inconnu",
  78. '39ad12': " #Inconnu",
  79. '3AMGA': " #Inconnu",
  80. '3c5cac': " #Inconnu",
  81. '3cd950': " #Inconnu",
  82. '400796': " #Inconnu",
  83. '43ea86': " #Inconnu",
  84. '44ccd8': " #Inconnu",
  85. '45acc5': " #Inconnu",
  86. '484acc': " #Inconnu",
  87. '484c1b': " #Inconnu",
  88. '49523a': " #Inconnu",
  89. '4ca4f5': " #Inconnu",
  90. '4ca624': " #Inconnu",
  91. '4ca99c': " #Inconnu",
  92. '4d029e': " #Inconnu",
  93. '7TVNM': " #Inconnu",
  94. '9HSMI': " #Inconnu",
  95. 'a': " #Inconnu",
  96. 'AAB099': " #Inconnu",
  97. 'AAB103': " #Inconnu",
  98. 'AAB123': " #Inconnu",
  99. 'AAB266': " #Inconnu",
  100. 'AAB767': " #Inconnu",
  101. 'AAB816': " #Inconnu",
  102. 'AAB854': " #Inconnu",
  103. 'AAB872': " #Inconnu",
  104. 'AAB991': " #Inconnu",
  105. 'ABR431': " #InconnuDublinChambery",
  106. 'ADN16A': " #Inconnu",
  107. 'AEA433': " #EUROPABarcelonaTel-aviv",
  108. 'AEA841': " #EUROPA",
  109. 'AEA857': " #EUROPAPalmadeMallorcaBorlange",
  110. 'AEA882': " #EUROPA",
  111. 'AEA934': " #EUROPASevillaVienna",
  112. 'AEA945': " #EUROPA",
  113. 'AEE2BR': " #AEGEANAthensBrussels",
  114. 'AEE623': " #AEGEANBrusselsAthens",
  115. 'AFR1336': " #AIRFRANSStrasbourgAmsterdam",
  116. 'AFR487': " #AIRFRANSAmmanParis",
  117. 'AHO007X': " #AirHamburg",
  118. 'AHO318Q': " #AirHamburg",
  119. 'AHO494D': " #AirHamburg",
  120. 'AHO495V': " #AirHamburg",
  121. 'AHO577E': " #AirHamburg",
  122. 'AHO714W': " #AirHamburg",
  123. 'AHO724W': " #AirHamburg",
  124. 'AHO767B': " #AirHamburg",
  125. 'airtelis': " #AIRLIFT",
  126. 'AMC3422': " #AIRMALTA",
  127. 'AMC3426': " #AIRMALTAMaltaLuxemburg",
  128. 'AMC394': " #AIRMALTAMaltaAmsterdam",
  129. 'AMC394A': " #AIRMALTAMaltaAmsterdam",
  130. 'AMC420': " #AIRMALTAMaltaBrussels",
  131. 'AMC421': " #AIRMALTABrusselsMalta",
  132. 'AMC422': " #AIRMALTAMaltaBrussels",
  133. 'ANA1952': " #ALLNIPPONGenevaFukuoka",
  134. 'AOJ48L': " #Inconnu",
  135. 'AOJ75C': " #Inconnu",
  136. 'APX1C': " #Inconnu",
  137. 'ASJ725': " #Inconnu",
  138. 'ATL8F': " #Inconnu",
  139. 'ATV017G': " #Inconnu",
  140. 'ATV031G': " #Inconnu",
  141. 'ATV202G': " #Inconnu",
  142. 'AUA418G': " #AUSTRIANParisVienna",
  143. 'avarie?': " #S.A.",
  144. 'AWC171': " #InconnuLondonCalvi",
  145. 'AWC201Y': " #Inconnu",
  146. 'AWU928': " #SYLT-AIR",
  147. 'AXY2710': " #Inconnu",
  148. 'AYY102': " #Inconnu",
  149. 'AYY151': " #Inconnu",
  150. 'AZA108': " #ALITALIARomeAmsterdam",
  151. 'AZA11Y': " #ALITALIAMilanAmsterdam",
  152. 'AZA120': " #ALITALIAMilanAmsterdam",
  153. 'AZA132': " #ALITALIARomeAmsterdam",
  154. 'AZA148': " #ALITALIAMilanBrussels",
  155. 'AZA150': " #ALITALIAMilanBrussels",
  156. 'AZA154': " #ALITALIAMilanBrussels",
  157. 'AZA156': " #ALITALIARomeBrussels",
  158. 'AZA211': " #ALITALIALondonRome",
  159. 'AZA215': " #ALITALIALondonMilan",
  160. 'AZA217': " #ALITALIALondonMilan",
  161. 'AZA219': " #ALITALIALondonMilan",
  162. 'AZA59E': " #ALITALIABrusselsRome",
  163. 'AZA70Y': " #ALITALIATorinoAmsterdam",
  164. 'AZA72B': " #ALITALIALondonMilan",
  165. 'AZA74F': " #ALITALIARomeAmsterdam",
  166. 'AZA82J': " #ALITALIALondonMilan",
  167. 'AZA88Z': " #ALITALIARomeBrussels",
  168. 'BAF211': " #Inconnu",
  169. 'BAF212': " #Inconnu",
  170. 'BAF617': " #Inconnu",
  171. 'BAW14R': " #SPEEDBIRDLondonZurich",
  172. 'BAW16GM': " #SPEEDBIRDLondonMilan",
  173. 'BAW2649': " #SPEEDBIRDTiranaLondon",
  174. 'BAW364': " #SPEEDBIRDLondonLyon",
  175. 'BAW568': " #SPEEDBIRDLondonMilan",
  176. 'BAW62G': " #SPEEDBIRDLondonMulhouse",
  177. 'BAW64G': " #SPEEDBIRDLondonMulhouse",
  178. 'BAW710': " #SPEEDBIRDLondonZurich",
  179. 'BAW712': " #SPEEDBIRDLondonZurich",
  180. 'BAW714T': " #SPEEDBIRDLondonZurich",
  181. 'BAW718': " #SPEEDBIRDLondonZurich",
  182. 'BAW720T': " #SPEEDBIRDLondonZurich",
  183. 'BAW748': " #SPEEDBIRDLondonMulhouse",
  184. 'BAW756': " #SPEEDBIRDLondonMulhouse",
  185. 'BCS1730': " #InconnuBrusselsLyon",
  186. 'BCS2109': " #InconnuLondonLeipzig",
  187. 'BCS308': " #InconnuBrusselsBergamo",
  188. 'BCS4908': " #InconnuMulhouseBrussels",
  189. 'BCY061P': " #CITY-IRELAND",
  190. 'BCY80A': " #CITY-IRELANDFlorenceLondon",
  191. 'BEL10D': " #BrusselsAirlinesMilanBrussels",
  192. 'BEL12F': " #BrusselsAirlinesMilanBrussels",
  193. 'BEL13C': " #BrusselsAirlinesCataniaBrussels",
  194. 'BEL13P': " #BrusselsAirlinesPalermoBrussels",
  195. 'BEL14Q': " #BrusselsAirlinesFlorenceBrussels",
  196. 'BEL18N': " #BrusselsAirlinesNiceBrussels",
  197. 'BEL19T': " #BrusselsAirlines",
  198. 'BEL1GV': " #BrusselsAirlinesBrusselsCatania",
  199. 'BEL1LY': " #BrusselsAirlinesBrusselsGeneva",
  200. 'BEL1TA': " #BrusselsAirlinesBrusselsCatania",
  201. 'BEL20B': " #BrusselsAirlinesMilanBrussels",
  202. 'BEL22N': " #BrusselsAirlinesNiceBrussels",
  203. 'BEL24N': " #BrusselsAirlinesNiceBrussels",
  204. 'BEL2GV': " #BrusselsAirlinesBrusselsGeneva",
  205. 'BEL2NB': " #BrusselsAirlines",
  206. 'BEL2WA': " #BrusselsAirlinesBrusselsMulhouse",
  207. 'BEL3107': " #BrusselsAirlinesBrusselsOlbia",
  208. 'BEL3108': " #BrusselsAirlinesOlbiaBrussels",
  209. 'BEL3183': " #BrusselsAirlinesBrusselsRome",
  210. 'BEL3184': " #BrusselsAirlinesRomeBrussels",
  211. 'BEL31P': " #BrusselsAirlinesNaplesBrussels",
  212. 'BEL3213': " #BrusselsAirlines",
  213. 'BEL3214': " #BrusselsAirlines",
  214. 'BEL352': " #BrusselsAirlinesKinshasaDouala",
  215. 'BEL357': " #BrusselsAirlinesBrusselsKinshasa",
  216. 'BEL3578': " #BrusselsAirlinesAjaccioBrussels",
  217. 'BEL358': " #BrusselsAirlinesKinshasaBrussels",
  218. 'BEL3580': " #BrusselsAirlinesBastiaBrussels",
  219. 'BEL3581': " #BrusselsAirlines",
  220. 'BEL359': " #BrusselsAirlinesBrusselsLuanda",
  221. 'BEL35C': " #BrusselsAirlinesColumbusBrussels",
  222. 'BEL3615': " #BrusselsAirlinesBrusselsNice",
  223. 'BEL3616': " #BrusselsAirlinesNiceBrussels",
  224. 'BEL36V': " #BrusselsAirlinesVeniceBrussels",
  225. 'BEL371': " #BrusselsAirlinesBrusselsDouala",
  226. 'BEL372': " #BrusselsAirlinesYaoundeDouala",
  227. 'BEL3GV': " #BrusselsAirlinesBrusselsGeneva",
  228. 'BEL3LY': " #BrusselsAirlinesBrusselsLyon",
  229. 'BEL3MR': " #BrusselsAirlinesBrusselsMarseille",
  230. 'BEL469': " #BrusselsAirlinesBrusselsEntebbe",
  231. 'BEL49U': " #BrusselsAirlinesAlicanteBrussels",
  232. 'BEL4FC': " #BrusselsAirlinesBrusselsRome",
  233. 'BEL4GV': " #BrusselsAirlinesBrusselsGeneva",
  234. 'BEL4SM': " #BrusselsAirlinesBrusselsMulhouse",
  235. 'BEL56L': " #BrusselsAirlinesMilanoBrussels",
  236. 'BEL579': " #BrusselsAirlinesBrusselsBastia",
  237. 'BEL58M': " #BrusselsAirlinesMilanoBrussels",
  238. 'BEL58R': " #BrusselsAirlinesHeraklionBrussels",
  239. 'BEL5FC': " #BrusselsAirlinesBrusselsRome",
  240. 'BEL5HR': " #BrusselsAirlinesBrusselsNice",
  241. 'BEL5RN': " #BrusselsAirlinesBrusselsTorino",
  242. 'BEL67K': " #BrusselsAirlines",
  243. 'BEL6CE': " #BrusselsAirlinesBrusselsNice",
  244. 'BEL6DR': " #BrusselsAirlinesBrusselsMilano",
  245. 'BEL6GV': " #BrusselsAirlinesBrusselsGeneva",
  246. 'BEL6Q': " #BrusselsAirlinesBolognaBrussels",
  247. 'BEL706': " #BrusselsAirlinesMulhouseBrussels",
  248. 'BEL712': " #BrusselsAirlinesGenevaBrussels",
  249. 'BEL716': " #BrusselsAirlinesGenevaBrussels",
  250. 'BEL720': " #BrusselsAirlinesGenevaBrussels",
  251. 'BEL722': " #BrusselsAirlinesGenevaBrussels",
  252. 'BEL72L': " #BrusselsAirlinesMulhouseBrussels",
  253. 'BEL74C': " #BrusselsAirlinesBarcelonaBrussels",
  254. 'BEL76F': " #BrusselsAirlinesRomeBrussels",
  255. 'BEL77B': " #BrusselsAirlinesMilanoBrussels",
  256. 'BEL7LY': " #BrusselsAirlinesBrusselsLyon",
  257. 'BEL7MR': " #BrusselsAirlinesBrusselsMarseille",
  258. 'BEL82F': " #BrusselsAirlinesRomeBrussels",
  259. 'BEL88F': " #BrusselsAirlinesRomeBrussels",
  260. 'BEL88L': " #BrusselsAirlinesLyonBrussels",
  261. 'BEL8FC': " #BrusselsAirlinesBrusselsRome",
  262. 'BEL8GL': " #BrusselsAirlinesMarseilleGenoa",
  263. 'BEL92L': " #BrusselsAirlinesLyonBrussels",
  264. 'BEL94L': " #BrusselsAirlinesBastiaBrussels",
  265. 'BEL9902': " #BrusselsAirlinesNewYorkBrussels",
  266. 'BEL9908': " #BrusselsAirlinesPragueBrussels",
  267. 'BEL9GV': " #BrusselsAirlinesBrusselsGeneva",
  268. 'BEL9LR': " #BrusselsAirlinesBrusselsFlorence",
  269. 'BER100P': " #AIRBERLINStuttgartHamburg",
  270. 'BER1HE': " #AIRBERLINGenevaDuesseldorf",
  271. 'BER1ZN': " #AIRBERLINBarcelonaDuesseldorf",
  272. 'BER302U': " #AIRBERLINFlorenceDuesseldorf",
  273. 'BER34D': " #AIRBERLIN",
  274. 'BER425W': " #AIRBERLIN",
  275. 'BER4AA': " #AIRBERLINBarcelonaDuesseldorf",
  276. 'BER585E': " #AIRBERLINOlbiaDuesseldorf",
  277. 'BER5KE': " #AIRBERLINMilanDuesseldorf",
  278. 'BER5SC': " #AIRBERLIN",
  279. 'BER5YA': " #AIRBERLINDuesseldorfBarcelona",
  280. 'BER668E': " #AIRBERLINFlorenceDuesseldorf",
  281. 'BER6M': " #AIRBERLINBarcelonaDuesseldorf",
  282. 'BER6SQ': " #AIRBERLINGenevaDuesseldorf",
  283. 'BER8331': " #AIRBERLINViennaHamburg",
  284. 'BER8622': " #AIRBERLINDuesseldorfGeneva",
  285. 'BER8626': " #AIRBERLINNuernbergBrindisi",
  286. 'BER8940': " #AIRBERLINHamburgHelsinki",
  287. 'BER8946': " #AIRBERLINDuesseldorfBarcelona",
  288. 'BER9RH': " #AIRBERLIN",
  289. 'BFD06K': " #Inconnu",
  290. 'BFD11T': " #Inconnu",
  291. 'BFG209': " #Inconnu",
  292. 'BFG216': " #Inconnu",
  293. 'BGA131F': " #InconnuHamburgToulouse",
  294. 'BKK11K': " #Inconnu",
  295. 'BLJ54S': " #Inconnu",
  296. 'BPA8376': " #BLUEPANOROMA",
  297. 'BZE06B': " #BRAZILAIR",
  298. 'CAJ1508': " #Inconnu",
  299. 'CAZ501': " #Inconnu",
  300. 'CCM790P': " #CORSICA",
  301. 'CCM791P': " #CORSICA",
  302. 'CCM792B': " #CORSICA",
  303. 'CCM793B': " #CORSICA",
  304. 'CEF549': " #Inconnu",
  305. 'CFE1AX': " #FLYER",
  306. 'CFE3DW': " #FLYERLondonFlorence",
  307. 'CFE45J': " #FLYERLondonZurich",
  308. 'CFE5EF': " #FLYER",
  309. 'CFE7307': " #FLYERLondonMilan",
  310. 'CFE7309': " #FLYERLondonMilan",
  311. 'CFE8KH': " #FLYER",
  312. 'CFE8TR': " #FLYERLondonFlorence",
  313. 'CFE94C': " #FLYERLondonZurich",
  314. 'CFG1ML': " #CONDORStuttgartSantaCruzDeLaPalma",
  315. 'CFG1MY': " #CONDORDuesseldorfPalmadeMallorca",
  316. 'CFG1PW': " #CONDORPalmadeMallorcaDuesseldorf",
  317. 'CFG1TK': " #CONDORPalmadeMallorcaDuesseldorf",
  318. 'CFG2CH': " #CONDORStuttgartGranCanaria",
  319. 'CFG2FA': " #CONDORTenerifeLeipzig",
  320. 'CFG2HD': " #CONDORDuesseldorfIbiza",
  321. 'CFG2KE': " #CONDOR",
  322. 'CFG2LV': " #CONDORPalmadeMallorcaHannover",
  323. 'CFG2MW': " #CONDORStuttgartFuerteventura",
  324. 'CFG2PL': " #CONDORPalmadeMallorcaBerlin",
  325. 'CFG3AP': " #CONDORPalmadeMallorcaDuesseldorf",
  326. 'CFG3CE': " #CONDORMunichGranCanaria",
  327. 'CFG3LK': " #CONDORStuttgartFunchal",
  328. 'CFG3MV': " #CONDORDuesseldorfBerlin",
  329. 'CFG3ZY': " #CONDORHeraklionLeipzig",
  330. 'CFG4ED': " #CONDOR",
  331. 'CFG4PK': " #CONDORHeraklionDuesseldorf",
  332. 'CFG5CK': " #CONDORStuttgartRhodos",
  333. 'CFG5VF': " #CONDORDuesseldorfPalmadeMallorca",
  334. 'CFG5WP': " #CONDORPalmadeMallorcaDuesseldorf",
  335. 'CFG6AF': " #CONDORDuesseldorfPalmadeMallorca",
  336. 'CFG6CE': " #CONDORPalmadeMallorcaDuesseldorf",
  337. 'CFG6LY': " #CONDORPalmadeMallorcaDuesseldorf",
  338. 'CFG8LC': " #CONDORPalmadeMallorcaHamburg",
  339. 'CFG8LD': " #CONDORDuesseldorfPalmadeMallorca",
  340. 'CFG8ME': " #CONDORFrankfurtTenerife",
  341. 'CFG8TA': " #CONDORFuerteventuraBerlin",
  342. 'CFG9KX': " #CONDORPalmadeMallorcaHannover",
  343. 'CLS502': " #Inconnu",
  344. 'CLS604': " #Inconnu",
  345. 'CND216': " #InconnuOhridAntalya",
  346. 'D6132': " #Inconnu",
  347. 'DAH2062': " #AIRALGERIEAlgierBrussels",
  348. 'DAH2063': " #AIRALGERIEBrusselsAlgier",
  349. 'DAL407': " #DELTANewYorkZurich",
  350. 'DAL419': " #DELTAMilanoNewYork",
  351. 'DBEAR': " #Inconnu",
  352. 'DBJKP': " #Inconnu",
  353. 'DBONN': " #Inconnu",
  354. 'DCAWX': " #Inconnu",
  355. 'DCBCT': " #Inconnu",
  356. 'DCEER': " #Inconnu",
  357. 'DCEUS': " #Inconnu",
  358. 'DCHMS': " #Inconnu",
  359. 'DCIFM': " #Inconnu",
  360. 'DCPOS': " #Inconnu",
  361. 'de': " #Inconnu",
  362. 'DE1814T': " #Inconnu",
  363. 'DEEZU': " #Inconnu",
  364. 'DELAO': " #Inconnu",
  365. 'DELZC': " #Inconnu",
  366. 'DESEX': " #Inconnu",
  367. 'DFSSS': " #Inconnu",
  368. 'DGBFS': " #Inconnu",
  369. 'DHK082': " #Inconnu",
  370. 'DHK308': " #Inconnu",
  371. 'DIDPL': " #Inconnu",
  372. 'DIDWC': " #Inconnu",
  373. 'DIMAH': " #Inconnu",
  374. 'DIOBO': " #Inconnu",
  375. 'DIPVD': " #Inconnu",
  376. 'DISAR': " #Inconnu",
  377. 'DITAN': " #Inconnu",
  378. 'DITIM': " #Inconnu",
  379. 'DIVIV': " #Inconnu",
  380. 'DLH2F': " #LUFTHANSAMunichToulouse",
  381. 'DLH51P': " #LUFTHANSAFrankfurtMadrid",
  382. 'DLH54U': " #LUFTHANSAMarseilleFrankfurt",
  383. 'DLH5K': " #LUFTHANSAGenevaFrankfurt",
  384. 'DLH66A': " #LUFTHANSALyonFrankfurt",
  385. 'DLH72T': " #LUFTHANSABarcelonaFrankfurt",
  386. 'DLH83U': " #LUFTHANSAFrankfurtBarcelona",
  387. 'DLH84U': " #LUFTHANSAMunichParis",
  388. 'DLH9K': " #LUFTHANSAGenevaFrankfurt",
  389. 'DTR431': " #DANISH",
  390. 'DTR635': " #DANISH",
  391. 'DUK3AMB': " #Inconnu",
  392. 'DUK7AMB': " #Inconnu",
  393. 'ECA111': " #EUROCYPRIA",
  394. 'ECA333': " #EUROCYPRIA",
  395. 'ECA456': " #EUROCYPRIA",
  396. 'ECA555': " #EUROCYPRIA",
  397. 'ECA777': " #EUROCYPRIA",
  398. 'EFD555': " #Inconnu",
  399. 'EOA001': " #Inconnu",
  400. 'et': " #Inconnu",
  401. 'ETH3717': " #ETHIOPIANLiegeLagos",
  402. 'ETH3721': " #ETHIOPIANLiegeAddisAbaba",
  403. 'ETH3725': " #ETHIOPIANLiegeLagos",
  404. 'ETH701': " #ETHIOPIANLondonAddisAbaba",
  405. 'ETH704': " #ETHIOPIANAddisAbabaParis",
  406. 'ETH734': " #ETHIOPIANMilanoBrussels",
  407. 'ETI821Z': " #Inconnu",
  408. 'EWG16K': " #EUROWINGS",
  409. 'EWG1KB': " #EUROWINGSGenevaDuesseldorf",
  410. 'EWG1U': " #EUROWINGSColognePalmadeMallorca",
  411. 'EWG1UY': " #EUROWINGSMilanoDuesseldorf",
  412. 'EWG1VC': " #EUROWINGSMalagaDuesseldorf",
  413. 'EWG1WN': " #EUROWINGS",
  414. 'EWG1XA': " #EUROWINGSPalmadeMallorcaHamburg",
  415. 'EWG1XP': " #EUROWINGS",
  416. 'EWG20A': " #EUROWINGSParisDuesseldorf",
  417. 'EWG2A': " #EUROWINGS",
  418. 'EWG2AN': " #EUROWINGSPalmadeMallorcaHamburg",
  419. 'EWG2K': " #EUROWINGSPalmadeMallorcaDuesseldorf",
  420. 'EWG2PN': " #EUROWINGS",
  421. 'EWG31Z': " #EUROWINGSDuesseldorfMilano",
  422. 'EWG3CH': " #EUROWINGSBarcelonaCologne",
  423. 'EWG3FE': " #EUROWINGSBilbaoDuesseldorf",
  424. 'EWG3NK': " #EUROWINGSDuesseldorfIbiza",
  425. 'EWG3TL': " #EUROWINGSMunsterPalmadeMallorca",
  426. 'EWG3VA': " #EUROWINGSMilanoDuesseldorf",
  427. 'EWG3YT': " #EUROWINGS",
  428. 'EWG441': " #EUROWINGS",
  429. 'EWG44G': " #EUROWINGS",
  430. 'EWG4AK': " #EUROWINGSDuesseldorfLyon",
  431. 'EWG4BB': " #EUROWINGS",
  432. 'EWG4CP': " #EUROWINGS",
  433. 'EWG4CW': " #EUROWINGSNiceHamburg",
  434. 'EWG4HT': " #EUROWINGSPalmadeMallorcaDuesseldorf",
  435. 'EWG4JN': " #EUROWINGSLyonDuesseldorf",
  436. 'EWG4ZG': " #EUROWINGSIbizaDuesseldorf",
  437. 'EWG50C': " #EUROWINGSLyonDuesseldorf",
  438. 'EWG50Z': " #EUROWINGS",
  439. 'EWG526': " #EUROWINGSCologneBarcelona",
  440. 'EWG53Z': " #EUROWINGSIbizaCologne",
  441. 'EWG547': " #EUROWINGS",
  442. 'EWG5612': " #EUROWINGS",
  443. 'EWG5613': " #EUROWINGS",
  444. 'EWG586': " #EUROWINGSColognePalmadeMallorca",
  445. 'EWG587': " #EUROWINGSPalmadeMallorcaCologne",
  446. 'EWG589': " #EUROWINGSPalmadeMallorcaCologne",
  447. 'EWG591': " #EUROWINGS",
  448. 'EWG5KM': " #EUROWINGSCologneIbiza",
  449. 'EWG5T': " #EUROWINGSDuesseldorfPalmadeMallorca",
  450. 'EWG5WP': " #EUROWINGSRomeDuesseldorf",
  451. 'EWG6806': " #EUROWINGSPalmadeMallorcaMunster",
  452. 'EWG6808': " #EUROWINGSPalmadeMallorcaPaderborn",
  453. 'EWG6809': " #EUROWINGSPaderbornPalmadeMallorca",
  454. 'EWG6812': " #EUROWINGSPalmadeMallorcaDortmund",
  455. 'EWG6826': " #EUROWINGS",
  456. 'EWG6906': " #EUROWINGS",
  457. 'EWG6BA': " #EUROWINGS",
  458. 'EWG6LR': " #EUROWINGSNuernbergHamburg",
  459. 'EWG6MZ': " #EUROWINGSPalmadeMallorcaDuesseldorf",
  460. 'EWG6PV': " #EUROWINGSIbizaHamburg",
  461. 'EWG6UX': " #EUROWINGS",
  462. 'EWG71N': " #EUROWINGS",
  463. 'EWG77C': " #EUROWINGSDuesseldorfPalmadeMallorca",
  464. 'EWG7EV': " #EUROWINGSDuesseldorfValencia",
  465. 'EWG7FR': " #EUROWINGSAlicanteDuesseldorf",
  466. 'EWG7G': " #EUROWINGSPalmadeMallorcaDuesseldorf",
  467. 'EWG7LZ': " #EUROWINGSGenevaDuesseldorf",
  468. 'EWG7UH': " #EUROWINGS",
  469. 'EWG7WZ': " #EUROWINGSDuesseldorfPalmadeMallorca",
  470. 'EWG7XV': " #EUROWINGS",
  471. 'EWG7ZK': " #EUROWINGS",
  472. 'EWG7ZU': " #EUROWINGSPalmadeMallorcaDuesseldorf",
  473. 'EWG83G': " #EUROWINGSManchesterDuesseldorf",
  474. 'EWG83T': " #EUROWINGS",
  475. 'EWG84R': " #EUROWINGS",
  476. 'EWG8GP': " #EUROWINGS",
  477. 'EWG8HG': " #EUROWINGSDuesseldorfPalmadeMallorca",
  478. 'EWG8KW': " #EUROWINGSMarseilleDuesseldorf",
  479. 'EWG8WY': " #EUROWINGSNiceDuesseldorf",
  480. 'EWG9412': " #EUROWINGSDuesseldorfLyon",
  481. 'EWG9420': " #EUROWINGS",
  482. 'EWG9591': " #EUROWINGS",
  483. 'EWG9592': " #EUROWINGS",
  484. 'EWG9743': " #EUROWINGSGenevaDuesseldorf",
  485. 'EWG9823': " #EUROWINGS",
  486. 'EWG9869': " #EUROWINGS",
  487. 'EWG9KY': " #EUROWINGS",
  488. 'EWG9MP': " #EUROWINGSPalmadeMallorcaVienna",
  489. 'EWG9NW': " #EUROWINGSBarcelonaDuesseldorf",
  490. 'EWG9PC': " #EUROWINGSPalmadeMallorcaCologne",
  491. 'EWG9XE': " #EUROWINGSColognePalmadeMallorca",
  492. 'EXS17W': " #CHANNEXLondonPula",
  493. 'EXS75K': " #CHANNEXNewcastlePisa",
  494. 'EZS1041': " #EasyJetMulhouseAmsterdam",
  495. 'EZS1047': " #EasyJetMulhouseAmsterdam",
  496. 'EZS1352': " #EasyJet",
  497. 'EZS1537': " #EasyJetGenevaBrussels",
  498. 'EZS17LE': " #EasyJetGenevaCopenhagen",
  499. 'EZS17QL': " #EasyJetBrusselsGeneva",
  500. 'EZS27NE': " #EasyJetBrusselsGeneva",
  501. 'EZS38VL': " #EasyJetAmsterdamGeneva",
  502. 'EZS56FJ': " #EasyJetBrusselsGeneva",
  503. 'EZS61DJ': " #EasyJetGenevaAmsterdam",
  504. 'EZS64WZ': " #EasyJetEdinburghMulhouse",
  505. 'EZS72BA': " #EasyJetMulhouseBrussels",
  506. 'EZS76ZW': " #EasyJetGenevaCopenhagen",
  507. 'EZS83LA': " #EasyJetGenevaStockholm",
  508. 'EZS85LY': " #EasyJet",
  509. 'EZY12YJ': " #EasyJetGenevaHamburg",
  510. 'EZY1358': " #EasyJetAmsterdamGeneva",
  511. 'EZY13XF': " #EasyJetBrusselsNice",
  512. 'EZY147G': " #EasyJetNiceAmsterdam",
  513. 'EZY14YQ': " #EasyJetMilanoAmsterdam",
  514. 'EZY1538': " #EasyJetBrusselsGeneva",
  515. 'EZY15BX': " #EasyJetLondonRome",
  516. 'EZY15DJ': " #EasyJetLondonMilan",
  517. 'EZY17PB': " #EasyJetLondonCagliari",
  518. 'EZY19DU': " #EasyJetLondonZurich",
  519. 'EZY19MZ': " #EasyJetStuttgartLondon",
  520. 'EZY21MU': " #EasyJetPalmadeMallorcaHamburg",
  521. 'EZY23EZ': " #EasyJetLondonZurich",
  522. 'EZY23PR': " #EasyJetPaphosLondon",
  523. 'EZY24KP': " #EasyJetEdinburghLondon",
  524. 'EZY25TK': " #EasyJetMulhouseAmsterdam",
  525. 'EZY27TL': " #EasyJetHeraklionLondon",
  526. 'EZY29BZ': " #EasyJetAmsterdamMulhouse",
  527. 'EZY32CR': " #EasyJetAmsterdamLondon",
  528. 'EZY41ER': " #EasyJetLondonMulhouse",
  529. 'EZY41UB': " #EasyJet",
  530. 'EZY46BL': " #EasyJetStuttgartLondon",
  531. 'EZY49MP': " #EasyJetLondonMilano",
  532. 'EZY49PB': " #EasyJetRomeAmsterdam",
  533. 'EZY51CF': " #EasyJetRomeBristol",
  534. 'EZY53CN': " #EasyJetMilanoAmsterdam",
  535. 'EZY53GT': " #EasyJetLondonZurich",
  536. 'EZY56ZB': " #EasyJetNaplesBrussels",
  537. 'EZY58WZ': " #EasyJetAmsterdamLyon",
  538. 'EZY59DT': " #EasyJet",
  539. 'EZY59NJ': " #EasyJetSalzburgLiverpool",
  540. 'EZY61ET': " #EasyJet",
  541. 'EZY61FV': " #EasyJetPalmadeMallorcaBristol",
  542. 'EZY627F': " #EasyJetManchesterMilano",
  543. 'EZY63WJ': " #EasyJetCataniaAmsterdam",
  544. 'EZY67MB': " #EasyJetLondonZurich",
  545. 'EZY68ZV': " #EasyJetChaniaLondon",
  546. 'EZY71YG': " #EasyJetAlicanteLondon",
  547. 'EZY729L': " #EasyJetLondonPalermo",
  548. 'EZY72XM': " #EasyJetAmsterdamGeneva",
  549. 'EZY73QW': " #EasyJetEdinburghGeneva",
  550. 'EZY74PY': " #EasyJetAmsterdamNice",
  551. 'EZY75YB': " #EasyJetLondonMilan",
  552. 'EZY76ZA': " #EasyJet",
  553. 'EZY78UA': " #EasyJet",
  554. 'EZY79PB': " #EasyJetLarnacaLondon",
  555. 'EZY8369': " #EasyJetLondonPreveza",
  556. 'EZY86QV': " #EasyJetAmsterdamGeneva",
  557. 'EZY87RG': " #EasyJetNewcastleGeneva",
  558. 'EZY94MY': " #EasyJetMulhouseAmsterdam",
  559. 'EZY95KC': " #EasyJetBerlinLisbon",
  560. 'EZY95RE': " #EasyJetMilanAmsterdam",
  561. 'EZY96FN': " #EasyJetManchesterMulhouse",
  562. 'EZY96LR': " #EasyJetNaplesLondon",
  563. 'EZY97QA': " #EasyJetGenevaAmsterdam",
  564. 'EZY98MA': " #EasyJetLondonDalaman",
  565. 'EZY98YG': " #EasyJetKosLondon",
  566. 'FCIDD': " #Inconnu",
  567. 'FHGAC': " #Inconnu",
  568. 'FHGIO': " #Inconnu",
  569. 'FHJAV': " #Inconnu",
  570. 'FHLPN': " #Inconnu",
  571. 'FHRCA': " #Inconnu",
  572. 'FHTRY': " #Inconnu",
  573. 'FJBNG': " #Inconnu",
  574. 'FJSMX': " #Inconnu",
  575. 'FJUEV': " #Inconnu",
  576. 'FPO601C': " #Inconnu",
  577. 'FPO651C': " #Inconnu",
  578. 'FPO661C': " #Inconnu",
  579. 'FXR18G': " #Inconnu",
  580. 'FYG02F': " #Inconnu",
  581. 'FYG36K': " #Inconnu",
  582. 'GAC020B': " #GeneralAviationCenter",
  583. 'GAC069A': " #GeneralAviationCenter",
  584. 'GAC113A': " #GeneralAviationCenter",
  585. 'GAC174I': " #GeneralAviationCenter",
  586. 'GAC182A': " #GeneralAviationCenter",
  587. 'GAC193B': " #GeneralAviationCenter",
  588. 'GAC632A': " #GeneralAviationCenter",
  589. 'GAC818A': " #GeneralAviationCenter",
  590. 'GAC848A': " #GeneralAviationCenter",
  591. 'GAC917I': " #GeneralAviationCenter",
  592. 'GAF028': " #Inconnu",
  593. 'GAF689': " #Inconnu",
  594. 'GAFE12A': " #Inconnu",
  595. 'GAFE13': " #Inconnu",
  596. 'GAFE14A': " #Inconnu",
  597. 'GAFK31B': " #Inconnu",
  598. 'GBAGB': " #GULFBAHRAIN",
  599. 'GCERT': " #Inconnu",
  600. 'GCIRU': " #Inconnu",
  601. 'GCKAZ': " #Inconnu",
  602. 'GMI1031': " #GERMANIA",
  603. 'GMI1368': " #GERMANIA",
  604. 'GMI1369': " #GERMANIA",
  605. 'GMI1602': " #GERMANIADresdenFunchal",
  606. 'GMI1881': " #GERMANIAHamburgToulouse",
  607. 'GMI2797': " #GERMANIAMunichCologne",
  608. 'GMI2886': " #GERMANIAToulouseHamburg",
  609. 'GMI3872': " #GERMANIAMunsterPalmadeMallorca",
  610. 'GMI3873': " #GERMANIAPalmadeMallorcaMunster",
  611. 'GMI4570': " #GERMANIABremenPalmadeMallorca",
  612. 'GMI4571': " #GERMANIAPalmadeMallorcaBremen",
  613. 'GMI5729': " #GERMANIAPalmadeMallorcaMunster",
  614. 'GMI8625': " #GERMANIAPalmadeMallorcaBremen",
  615. 'GWI16K': " #GERMANWINGSHamburgPalmadeMallorca",
  616. 'GWI1KB': " #GERMANWINGS",
  617. 'GWI1WN': " #GERMANWINGSBarcelonaHamburg",
  618. 'GWI1XA': " #GERMANWINGS",
  619. 'GWI1XP': " #GERMANWINGSPalmadeMallorcaDortmund",
  620. 'GWI2AN': " #GERMANWINGSPalmadeMallorcaHamburg",
  621. 'GWI2JV': " #GERMANWINGSGenevaHamburg",
  622. 'GWI2V': " #GERMANWINGSHamburgHeraklion",
  623. 'GWI34U': " #GERMANWINGSCataniaDuesseldorf",
  624. 'GWI383': " #GERMANWINGSTunisCologne",
  625. 'GWI47L': " #GERMANWINGSPalmadeMallorcaDortmund",
  626. 'GWI4CW': " #GERMANWINGS",
  627. 'GWI53Z': " #GERMANWINGSIbizaCologne",
  628. 'GWI5440': " #GERMANWINGS",
  629. 'GWI5441': " #GERMANWINGS",
  630. 'GWI5605': " #GERMANWINGS",
  631. 'GWI589': " #GERMANWINGSPalmadeMallorcaCologne",
  632. 'GWI595': " #GERMANWINGSPalmadeMallorcaCologne",
  633. 'GWI7J': " #GERMANWINGSNiceCologne",
  634. 'GWI7LZ': " #GERMANWINGSGenevaDuesseldorf",
  635. 'GWI7YK': " #GERMANWINGSBarcelonaHannover",
  636. 'GWI84R': " #GERMANWINGS",
  637. 'GWI8KW': " #GERMANWINGSMarseilleDuesseldorf",
  638. 'GWI8MB': " #GERMANWINGS",
  639. 'GWI8PM': " #GERMANWINGS",
  640. 'GWI8WY': " #GERMANWINGSNiceDuesseldorf",
  641. 'GWI9743': " #GERMANWINGS",
  642. 'GWI9BC': " #GERMANWINGSIbizaHannover",
  643. 'HAKAR': " #Inconnu",
  644. 'HBIGV': " #Inconnu",
  645. 'HBJGQ': " #Inconnu",
  646. 'HBLUT': " #Inconnu",
  647. 'HBVPO': " #Inconnu",
  648. 'HBVYS': " #Inconnu",
  649. 'HBYKG': " #Inconnu",
  650. 'HHN101': " #Inconnu",
  651. 'HKY301': " #Inconnu",
  652. 'HOP30QB': " #HOPAirfrance",
  653. 'HOP316M': " #HOPAirfranceLyonMetz",
  654. 'HOP31LN': " #HOPAirfranceStrasbourgLille",
  655. 'HOP36QB': " #HOPAirfrance",
  656. 'HOP37LN': " #HOPAirfrance",
  657. 'HOP4306': " #HOPAirfranceLyonGothenborg",
  658. 'HOP4311': " #HOPAirfranceBrusselsLyon",
  659. 'HOP4313': " #HOPAirfranceBrusselsLyon",
  660. 'HOP431T': " #HOPAirfranceBrusselsLyon",
  661. 'HOP8201': " #HOPAirfranceParisCologne",
  662. 'IAM1496': " #ItalianAirforce",
  663. 'IAM3120': " #ItalianAirforce",
  664. 'IAM3126': " #ItalianAirforce",
  665. 'IAM3128': " #ItalianAirforce",
  666. 'IAM9002': " #ItalianAirforce",
  667. 'IBE32AW': " #IBERIA",
  668. 'IBE32CM': " #IBERIA",
  669. 'IBK2525': " #NORTRANSKeffalliniaLondon",
  670. 'IBK5404': " #NORTRANSMadridLondon",
  671. 'IBK5602': " #NORTRANSHelsinkiOulu",
  672. 'IBK5952': " #NORTRANS",
  673. 'IBK5EG': " #NORTRANSMadridOslo",
  674. 'IBK6508': " #NORTRANS",
  675. 'IBK6514': " #NORTRANS",
  676. 'IBK6696': " #NORTRANS",
  677. 'IBK9457': " #NORTRANSKeffalliniaLondon",
  678. 'ICV007': " #Inconnu",
  679. 'IGA751': " #Inconnu",
  680. 'IJM005': " #Inconnu",
  681. 'IJM329': " #Inconnu",
  682. 'ISS3520': " #MERAIRMilanoLaRomana",
  683. 'JAF13X': " #BEAUTYAjaccioBrussels",
  684. 'JAF16K': " #BEAUTY",
  685. 'JAF19X': " #BEAUTY",
  686. 'JAF1KP': " #BEAUTYPalermoBrussels",
  687. 'JAF1LG': " #BEAUTYParisOujda",
  688. 'JAF29W': " #BEAUTY",
  689. 'JAF38Y': " #BEAUTY",
  690. 'JAF3JT': " #BEAUTY",
  691. 'JAF3YE': " #BEAUTY",
  692. 'JAF41P': " #BEAUTY",
  693. 'JAF42M': " #BEAUTY",
  694. 'JAF43B': " #BEAUTY",
  695. 'JAF4AV': " #BEAUTY",
  696. 'JAF4GE': " #BEAUTY",
  697. 'JAF5401': " #BEAUTY",
  698. 'JAF5402': " #BEAUTY",
  699. 'JAF57M': " #BEAUTY",
  700. 'JAF58G': " #BEAUTYOstendTenerife",
  701. 'JAF5BV': " #BEAUTY",
  702. 'JAF5KD': " #BEAUTYKosOstend",
  703. 'JAF60G': " #BEAUTY",
  704. 'JAF68D': " #BEAUTYPalmadeMallorcaLiege",
  705. 'JAF6991': " #BEAUTY",
  706. 'JAF6DE': " #BEAUTYAntwerpIbiza",
  707. 'JAF6MT': " #BEAUTY",
  708. 'JAF6YP': " #BEAUTY",
  709. 'JAF7PH': " #BEAUTY",
  710. 'JAF80X': " #BEAUTY",
  711. 'JAF8LV': " #BEAUTYAlicanteCharleroi",
  712. 'JDI30C': " #Inconnu",
  713. 'JFA08A': " #Inconnu",
  714. 'JKH322': " #Inconnu",
  715. 'JSY210C': " #Inconnu",
  716. 'JTG570': " #Inconnu",
  717. 'JTR1': " #Inconnu",
  718. 'KLM1039': " #KLM",
  719. 'KLM1260': " #KLMNiceAmsterdam",
  720. 'KLM1413': " #KLMAmsterdamLyon",
  721. 'KLM1415': " #KLMAmsterdamLyon",
  722. 'KLM1417': " #KLMAmsterdamLyon",
  723. 'KLM1523': " #KLMAmsterdamManston",
  724. 'KLM1555': " #KLMAmsterdamTorino",
  725. 'KLM1556': " #KLMTorinoAmsterdam",
  726. 'KLM1566': " #KLMGenoaAmsterdam",
  727. 'KLM1598': " #KLMRomeAmsterdam",
  728. 'KLM1602': " #KLMRomeAmsterdam",
  729. 'KLM1620': " #KLMMilanAmsterdam",
  730. 'KLM1628': " #KLMMilanoAmsterdam",
  731. 'KLM1630': " #KLMMilanoAmsterdam",
  732. 'KLM1632': " #KLMMilanoAmsterdam",
  733. 'KLM1634': " #KLMMilanoAmsterdam",
  734. 'KLM1638': " #KLMFlorenceAmsterdam",
  735. 'KLM1640': " #KLMFlorenceAmsterdam",
  736. 'KLM1642': " #KLMFlorenceAmsterdam",
  737. 'KLM1964': " #KLMZurichAmsterdam",
  738. 'KLM1986': " #KLMMulhouseAmsterdam",
  739. 'KLM1988': " #KLMMulhouseAmsterdam",
  740. 'KLM1989': " #KLMAmsterdamMulhouse",
  741. 'KLM1990': " #KLMMulhouseAmsterdam",
  742. 'KLM22V': " #KLMNiceAmsterdam",
  743. 'KLM37A': " #KLMAmsterdamLyon",
  744. 'KLM393': " #KLMAmsterdamCapeTown",
  745. 'KLM394': " #KLMCapeTownAmsterdam",
  746. 'KLM41M': " #KLMAmsterdamNice",
  747. 'KLM41T': " #KLMAmsterdamNice",
  748. 'KLM42N': " #KLMNiceAmsterdam",
  749. 'KLM48B': " #KLMZurichAmsterdam",
  750. 'KLM48Y': " #KLMGenovaAmsterdam"
  751. 'KLM50G': " #KLMZurichAmsterdam",
  752. 'KLM50L': " #KLMZurichAmsterdam",
  753. 'KLM50V': " #KLMGenevaAmsterdam",
  754. 'KLM51Y': " #KLMAmsterdamGeneva",
  755. 'KLM54J': " #KLMGenevaAmsterdam",
  756. 'KLM56L': " #KLMZurichAmsterdam",
  757. 'KLM575': " #KLMAmsterdamAbidjan",
  758. 'KLM57W': " #KLMAmsterdamGeneva",
  759. 'KLM589': " #KLMAmsterdamAccra",
  760. 'KLM58C': " #KLMZurichAmsterdam",
  761. 'KLM591': " #KLMAmsterdamJohannesburg",
  762. 'KLM592': " #KLMJohannesburgAmsterdam",
  763. 'KLM68Z': " #KLMRomeAmsterdam",
  764. 'KLM72R': " #KLMTorinoAmsterdam",
  765. 'KLM84A': " #KLMRomeAmsterdam",
  766. 'KLM84X': " #KLMMulhouseAmsterdam",
  767. 'KLM89F': " #KLMAmsterdamMulhouse",
  768. 'KLM91H': " #KLMAmsterdamNice",
  769. 'KLM98M': " #KLMFlorenceAmsterdam",
  770. 'KLM98N': " #KLMFlorenceAmsterdam",
  771. 'KLM98R': " #KLMFlorenceAmsterdam",
  772. 'KQA101': " #KENYALondonNairobi",
  773. 'LAV5318': " #AlbaStar",
  774. 'LBT2022': " #NOUVELAIRLondonDjerba",
  775. 'LBT214': " #NOUVELAIR",
  776. 'LBT2640': " #NOUVELAIRDjerbaDuesseldorf",
  777. 'LGL206': " #LUXAIRDjerbaLuxemburg",
  778. 'LGL3838': " #LUXAIRMadridLuxemburg",
  779. 'LGL608': " #LUXAIRPalmadeMallorcaLuxemburg",
  780. 'LGL62P': " #LUXAIRPalmadeMallorcaLuxemburg",
  781. 'LGL64L': " #LUXAIR",
  782. 'LGL65R': " #LUXAIR",
  783. 'LGL6996': " #LUXAIRMilanoLuxemburg",
  784. 'LGL807': " #LUXAIR",
  785. 'LGL8256': " #LUXAIRNiceLuxemburg",
  786. 'LGL8364': " #LUXAIRGenevaLuxemburg",
  787. 'LGL8368': " #LUXAIRGenevaLuxemburg",
  788. 'LGL885': " #LUXAIRLuxemburgHeraklion",
  789. 'LHB1': " #Inconnu",
  790. 'LLX5922': " #SmallPlanetAirlinesGermany",
  791. 'LLX5932': " #SmallPlanetAirlinesGermany",
  792. 'LLX5941': " #SmallPlanetAirlinesGermany",
  793. 'LLX5942': " #SmallPlanetAirlinesGermany",
  794. 'LLX5944': " #SmallPlanetAirlinesGermanyPalmadeMallorcaBerlin",
  795. 'LLX5952': " #SmallPlanetAirlinesGermany",
  796. 'LLX5954': " #SmallPlanetAirlinesGermany",
  797. 'LLX5961': " #SmallPlanetAirlinesGermany",
  798. 'LLX5962': " #SmallPlanetAirlinesGermanyPalmadeMallorcaPaderborn",
  799. 'LLX5972': " #SmallPlanetAirlinesGermany",
  800. 'LLX5976': " #SmallPlanetAirlinesGermany",
  801. 'LLZ5931': " #SmallPlanetAirlinesGermany",
  802. 'LMJ026R': " #Inconnu",
  803. 'LNX10RL': " #Inconnu",
  804. 'location': " #LOCAIR",
  805. 'LXA5E': " #Inconnu",
  806. 'LXAIE': " #Inconnu",
  807. 'LXDIN': " #Inconnu",
  808. 'LXG33S': " #Inconnu",
  809. 'LXG44W': " #Inconnu",
  810. 'LXG55GA': " #Inconnu",
  811. 'LXG55JE': " #Inconnu",
  812. 'LXGCA': " #Inconnu",
  813. 'LXJFR': " #Inconnu",
  814. 'LXMIK': " #Inconnu",
  815. 'MABGV': " #Inconnu",
  816. 'MABJA': " #Inconnu",
  817. 'MAC223': " #MALTACHARTERElArouiParis",
  818. 'MAMAN': " #Inconnu",
  819. 'MBHBH': " #Inconnu",
  820. 'MCRAO': " #Inconnu",
  821. 'MIPHS': " #Inconnu",
  822. 'MJF279': " #Inconnu",
  823. 'MLEYS': " #Inconnu",
  824. 'MMD6377': " #Inconnu",
  825. 'MMD6421': " #Inconnu",
  826. 'MNTOS': " #Inconnu",
  827. 'MON207': " #MONARCHAntalyaLondon",
  828. 'MON715': " #MONARCHLarnacaLondon",
  829. 'MORAD': " #Inconnu",
  830. 'MPH8321': " #MARTINAIRAmsterdamJohannesburg",
  831. 'MPH8341': " #MARTINAIRAmsterdamJohannesburg",
  832. 'MPH8371': " #MARTINAIRAmsterdamJohannesburg",
  833. 'MPH8561': " #MARTINAIRAmsterdamJohannesburg",
  834. 'MPRVT': " #Inconnu",
  835. 'MTL108B': " #Inconnu",
  836. 'MWIND': " #MWI",
  837. 'MYSIX': " #Inconnu",
  838. 'N101FK': " #Inconnu",
  839. 'N101FU': " #Inconnu",
  840. 'N169TA': " #Inconnu",
  841. 'N194ER': " #Inconnu",
  842. 'N202QS': " #Inconnu",
  843. 'N209PB': " #Inconnu",
  844. 'N273SW': " #Inconnu",
  845. 'N344RS': " #Inconnu",
  846. 'N38945': " #Inconnu",
  847. 'N450D': " #Inconnu",
  848. 'N50SQ': " #Inconnu",
  849. 'N53M': " #Inconnu",
  850. 'N550F': " #Inconnu",
  851. 'N577EA': " #Inconnu",
  852. 'N588LQ': " #Inconnu",
  853. 'N604GF': " #Inconnu",
  854. 'N755RA': " #Inconnu",
  855. 'N770BB': " #AllSpain",
  856. 'N821CC': " #Inconnu",
  857. 'N829TD': " #Inconnu",
  858. 'N900HG': " #Inconnu",
  859. 'NATO40': " #Inconnu",
  860. 'NAX1409': " #NORSHUTTLENiceOslo",
  861. 'NAX3LB': " #NORSHUTTLEGenevaOslo",
  862. 'NAX47E': " #NORSHUTTLENiceStockholm",
  863. 'NAX9463': " #NORSHUTTLEPalmadeMallorcaTrondheim",
  864. 'NAX94BP': " #NORSHUTTLEOsloAlicante",
  865. 'NJE036B': " #NetJets",
  866. 'NJE070D': " #NetJets",
  867. 'NJE097L': " #NetJets",
  868. 'NJE140C': " #NetJets",
  869. 'NJE323U': " #NetJets",
  870. 'NJE328D': " #NetJets",
  871. 'NJE342E': " #NetJets",
  872. 'NJE345F': " #NetJets",
  873. 'NJE348R': " #NetJets",
  874. 'NJE386E': " #NetJets",
  875. 'NJE3HF': " #NetJets",
  876. 'NJE3NX': " #NetJets",
  877. 'NJE405W': " #NetJets",
  878. 'NJE433G': " #NetJets",
  879. 'NJE512G': " #NetJets",
  880. 'NJE578G': " #NetJets",
  881. 'NJE622G': " #NetJets",
  882. 'NJE668L': " #NetJets",
  883. 'NJE676E': " #NetJets",
  884. 'NJE6KY': " #NetJets",
  885. 'NJE7JD': " #NetJets",
  886. 'NJE837C': " #NetJets",
  887. 'NLY115P': " #FLYNIKI",
  888. 'NLY1K': " #FLYNIKIColognePalmadeMallorca",
  889. 'NLY1NQ': " #FLYNIKIDuesseldorfIbiza",
  890. 'NLY1VD': " #FLYNIKIPalmadeMallorcaCologne",
  891. 'NLY2149': " #FLYNIKIIbizaCologne",
  892. 'NLY2279': " #FLYNIKIPalmadeMallorcaCologne",
  893. 'NLY2477': " #FLYNIKIPalmadeMallorcaCologne",
  894. 'NLY25SJ': " #FLYNIKIPalmadeMallorcaHamburg",
  895. 'NLY26DU': " #FLYNIKIDuesseldorfPalmadeMallorca",
  896. 'NLY3029': " #FLYNIKI",
  897. 'NLY3046': " #FLYNIKI",
  898. 'NLY3047': " #FLYNIKI",
  899. 'NLY3056': " #FLYNIKI",
  900. 'NLY3080': " #FLYNIKIDuesseldorfPalmadeMallorca",
  901. 'NLY30KV': " #FLYNIKIHamburgIbiza",
  902. 'NLY3286': " #FLYNIKIDuesseldorfPalmadeMallorca",
  903. 'NLY3287': " #FLYNIKI",
  904. 'NLY3360': " #FLYNIKIDuesseldorfIbiza",
  905. 'NLY3361': " #FLYNIKIIbizaDuesseldorf",
  906. 'NLY3575': " #FLYNIKIPalmadeMallorcaDuesseldorf",
  907. 'NLY36SU': " #FLYNIKI",
  908. 'NLY39ME': " #FLYNIKIPalmadeMallorcaDuesseldorf",
  909. 'NLY3EK': " #FLYNIKIRomeVienna",
  910. 'NLY3JC': " #FLYNIKIPalmadeMallorcaCologne",
  911. 'NLY3QR': " #FLYNIKIDuesseldorfPalmadeMallorca",
  912. 'NLY414H': " #FLYNIKIIbizaHamburg",
  913. 'NLY44DM': " #FLYNIKIAlicanteDuesseldorf",
  914. 'NLY45DR': " #FLYNIKI",
  915. 'NLY46EA': " #FLYNIKI",
  916. 'NLY51NV': " #FLYNIKIPalmadeMallorcaPaderborn",
  917. 'NLY5YN': " #FLYNIKIPalmadeMallorcaDuesseldorf",
  918. 'NLY62WK': " #FLYNIKIColognePalmadeMallorca",
  919. 'NLY636Z': " #FLYNIKIPalmadeMallorcaCologne",
  920. 'NLY6A': " #FLYNIKIPalmadeMallorcaDuesseldorf",
  921. 'NLY6WD': " #FLYNIKIPalmadeMallorcaDuesseldorf",
  922. 'NLY7515': " #FLYNIKI",
  923. 'NLY75CZ': " #FLYNIKI",
  924. 'NLY7611': " #FLYNIKIPalmadeMallorcaCologne",
  925. 'NLY7623': " #FLYNIKI",
  926. 'NLY7641': " #FLYNIKIPalmadeMallorcaPaderborn",
  927. 'NLY7783': " #FLYNIKIPalmadeMallorcaMunster",
  928. 'NLY788D': " #FLYNIKIPalmadeMallorcaDuesseldorf",
  929. 'NLY791W': " #FLYNIKIPalmadeMallorcaFrankfurt",
  930. 'NLY7HN': " #FLYNIKIPalmadeMallorcaHamburg",
  931. 'NLY7W': " #FLYNIKIDuesseldorfPalmadeMallorca",
  932. 'NLY82G': " #FLYNIKIBilbaoPalmadeMallorca",
  933. 'NLY879R': " #FLYNIKIPalmadeMallorcaHamburg",
  934. 'NLY89J': " #FLYNIKIPalmadeMallorcaCologne",
  935. 'NLY8HE': " #FLYNIKIDuesseldorfPalmadeMallorca",
  936. 'NLY915P': " #FLYNIKI",
  937. 'NLY9ZR': " #FLYNIKIPalmadeMallorcaMunster",
  938. 'NPT770P': " #Inconnu",
  939. 'OAV304': " #Inconnu",
  940. 'OEFLG': " #Inconnu",
  941. 'OEGES': " #Inconnu",
  942. 'OEGGG': " #Inconnu",
  943. 'OMBJB': " #Inconnu",
  944. 'OOACC': " #Inconnu",
  945. 'OOAMR': " #Inconnu",
  946. 'OOCEH': " #Inconnu",
  947. 'OOCEJ': " #Inconnu",
  948. 'OOIDE': " #Inconnu",
  949. 'OOKDA': " #Inconnu",
  950. 'OONEY': " #Inconnu",
  951. 'OONLT': " #Inconnu",
  952. 'OOPCJ': " #Inconnu",
  953. 'OOPKX': " #Inconnu",
  954. 'OYAPM': " #Inconnu",
  955. 'OYGSA': " #Inconnu",
  956. 'PHDIX': " #Inconnu",
  957. 'PHFJK': " #Inconnu",
  958. 'PHHGT': " #Inconnu",
  959. 'PHJFS': " #Inconnu",
  960. 'PHMDG': " #Inconnu",
  961. 'PHRLG': " #Inconnu",
  962. 'PHTXA': " #Inconnu",
  963. 'piper': " #Inconnu",
  964. 'PJS701': " #Inconnu",
  965. 'PJS702': " #Inconnu",
  966. 'PRI414': " #Inconnu",
  967. 'PRI476': " #InconnuPalmadeMallorcaBillund",
  968. 'PRI480': " #InconnuNiceBillund",
  969. 'PRI482': " #InconnuChaniaBillund",
  970. 'PRI492': " #Inconnu",
  971. 'PRW366': " #InconnuPalmadeMallorcaGothenborg",
  972. 'PRW778': " #InconnuPalmadeMallorcaStockholm",
  973. 'QAJ811': " #Inconnu",
  974. 'QGA121G': " #Inconnu",
  975. 'QGA607G': " #Inconnu",
  976. 'QTR8286': " #QATARIMulhouseDoha",
  977. 'QTR8750': " #QATARIEntebbeBrussels",
  978. 'QTR8781': " #QATARIAccraLondon",
  979. 'RAM352': " #ROYALAIRMAROCCasablancaBrussels",
  980. 'RAM356': " #ROYALAIRMAROC",
  981. 'RAM810D': " #ROYALAIRMAROCBerlinCasablanca",
  982. 'RKS2': " #Inconnu",
  983. 'RYR116X': " #RYANAIRGeronaMaastricht",
  984. 'RYR12Y': " #RYANAIRBeauvaisMalaga",
  985. 'RYR13DV': " #RYANAIRValenciaCologne",
  986. 'RYR17UH': " #RYANAIRLondonRome",
  987. 'RYR187P': " #RYANAIR",
  988. 'RYR18ZB': " #RYANAIR",
  989. 'RYR1AM': " #RYANAIRBerlinManchester",
  990. 'RYR1JG': " #RYANAIRCologneBarcelona",
  991. 'RYR1YH': " #RYANAIRMilanoLondon",
  992. 'RYR20HJ': " #RYANAIR",
  993. 'RYR20VP': " #RYANAIRLondonPerugia",
  994. 'RYR22KP': " #RYANAIR",
  995. 'RYR242W': " #RYANAIR",
  996. 'RYR25KD': " #RYANAIRBolognaWeeze",
  997. 'RYR25XF': " #RYANAIRFaroBristol",
  998. 'RYR2963': " #RYANAIRBrusselsMilano",
  999. 'RYR2976': " #RYANAIRRyggeBologna",
  1000. 'RYR2BE': " #RYANAIRMalagaBirmingham",
  1001. 'RYR2CB': " #RYANAIR",
  1002. 'RYR2LF': " #RYANAIR",
  1003. 'RYR2SK': " #RYANAIRRomeEindhoven",
  1004. 'RYR307G': " #RYANAIRRomeLondon",
  1005. 'RYR3343': " #RYANAIRMontpellierHahn",
  1006. 'RYR33D': " #RYANAIR",
  1007. 'RYR353F': " #RYANAIR",
  1008. 'RYR3746': " #RYANAIRPisaCharleroi",
  1009. 'RYR3748': " #RYANAIRPisaCharleroi",
  1010. 'RYR37ER': " #RYANAIRLondonRome",
  1011. 'RYR37FB': " #RYANAIRRomeLondon",
  1012. 'RYR38FE': " #RYANAIRLameziaBologna",
  1013. 'RYR3KV': " #RYANAIRMaltaEindhoven",
  1014. 'RYR3MW': " #RYANAIRGeronaBremen",
  1015. 'RYR3NK': " #RYANAIR",
  1016. 'RYR3QX': " #RYANAIRWeezePalmadeMallorca",
  1017. 'RYR3VG': " #RYANAIRPisaEindhoven",
  1018. 'RYR40WM': " #RYANAIRTrapaniEindhoven",
  1019. 'RYR413A': " #RYANAIRMilanoBrussels",
  1020. 'RYR41BQ': " #RYANAIRLondonBergamo",
  1021. 'RYR41NJ': " #RYANAIRLondonPalermo",
  1022. 'RYR41SE': " #RYANAIR",
  1023. 'RYR41XK': " #RYANAIRCharleroiManchester",
  1024. 'RYR427E': " #RYANAIRBristolPoznan",
  1025. 'RYR42JZ': " #RYANAIRPalmadeMallorcaDortmund",
  1026. 'RYR4522': " #RYANAIRCharleroiBergamo",
  1027. 'RYR45KW': " #RYANAIROujdaWeeze",
  1028. 'RYR46LG': " #RYANAIRLondonLamezia",
  1029. 'RYR47QB': " #RYANAIRCagliariWeeze",
  1030. 'RYR4865': " #RYANAIRTorinoCharleroi",
  1031. 'RYR4868': " #RYANAIR",
  1032. 'RYR4922': " #RYANAIRHahnIbiza",
  1033. 'RYR49GN': " #RYANAIRMulhouseLondon",
  1034. 'RYR4FD': " #RYANAIRBremenPalmadeMallorca",
  1035. 'RYR4KW': " #RYANAIR",
  1036. 'RYR4VM': " #RYANAIRBudapestLondon",
  1037. 'RYR4WA': " #RYANAIR",
  1038. 'RYR50JK': " #RYANAIRKarlsruhe/Baden-BadenLondon",
  1039. 'RYR50NC': " #RYANAIRAlicanteWeeze",
  1040. 'RYR52CK': " #RYANAIR",
  1041. 'RYR53BY': " #RYANAIRPalermoDublin",
  1042. 'RYR575F': " #RYANAIRRomeBrussels",
  1043. 'RYR596W': " #RYANAIRLondonGranCanaria",
  1044. 'RYR59DB': " #RYANAIRWarsawBristol",
  1045. 'RYR5PW': " #RYANAIREindhovenMalta",
  1046. 'RYR5SK': " #RYANAIR",
  1047. 'RYR5TE': " #RYANAIRGeronaKrakow",
  1048. 'RYR5UB': " #RYANAIRCorkVilnius",
  1049. 'RYR5XV': " #RYANAIRBristolAlicante",
  1050. 'RYR5YB': " #RYANAIRLondonBologna",
  1051. 'RYR5ZT': " #RYANAIRLondonVillafranca",
  1052. 'RYR6105': " #RYANAIRCharleroiRome",
  1053. 'RYR6408': " #RYANAIRBeziersWeeze",
  1054. 'RYR64FF': " #RYANAIRLondonBergamo",
  1055. 'RYR64JF': " #RYANAIRLondonPisa",
  1056. 'RYR64TA': " #RYANAIRMalagaDublin",
  1057. 'RYR65CZ': " #RYANAIRLondonMalta",
  1058. 'RYR671Z': " #RYANAIRAlicanteFrankfurt",
  1059. 'RYR6AK': " #RYANAIREdinburghFaro",
  1060. 'RYR6DB': " #RYANAIRMarseilleEindhoven",
  1061. 'RYR6LN': " #RYANAIRBerlinPalermo",
  1062. 'RYR6PA': " #RYANAIRGeronaWeeze",
  1063. 'RYR6TV': " #RYANAIRLameziaLondon",
  1064. 'RYR6XB': " #RYANAIRShannonLondon",
  1065. 'RYR71DU': " #RYANAIRPalmadeMallorcaHamburg",
  1066. 'RYR7211': " #RYANAIRPalmadeMallorcaCologne",
  1067. 'RYR722R': " #RYANAIR",
  1068. 'RYR72A': " #RYANAIRBordeauxEdinburgh",
  1069. 'RYR74RE': " #RYANAIRMaltaBrussels",
  1070. 'RYR74ZA': " #RYANAIRLondonTreviso",
  1071. 'RYR76TF': " #RYANAIR",
  1072. 'RYR77TY': " #RYANAIRLondonMulhouse",
  1073. 'RYR78CN': " #RYANAIRWeezeIbiza",
  1074. 'RYR7AX': " #RYANAIR",
  1075. 'RYR7HE': " #RYANAIRLondonGenoa",
  1076. 'RYR7JV': " #RYANAIRBergamoBeauvais",
  1077. 'RYR7LQ': " #RYANAIRRzeszowManchester",
  1078. 'RYR7TH': " #RYANAIRAlgheroBergamo",
  1079. 'RYR7UG': " #RYANAIRArrecifeLeeds",
  1080. 'RYR7YR': " #RYANAIRPoznanDublin",
  1081. 'RYR7ZX': " #RYANAIRLondonRome",
  1082. 'RYR825K': " #RYANAIR",
  1083. 'RYR828G': " #RYANAIR",
  1084. 'RYR84LW': " #RYANAIRLondonPisa",
  1085. 'RYR863Y': " #RYANAIRManchesterBarcelona",
  1086. 'RYR8737': " #RYANAIRMilanoLondon",
  1087. 'RYR885M': " #RYANAIRAlgheroEindhoven",
  1088. 'RYR8KE': " #RYANAIRRabatRome",
  1089. 'RYR8PF': " #RYANAIRPalmadeMallorcaHamburg",
  1090. 'RYR8XC': " #RYANAIRDublinSalzburg",
  1091. 'RYR9232': " #RYANAIREindhovenAlghero",
  1092. 'RYR93ZM': " #RYANAIRBolognaKrakow",
  1093. 'RYR95FH': " #RYANAIRPalmadeMallorcaFrankfurt",
  1094. 'RYR95XH': " #RYANAIRPalmadeMallorcaEindhoven",
  1095. 'RYR98P': " #RYANAIRAlicanteMaastricht",
  1096. 'RYR98UE': " #RYANAIRValenciaHamburg",
  1097. 'RYR9925': " #RYANAIRPisaEindhoven",
  1098. 'RYR995E': " #RYANAIRComisoWeeze",
  1099. 'RYR9AD': " #RYANAIRMalagaWeeze",
  1100. 'RYR9EP': " #RYANAIRGenoaLondon",
  1101. 'RYR9JL': " #RYANAIRIbizaEindhoven",
  1102. 'RYR9NQ': " #RYANAIRNaplesEindhoven",
  1103. 'RYR9NZ': " #RYANAIRLondonPisa",
  1104. 'RYR9UM': " #RYANAIRKrakowShannon",
  1105. 'RYR9XH': " #RYANAIRPalmadeMallorcaHahn",
  1106. 'SAS1610': " #SCANDINAVIANGenevaCopenhagen",
  1107. 'SAS1830': " #SCANDINAVIANNiceStockholm",
  1108. 'SAS1886': " #SCANDINAVIANNiceGothenborg",
  1109. 'SAS2588': " #SCANDINAVIANPalmadeMallorcaCopenhagen",
  1110. 'SAS2616': " #SCANDINAVIANGenevaStockholm",
  1111. 'SAS28K': " #SCANDINAVIANGenevaCopenhagen",
  1112. 'SAS4692': " #SCANDINAVIANPalmadeMallorcaOslo",
  1113. 'SAS4700': " #SCANDINAVIANNiceOslo",
  1114. 'SAS4704': " #SCANDINAVIANNiceOslo",
  1115. 'SAS4706': " #SCANDINAVIANNiceOslo",
  1116. 'SAS4736': " #SCANDINAVIANNiceStavanger",
  1117. 'SAS52L': " #SCANDINAVIANPalmadeMallorcaCopenhagen",
  1118. 'SAS7368': " #SCANDINAVIANRiminiBergen",
  1119. 'SAS7710': " #SCANDINAVIANMonastirCopenhagen",
  1120. 'SAS80D': " #SCANDINAVIANNiceStockholm",
  1121. 'SAS86L': " #SCANDINAVIAN",
  1122. 'SAZ71': " #InconnuZurichPalmadeMallorca",
  1123. 'SCR378': " #Inconnu",
  1124. 'SNM922': " #Inconnu",
  1125. 'SPG145': " #Inconnu",
  1126. 'SPG378': " #Inconnu",
  1127. 'SRK30E': " #InconnuBernAmsterdam",
  1128. 'SRK4CE': " #InconnuBernCologne",
  1129. 'SRK53L': " #Inconnu",
  1130. 'SRR6373': " #InconnuToulouseLyon",
  1131. 'SRR6381': " #InconnuBordeauxMarseille",
  1132. 'STC877A': " #Inconnu",
  1133. 'STC949A': " #Inconnu",
  1134. 'STQ33B': " #Inconnu",
  1135. 'SUA743': " #Inconnu",
  1136. 'SVA106': " #SAUDIALondonRiyadh",
  1137. 'SVA116': " #SAUDIALondonJeddah",
  1138. 'SVA118': " #SAUDIALondonRiyadh",
  1139. 'SVB420': " #Inconnu",
  1140. 'SWR101A': " #SWISSZurichDuesseldorf",
  1141. 'SWR107C': " #SWISSZurichDuesseldorf",
  1142. 'SWR108L': " #SWISSZurichDuesseldorf",
  1143. 'SWR30K': " #SWISSLondonZurich",
  1144. 'SWR325': " #SWISSLondonZurich",
  1145. 'SWR327': " #SWISSLondonZurich",
  1146. 'SWR32V': " #SWISSLondonZurich",
  1147. 'SWR339': " #SWISSLondonZurich",
  1148. 'SWR33J': " #SWISSZurichLondon",
  1149. 'SWR345': " #SWISSLondonZurich",
  1150. 'SWR381': " #SWISSManchesterZurich",
  1151. 'SWR40C': " #SWISSLondonZurich",
  1152. 'SWR425': " #SWISSBirminghamZurich",
  1153. 'SWR43K': " #SWISSLondonZurich",
  1154. 'SWR46J': " #SWISSLondonGeneva",
  1155. 'SWR47A': " #SWISSLondonZurich",
  1156. 'SWR47F': " #SWISSLondonZurich",
  1157. 'SWR5211': " #SWISS",
  1158. 'SWR71P': " #SWISS",
  1159. 'SWR724': " #SWISSZurichAmsterdam",
  1160. 'SWR734': " #SWISSZurichAmsterdam",
  1161. 'SWR736': " #SWISSZurichAmsterdam",
  1162. 'SWR73G': " #SWISSZurichAmsterdam",
  1163. 'SWR755': " #SWISSLuxemburgZurich",
  1164. 'SWR76T': " #SWISSZurichBrussels",
  1165. 'SWR770': " #SWISSZurichBrussels",
  1166. 'SWR77P': " #SWISSBrusselsZurich",
  1167. 'SWR786': " #SWISSZurichBrussels",
  1168. 'SWR787': " #SWISSBrusselsZurich",
  1169. 'SWR789': " #SWISSBrusselsZurich",
  1170. 'SWR78W': " #SWISSBrusselsZurich",
  1171. 'SWR79N': " #SWISSZurichBrussels",
  1172. 'SWR79R': " #SWISSZurichBrussels",
  1173. 'SWR7M': " #SWISS",
  1174. 'SXD4598': " #Inconnu",
  1175. 'SXD7ZF': " #Inconnu",
  1176. 'T7PBL': " #Inconnu",
  1177. 'TAR526': " #TUNAIRTunisDuesseldorf",
  1178. 'TAR538': " #TUNAIRDjerbaDuesseldorf",
  1179. 'TAR539': " #TUNAIRDuesseldorfDjerba",
  1180. 'TAR540': " #TUNAIRDjerbaMonastir",
  1181. 'TAR668': " #TUNAIRMonastirBrussels",
  1182. 'TAR669': " #TUNAIR",
  1183. 'TAR788': " #TUNAIRTunisBrussels",
  1184. 'TAR789': " #TUNAIRBrusselsTunis",
  1185. 'TAR8304': " #TUNAIRMonastirZurich",
  1186. 'TAR880': " #TUNAIRTunisAmsterdam",
  1187. 'TAY035R': " #Inconnu",
  1188. 'TAY057Y': " #Inconnu",
  1189. 'TAY072L': " #Inconnu",
  1190. 'TAY078W': " #Inconnu",
  1191. 'TAY135R': " #Inconnu",
  1192. 'TAY217V': " #InconnuZaragozaBarcelona",
  1193. 'TAY515M': " #Inconnu",
  1194. 'TAY616B': " #Inconnu",
  1195. 'TAY857': " #InconnuMaltaLiege",
  1196. 'TCW1DC': " #THOMASCOOKKosBrussels",
  1197. 'TCW1PW': " #THOMASCOOK",
  1198. 'TCW1TX': " #THOMASCOOK",
  1199. 'TCW2VZ': " #THOMASCOOK",
  1200. 'TCW378': " #THOMASCOOK",
  1201. 'TCW379': " #THOMASCOOK",
  1202. 'TCW3LM': " #THOMASCOOK",
  1203. 'TCW5CD': " #THOMASCOOK",
  1204. 'TCW5CH': " #THOMASCOOK",
  1205. 'TCW8CV': " #THOMASCOOK",
  1206. 'TCW9PD': " #THOMASCOOK",
  1207. 'TCX105': " #KESTRELDalamanLondon",
  1208. 'TCX35PJ': " #KESTRELEastMidlandsZakynthos",
  1209. 'TCX431': " #KESTRELAntalyaLondon",
  1210. 'TCX525': " #KESTRELAntalyaLondon",
  1211. 'TCX56HW': " #KESTRELBirminghamPaphos",
  1212. 'TCX61XS': " #KESTRELLarnacaLondon",
  1213. 'TFL188': " #ARKEFLY",
  1214. 'THY1MY': " #TURKAIRIstanbulBrussels",
  1215. 'THY800': " #TURKAIRIstanbulBogota",
  1216. 'TJT002A': " #TWINJET",
  1217. 'TJT97RJ': " #TWINJET",
  1218. 'TOM10B': " #TOMSONManchesterNaples",
  1219. 'TOM399': " #TOMSONAntalyaLondon",
  1220. 'TOM3AP': " #TOMSONPalmadeMallorcaCardiff",
  1221. 'TOM45P': " #TOMSONRovaniemiLondon",
  1222. 'TOM593': " #TOMSONAntalyaLondon",
  1223. 'TOM5QD': " #TOMSONManchesterPalmadeMallorca",
  1224. 'TOM66A': " #TOMSONLarnacaLondon",
  1225. 'TOM92W': " #TOMSONManchesterKerkyra/corfu",
  1226. 'TRA091': " #TRANSAVIA",
  1227. 'TRA106N': " #TRANSAVIAValenciaEindhoven",
  1228. 'TRA10F': " #TRANSAVIA",
  1229. 'TRA132K': " #TRANSAVIABarcelonaAmsterdam",
  1230. 'TRA25W': " #TRANSAVIAEindhovenIbiza",
  1231. 'TRA25X': " #TRANSAVIAIbizaAmsterdam",
  1232. 'TRA26T': " #TRANSAVIAGranCanariaRotterdam",
  1233. 'TRA27Y': " #TRANSAVIAPalmadeMallorcaEindhoven",
  1234. 'TRA30B': " #TRANSAVIABarcelonaRotterdam",
  1235. 'TRA32N': " #TRANSAVIAPortoAmsterdam",
  1236. 'TRA36G': " #TRANSAVIARomeRotterdam",
  1237. 'TRA37J': " #TRANSAVIAEindhovenNice",
  1238. 'TRA38R': " #TRANSAVIAIbizaEindhoven",
  1239. 'TRA41K': " #TRANSAVIAEindhovenValencia",
  1240. 'TRA42G': " #TRANSAVIAAlicanteEindhoven",
  1241. 'TRA42T': " #TRANSAVIAAmsterdamGerona",
  1242. 'TRA47W': " #TRANSAVIANiceEindhoven",
  1243. 'TRA51T': " #TRANSAVIABolognaEindhoven",
  1244. 'TRA547Q': " #TRANSAVIA",
  1245. 'TRA651B': " #TRANSAVIAIbizaEindhoven",
  1246. 'TRA6624': " #TRANSAVIAAlicanteEindhoven",
  1247. 'TRA680P': " #TRANSAVIAAjaccioAmsterdam",
  1248. 'TRA6915': " #TRANSAVIA",
  1249. 'TRA6918': " #TRANSAVIAOlbiaAmsterdam",
  1250. 'TRA78A': " #TRANSAVIABarcelonaEindhoven",
  1251. 'TRA7C': " #TRANSAVIAMalagaAmsterdam",
  1252. 'TRA805M': " #TRANSAVIA",
  1253. 'TRA81N': " #TRANSAVIAAmsterdamNice",
  1254. 'TRA8P': " #TRANSAVIAPisaAmsterdam",
  1255. 'TRA917G': " #TRANSAVIAAmsterdamOlbia",
  1256. 'TRA97N': " #TRANSAVIAEindhovenMunich",
  1257. 'TUI19Y': " #TuninterColognePalmadeMallorca",
  1258. 'TUI1FX': " #TuninterPalmadeMallorcaDuesseldorf",
  1259. 'TUI23E': " #TuninterPalmadeMallorcaCologne",
  1260. 'TUI2FC': " #Tuninter",
  1261. 'TUI3KL': " #TuninterHannoverPalmadeMallorca",
  1262. 'TUI48G': " #TuninterIbizaDuesseldorf",
  1263. 'TUI70D': " #TuninterDuesseldorfIbiza",
  1264. 'TUI84E': " #TuninterMenorcaDuesseldorf",
  1265. 'TUI8MD': " #TuninterPalmadeMallorcaHamburg",
  1266. 'TUI9AG': " #Tuninter",
  1267. 'TUI9XE': " #TuninterDuesseldorfPalmadeMallorca",
  1268. 'TVS2422': " #SKYTRAVEL",
  1269. 'TVS2426': " #SKYTRAVELNantesPrague",
  1270. 'TVS4357': " #SKYTRAVEL",
  1271. 'TVS4359': " #SKYTRAVEL",
  1272. 'UAL52': " #UNITEDWashingtonZurich",
  1273. 'UAL90': " #UNITEDNewarkTel-aviv",
  1274. 'UPS242': " #UPSCologneBarcelona",
  1275. 'UPS243': " #UPSBarcelonaCologne",
  1276. 'VJT001': " #Inconnu",
  1277. 'VJT570': " #Inconnu",
  1278. 'VJT762': " #Inconnu",
  1279. 'VKG1139': " #InconnuPalmadeMallorcaCopenhagen",
  1280. 'VKG1247': " #InconnuPalmadeMallorcaBillund",
  1281. 'VKG1275': " #Inconnu",
  1282. 'VKG1531': " #Inconnu",
  1283. 'VKG1565': " #Inconnu",
  1284. 'VKG1581': " #Inconnu",
  1285. 'VKG1859': " #Inconnu",
  1286. 'VLG12GC': " #VUELINGBarcelonaStockholm",
  1287. 'VLG1898': " #VUELINGBarcelonaDuesseldorf",
  1288. 'VLG1899': " #VUELINGDuesseldorfBarcelona",
  1289. 'VLG18HA': " #VUELINGBarcelonaCopenhagen",
  1290. 'VLG20N': " #VUELINGBarcelonaLondon",
  1291. 'VLG56RH': " #VUELINGLondonFlorence",
  1292. 'VLG6206': " #VUELINGFlorenceLondon",
  1293. 'VLG6227': " #VUELINGLondonRome",
  1294. 'VLG6237': " #VUELINGRomeValencia",
  1295. 'VLG6292': " #VUELINGRomeBerlin",
  1296. 'VLG6814': " #VUELINGFlorenceAmsterdam",
  1297. 'VLG8394': " #VUELINGBarcelonaEindhoven",
  1298. 'VLG83LY': " #VUELINGAmsterdamBarcelona",
  1299. 'VLG8502': " #VUELINGBarcelonaAalborg",
  1300. 'VLG8526': " #VUELINGBarcelonaGothenborg",
  1301. 'VLG85CC': " #VUELINGBarcelonaBergen",
  1302. 'VLG8970': " #VUELINGBarcelonaLuxemburg",
  1303. 'VLG8971': " #VUELINGLuxemburgBarcelona",
  1304. 'VLG8988': " #VUELINGBarcelonaBrussels",
  1305. 'VLG8989': " #VUELINGBrusselsBarcelona",
  1306. 'VLG8990': " #VUELINGBarcelonaBrussels",
  1307. 'VLG8992': " #VUELINGBarcelonaBrussels",
  1308. 'VLG89HH': " #VUELING",
  1309. 'VLG91QL': " #VUELING",
  1310. 'VLZ194': " #Inconnu",
  1311. 'VMP932': " #Inconnu",
  1312. 'VND4185': " #Inconnu",
  1313. 'VPBEH': " #Inconnu",
  1314. 'VPCBF': " #Inconnu",
  1315. 'VPCPF': " #Inconnu",
  1316. 'VPCUA': " #Inconnu",
  1317. 'VVV461': " #Inconnu",
  1318. 'WGT73M': " #Inconnu",
  1319. 'XGO6AW': " #Inconnu",
  1320. 'XRO295': " #Inconnu",
  1321. 'XRO350': " #Inconnu",
  1322. 'XRO357': " #Inconnu",
  1323. 'XRO370': " #Inconnu",
  1324. 'XRO437': " #Inconnu",
  1325. }
  1326.  
  1327. if flight in flights_to_hashtags:
  1328. # if the flight is in our hash, append its hashtag to the hashtags list
  1329. hashtags.append(flights_to_hashtags[flight])
  1330.  
  1331. # add the conditional hashtags as long as there is room in 140 chars
  1332. for hash in hashtags:
  1333. if len(tweet) + len(hash) <= 140:
  1334. tweet += hash
  1335.  
  1336. # add the default hashtags as long as there is room
  1337. for hash in parser.get('tweet', 'default_hashtags').split(' '):
  1338. if len(tweet) + len(hash) <= 139:
  1339. tweet += " " + hash
  1340.  
  1341. # send tweet to twitter!
  1342. if havescreenshot:
  1343. with open('tweet.png', "rb") as imagefile:
  1344. imagedata = imagefile.read()
  1345. params = {"media[]": imagedata, "status": tweet}
  1346. twit.statuses.update_with_media(**params)
  1347. else:
  1348. twit.statuses.update(status=tweet)
  1349.  
  1350. # send the tweet to stdout while we're at it
  1351. print(tweet)
  1352.  
  1353.  
  1354. if __name__ == "__main__":
  1355.  
  1356. browser = screenshot.loadmap()
  1357. if browser == None:
  1358. print("unable to load browser!")
  1359. else:
  1360. print("browser loaded!")
  1361.  
  1362. alarms = dict() # dictonary of all aircraft that have triggered the alarm
  1363. # Indexed by it's hex code, each entry contains a tuple of
  1364. # the aircraft data at the closest position so far, and a
  1365. # counter. Once the airplane is out of the alarm zone,
  1366. # the counter is incremented until we hit [abovetustin_wait_x_updates]
  1367. # (defined above), at which point we then Tweet
  1368.  
  1369. fd = flightdata.FlightData()
  1370. lastTime = fd.time
  1371.  
  1372. while True:
  1373. sleep(abovetustin_sleep_time)
  1374. fd.refresh()
  1375. if fd.time == lastTime:
  1376. continue
  1377. lastTime = fd.time
  1378.  
  1379. print("Now: {}".format(fd.time))
  1380.  
  1381. current = dict() # current aircraft inside alarm zone
  1382.  
  1383. # loop on all the aircarft in the receiver
  1384. for a in fd.aircraft:
  1385. # if they don't have lat/lon or a heading skip them
  1386. if a.lat == None or a.lon == None or a.track == None:
  1387. continue
  1388.  
  1389. # check to see if it's in the alarm zone:
  1390. if a.distance < abovetustin_distance_alarm or a.el > abovetustin_elevation_alarm:
  1391.  
  1392. # add it to the current dictionary
  1393. current[a.hex] = a
  1394.  
  1395. print("{}/{}: {}mi, {}az, {}el, {}alt, {}dB, {}seen".format(
  1396. a.hex, a.flight, "%.1f" % a.distance, "%.1f" % a.az, "%.1f" % a.el,
  1397. a.altitude, "%0.1f" % a.rssi, "%.1f" % a.seen))
  1398.  
  1399. if a.hex in alarms:
  1400. #if it's already in the alarms dict, check to see if we're closer
  1401. if a.distance < alarms[a.hex][0].distance:
  1402. #if we're closer than the one already there, then overwrite it
  1403. alarms[a.hex] = (a, 0)
  1404. else:
  1405. #add it to the alarms
  1406. alarms[a.hex] = (a, 0)
  1407.  
  1408. finishedalarms = []
  1409. # loop on all the aircraft in the alarms dict
  1410. for h, a in alarms.items():
  1411. found = False
  1412. # check to see if it's in the current set of aircraft
  1413. for h2, a2 in current.items():
  1414. if h2 == h:
  1415. print("{} not yet, dist, elv: {}, {}".format(h, "%.1f" % a[0].distance, "%.1f" % a[0].el))
  1416. found = True
  1417. break
  1418. # if it wasn't in the current set of aircraft, that means it's time to tweet!
  1419. if not found:
  1420. if a[1] < abovetustin_wait_x_updates:
  1421. alarms[h] = (a[0], a[1]+1)
  1422. else:
  1423. havescreenshot = False
  1424. if browser != None:
  1425. print("time to create screenshot:")
  1426. hexcode = a[0].hex
  1427. hexcode = hexcode.replace(" ", "")
  1428. hexcode = hexcode.replace("~", "")
  1429.  
  1430. havescreenshot = screenshot.clickOnAirplane(browser, hexcode)
  1431.  
  1432. print("time to tweet!!!!!")
  1433.  
  1434.  
  1435. Tweet(a[0], havescreenshot)
  1436.  
  1437. finishedalarms.append(a[0].hex)
  1438.  
  1439. # for each alarm that is finished, delete it from the dictionary
  1440. for h in finishedalarms:
  1441. del(alarms[h])
  1442.  
  1443. # flush output for following in log file
  1444. sys.stdout.flush()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement