racenet.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import json
  2. from pprint import pprint
  3. from model import local_timezones
  4. import arrow
  5. # import collections
  6. import _bs
  7. import model
  8. # import re
  9. import textwrap
  10. import database
  11. import time
  12. send_only_flagged = False
  13. # Data = collections.namedtuple('Data', 'venue state race time horse_no horse flag')
  14. start = time.time()
  15. my_json = model.scrape_racenet_scratchings_page()
  16. my_json = textwrap.fill(my_json[:-1], 1e6)
  17. # print(my_json)
  18. # exit(0)
  19. # with open('scratchings.json', 'r') as f:
  20. data_all = json.loads(my_json)
  21. # pprint(data_all)
  22. data = data_all["MainPageState"]["receivedData"][0]
  23. name = data['name']
  24. # print(name)
  25. items = 0
  26. for d in data['data']:
  27. items += 1
  28. # pprint(d)
  29. # print('item {}'.format(items))
  30. country = d['venue']['countryId']
  31. is_aus = True if country == 'AUS' else False
  32. timezone = local_timezones[d['venue']['state']] if is_aus else 'Pacific/Auckland'
  33. venue_name = d['venue']['name']
  34. if venue_name == 'Ballarat Synthetic':
  35. venue_name = 'Sportsbet-Ballarat Synthetic'
  36. if venue_name == 'Moonee Valley':
  37. venue_name = 'The Valley'
  38. if venue_name == 'Gold Coast':
  39. venue_name = 'Aquis Park Gold Coast'
  40. if venue_name == 'Sandown Lakeside':
  41. venue_name = 'Ladbrokes Park Lakeside'
  42. # venue = '{} {}{} {}'.format(venue_name, d['venue']['countryId'],
  43. # '/' + d['venue']['state'] if is_aus else '',
  44. # timezone)
  45. # print(venue)
  46. races = d['races']
  47. scratchings = []
  48. for race in races:
  49. raceNumber = race['raceNumber']
  50. startTimeLocal = race['startTimeLocal'][11:-3]
  51. # print(race['startTimeLocal'])
  52. arrowStartTimeLocal = arrow.get(race['startTimeLocal']+' '+timezone, 'YYYY-MM-DDTHH:mm:ss ZZZ')
  53. # print(arrowStartTimeLocal)
  54. startTimeUtc = race['startTimeUtc']
  55. race_date = race['startTimeLocal'][:10]
  56. # print(race_date)
  57. # print('race {:2d}: {} {}'.format(raceNumber, startTimeLocal, startTimeUtc))
  58. for runner in race['runners']:
  59. if runner['scratched']:
  60. horseDisplayName = runner['horseDisplayName']
  61. horseNumber = runner['horseNumber']
  62. # print('\t{:2d}: {}'.format(horseNumber, horseDisplayName))
  63. # data_without_flag = Data(d['venue']['name'], d['venue']['state'] if is_aus else 'NZL',
  64. # raceNumber, arrowStartTimeLocal,
  65. # horseNumber, horseDisplayName, False)
  66. data_without_flag = _bs.Scratching(venue_name, d['venue']['state'] if is_aus else 'NZL',
  67. arrowStartTimeLocal.date(), raceNumber,
  68. arrowStartTimeLocal.format('HH:mm'),
  69. arrowStartTimeLocal.to('utc').datetime, horseNumber,
  70. horseDisplayName, False)
  71. scratchings.append(data_without_flag)
  72. if arrow.utcnow().minute % 20 == 0:
  73. pprint(scratchings)
  74. db = database.db
  75. scratchings_to_be_broadcast = model.store_scratched_horses(db, scratchings)
  76. # print('len(scratchings_to_be_broadcast): {}'.format(len(scratchings_to_be_broadcast)))
  77. model.send_messages(scratchings_to_be_broadcast, 'RN', start, send_only_flagged)