Advertisement
Guest User

Untitled

a guest
Mar 30th, 2020
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.36 KB | None | 0 0
  1. import json
  2. import requests
  3. from operator import itemgetter
  4.  
  5. def write_json(new_dict, file_name): #write_json(new_result, 'product.json') дописываем данные в файл
  6. try: #получаем данные из файла или создаем пустой список
  7. data = json.load(open(file_name))
  8. except:
  9. data = []
  10.  
  11. data.append(new_dict)
  12. with open(file_name, 'w', encoding='UTF-8') as file:
  13. json.dump(data, file, indent=2, ensure_ascii=False) #загружаем данные в json
  14.  
  15. def sort_curricula(a): #сортируем исходные данные в более удобный словарь
  16. new_curricula = []
  17. j = {}
  18.  
  19. for dic in a["curricula"]: # lessonid, subjectname, teachername, roomname
  20. for les in a['lessons']:
  21. if dic['lessonid'] == les['id']:
  22. j['timeslot'] = list(
  23. item for item in les['timeslot'][1:-1].split(',')) # какой-то петух сделал кортеж - строкой
  24. j['subjectname'] = dic['subjectname']
  25. j['teachername'] = dic['teachername']
  26. j['roomname'] = dic['roomname']
  27. new_curricula.append(j)
  28. j = {}
  29.  
  30. new_curricula.sort(key=itemgetter('timeslot'))
  31.  
  32. return new_curricula
  33.  
  34. def shedule_base(): #получаем все расписание
  35.  
  36. degree = 'https://schedule.sfedu.ru/APIv1/grade/list/'
  37. group = 'https://schedule.sfedu.ru/APIv1/group/forGrade/'
  38. shedule = 'https://schedule.sfedu.ru/APIv1/schedule/group/'
  39.  
  40. result = requests.get(degree)
  41. course_list = json.loads(result.text)
  42. bachelor = {}
  43. master = {}
  44. postgraduate = {}
  45.  
  46. for i in course_list: #тут происходят танцы с бубном
  47. if 'bachelor' in i.values():
  48. bachelor[i['num']] = (i['id'])
  49. elif 'master' in i.values():
  50. master[i['num']] = (i['id'])
  51. else:
  52. postgraduate[i['num']] = (i['id'])
  53. for key, values in bachelor.items():
  54. result = requests.get(group + str(values))
  55. course_list = json.loads(result.text)
  56. c = []
  57. for i in course_list:
  58. result = requests.get(shedule + str(i['id']))
  59. curricula_list = json.loads(result.text)
  60. c.append({i['num']: sort_curricula(curricula_list)})
  61. bachelor[key] = c
  62. for key, values in master.items():
  63. result = requests.get(group + str(values))
  64. course_list = json.loads(result.text)
  65. c = []
  66. for i in course_list:
  67. result = requests.get(shedule + str(i['id']))
  68. curricula_list = json.loads(result.text)
  69. c.append({i['num']: sort_curricula(curricula_list)})
  70. master[key] = c
  71. for key, values in postgraduate.items():
  72. result = requests.get(group + str(values))
  73. course_list = json.loads(result.text)
  74. c = []
  75. for i in course_list:
  76. result = requests.get(shedule + str(i['id']))
  77. curricula_list = json.loads(result.text)
  78. c.append({i['num']: sort_curricula(curricula_list)})
  79. postgraduate[key] = c
  80.  
  81. base = {'bachelor': bachelor,
  82. 'master': master,
  83. 'postgraduate': postgraduate}
  84. return base #degree:course:group:shedule
  85.  
  86. base = shedule_base()
  87. write_json(base, 'sfedu_base.json')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement