Advertisement
Guest User

Untitled

a guest
Jul 19th, 2018
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.05 KB | None | 0 0
  1. #! /usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. import xmltodict
  5. import os
  6. import ujson
  7. from datetime import datetime
  8.  
  9. from kw.bananabox.base.scraper_builder import ScraperBuilder
  10.  
  11.  
  12. class Scraper(ScraperBuilder):
  13. name = 'BR'
  14. max_layover_time = None
  15. nonseparable_roundtrip_prices = True
  16.  
  17. def load_date(self, date, return_date):
  18. pass
  19.  
  20. def after_load_date_check(self, required_directions):
  21. containers = {
  22. 'departing': 0,
  23. 'returning': 1,
  24. }
  25. path = './BR'
  26. for file in os.listdir(path):
  27. if not file.endswith('.xml'):
  28. continue
  29. fullname = os.path.join(path, file)
  30. print fullname
  31. with open(fullname, "r") as f:
  32. doc = xmltodict.parse(f.read())
  33. doc = ujson.loads(ujson.dumps(doc))
  34. for direction in required_directions:
  35. print 'is here'
  36. yield (direction, {'trips': doc, 'direction': containers[direction]})
  37.  
  38. break
  39.  
  40. def parse_flights(self, data, date, scraping_date):
  41. # print data
  42. segkey_to_segment = self.parse_segments(data)
  43. for flight in data['trips']['AirShoppingRS']['OffersGroup']['AirlineOffers']['AirlineOffer']:
  44. segments = []
  45. fl = flight['PricedOffer']['Associations'][data['direction']]
  46. try:
  47. segments.append(segkey_to_segment[fl['ApplicableFlight']['FlightSegmentReference']['@ref']])
  48. except TypeError:
  49. for seg in fl['ApplicableFlight']['FlightSegmentReference']:
  50. print
  51. segments.append(segkey_to_segment[seg['@ref']])
  52.  
  53. print fl
  54. yield {
  55. 'segments': segments,
  56. 'lowest_fare': {
  57. 'value': float(flight['TotalPrice']['SimpleCurrencyPrice']['#text'].encode('utf-8')),
  58. 'currency': flight['TotalPrice']['SimpleCurrencyPrice']['@Code'],
  59. },
  60. }
  61.  
  62. @staticmethod
  63. def parse_segments(data):
  64. segkey_to_segment = {}
  65. for flight in data['trips']['AirShoppingRS']['DataLists']['FlightSegmentList']['FlightSegment']:
  66. segkey = flight['@SegmentKey']
  67. dpt = flight['Departure']['Date'] + flight['Departure']['Time']
  68. arr = flight['Arrival']['Date'] + flight['Arrival']['Time']
  69. segment = {
  70. 'airline': flight['MarketingCarrier']['AirlineID'],
  71. 'flight_number': flight['MarketingCarrier']['FlightNumber'],
  72. 'from_airport': flight['Departure']['AirportCode'],
  73. 'to_airport': flight['Arrival']['AirportCode'],
  74. 'dept_time': datetime.strptime(dpt, '%Y-%m-%d%H:%M'),
  75. 'arrv_time': datetime.strptime(arr, '%Y-%m-%d%H:%M'),
  76. }
  77. segkey_to_segment.update({
  78. segkey: segment
  79. })
  80.  
  81. return segkey_to_segment
  82.  
  83.  
  84. if __name__ == '__main__':
  85. Scraper().run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement