main.py 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import pandas as pd
  2. from icalendar import Calendar, Event
  3. from datetime import datetime, timedelta
  4. import uuid
  5. import os
  6. def store_df_as_csv(df:pd.DataFrame)->None:
  7. """_summary_
  8. Args:
  9. df (pd.DataFrame): _description_
  10. """
  11. df.to_csv('./fixtures.csv', index=False)
  12. def compare_dfs(df:pd.DataFrame)->bool:
  13. """_summary_
  14. Args:
  15. df (pd.DataFrame): _description_
  16. Returns:
  17. bool: _description_
  18. """
  19. df2 = pd.read_csv('./fixtures.csv')
  20. return df.equals(df2)
  21. def write_calendar(cal:Calendar)->None:
  22. """_summary_
  23. Args:
  24. cal (Calendar): _description_
  25. """
  26. f = open(os.path.join('./', 'fixtures.ics'), 'wb')
  27. f.write(cal.to_ical())
  28. f.close()
  29. def does_csv_exist()->bool:
  30. """_summary_
  31. Returns:
  32. bool: _description_
  33. """
  34. return os.path.isfile('./fixtures.csv')
  35. def create_ical_file(df, cal)->None:
  36. for index, row in df.iterrows():
  37. event = Event()
  38. print(row['Date / Time'], row['Home Team'], row['Away Team.1'], row['Venue'])
  39. start_date_time = datetime.strptime(row['Date / Time'], '%d/%m/%y %H:%M')
  40. if start_date_time.hour == 8:
  41. start_date_time = start_date_time + timedelta(hours=1, minutes=30)
  42. arrival_time = start_date_time + timedelta(minutes=-30)
  43. event.add('summary', str(row['Home Team']) + " vs " + str(row['Away Team.1']))
  44. event.add('description', f'Arrive by - {arrival_time}')
  45. event.add('dtstart', start_date_time)
  46. event.add('dtend', start_date_time + timedelta(hours=2))
  47. event.add('dtstamp', start_date_time)
  48. event.add('uid', str(uuid.uuid4()))
  49. event.add('location', str(row['Venue']))
  50. cal.add_component(event)
  51. write_calendar(cal)
  52. cal = Calendar()
  53. cal.add('prodid', 'Down Grange Pumas Fixtures')
  54. cal.add('version', '2.0')
  55. url = "https://fulltime.thefa.com/fixtures.html?selectedSeason=19010414&selectedFixtureGroupAgeGroup=11&selectedFixtureGroupKey=1_579285719&selectedDateCode=all&selectedClub=&selectedTeam=466317969&selectedRelatedFixtureOption=3&selectedFixtureDateStatus=&selectedFixtureStatus=&previousSelectedFixtureGroupAgeGroup=11&previousSelectedFixtureGroupKey=1_579285719&previousSelectedClub=&itemsPerPage=25"
  56. df = pd.read_html(url)[0]
  57. df.head()
  58. exists = does_csv_exist()
  59. if exists:
  60. no_change = compare_dfs(df)
  61. if not no_change:
  62. store_df_as_csv(df)
  63. create_ical_file(df, cal)
  64. else:
  65. store_df_as_csv(df)
  66. create_ical_file(df, cal)