find.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import config
  2. from class_xml import XML
  3. def find_id():
  4. t = int(input('Sélectionnez la source :\n\t1 : ratp\n\t2 : transilien\n\t3 : jcdecaux_vls (vélos en libre service)\n'))
  5. if t == 1: # RATP
  6. print('Téléchargement de la liste des lignes...')
  7. xml = XML(url='http://www.ratp.fr/meteo/', lang='html')
  8. dic = {tag['id']: tag['id'].replace('_', ' ') for tag in xml.data.select('.encadre_ligne')}
  9. elif t == 2: # transilien
  10. print('Téléchargement de la liste des lignes...')
  11. xml = XML(url='http://www.transilien.com/info-trafic/temps-reel', lang='html')
  12. dic = {}
  13. for line in xml.data.select('div.b_info_trafic')[0].find_all('div', recursive=False):
  14. id = line.select('.picto-transport')[1].get_text()
  15. dic[id] = id.replace('-', ' ')
  16. elif t == 3: # jcdecaux_vls
  17. print('Téléchargment de la liste des villes...')
  18. xml_contracts = XML(url='https://api.jcdecaux.com/vls/v1/contracts?apiKey=' + config.api_key['jcdecaux_vls'], lang='json')
  19. contracts = {tag.find('name').string : tag.commercial_name.string for tag in xml_contracts.data.json.children}
  20. while True:
  21. print('Choisissez une ville :')
  22. for (name, commercial_name) in contracts.items():
  23. print(name + ' (' + commercial_name + ')')
  24. print("toutes (toutes les villes)\n")
  25. contract = input()
  26. if contract == 'toutes':
  27. contract = None
  28. break;
  29. if contract in contracts:
  30. break;
  31. print("Ville inconnue !\n\n")
  32. print('Téléchargement de la liste des stations...')
  33. if contract:
  34. xml = XML(url='https://api.jcdecaux.com/vls/v1/stations?contract=' + contract + '&apiKey=' + config.api_key['jcdecaux_vls'], lang='json')
  35. else:
  36. xml = XML(url='https://api.jcdecaux.com/vls/v1/stations?apiKey=' + config.api_key['jcdecaux_vls'], lang='json')
  37. dic = {}
  38. for sta in xml.data.json.find_all("item", recursive=False):
  39. dic[sta.contract_name.string.lower() + '_' + sta.number.string] =\
  40. sta.find('name').string + ' (' + sta.address.get_text() + ')'
  41. # we use find('name') because .name is the current tag name
  42. else:
  43. raise ValueError('mauvaise réponse !')
  44. # find an id in dic
  45. while True:
  46. pat = input('Rechercher (ctrl+c pour quitter) : ').lower()
  47. print('Correspondances :')
  48. for key, value in dic.items():
  49. if pat in value.lower():
  50. print(key + ' :\t' + value)
  51. find_id()