11#!/usr/bin/python3
22
33from bs4 import BeautifulSoup
4- from art import tprint
54from colorama import Fore
65
76import argparse
2524
2625def choose_batch ():
2726 batches = [
28- [1 , '2022' , 'https://msc-mu.com/level/17' ],
27+ [1 , '2022' , 'https://msc-mu.com/level/17' ],
2928 [2 , 'Rou7' , 'https://msc-mu.com/level/16' ],
3029 [3 , 'Wateen' , 'https://msc-mu.com/level/15' ],
3130 [4 , 'Nabed' , 'https://msc-mu.com/level/14' ],
32- [5 , 'Wareed' , 'https://msc-mu.com/level/13' ]
31+ [5 , 'Wareed' , 'https://msc-mu.com/level/13' ],
32+ [6 , 'Minors' , 'https://msc-mu.com/level/10' ],
33+ [7 , 'Majors' , 'https://msc-mu.com/level/9' ]
3334 ]
3435 print ('\n ' )
3536 if args .batch :
@@ -84,6 +85,7 @@ def choose_course(courses):
8485 for course in courses :
8586 print (str (course [0 ]) + ') ' + course [1 ])
8687 selected_course = input ('\n [*] Which course would you like to download?\n \n >> ' )
88+ list_index = None
8789 try :
8890 selected_course = int (selected_course )
8991 for course in courses :
@@ -97,50 +99,52 @@ def choose_course(courses):
9799 return choose_course (courses )
98100
99101def download_lectures (url , folder ):
100- extension = '.pdf'
101102 course_page = requests .get (url , headers = HEADERS )
102- links = re .findall ('<a href="(.*)">.*' + extension + '</a>' , course_page .content .decode ())
103- names = re .findall ('<a href=".*">(.*)' + extension + '</a>' , course_page .content .decode ())
104- doc = BeautifulSoup (course_page .text , 'html.parser' )
105- y = 0
106- prev_sub_folder = None
107- subject_folders_list = []
108- for x , link in enumerate (links ):
109- link = link .strip () + extension
110- subject_folder = find_subject_folder (names [x ] + extension , doc )
111- if subject_folder != prev_sub_folder :
112- if subject_folder in subject_folders_list :
113- subject_folder = subject_folder + '-extras'
114- y = 0
115- new_name = str (y + 1 ) + '. ' + names [x ] + extension
116- y += 1
117- subject_folders_list .append (subject_folder )
118- prev_sub_folder = subject_folder
119- file_path = folder + subject_folder + '/' + new_name
120- if os .path .isfile (file_path ):
121- if new_name .startswith ('1.' ):
103+ extensions = ['.pdf' , '.pptx' ]
104+ for extension in extensions :
105+ links = re .findall ('<a href="(.*)">.*' + extension + '</a>' , course_page .content .decode ())
106+ names = re .findall ('<a href=".*">(.*)' + extension + '</a>' , course_page .content .decode ())
107+ doc = BeautifulSoup (course_page .text , 'html.parser' )
108+ y = 0
109+ prev_sub_folder = None
110+ subject_folders_list = []
111+ for x , link in enumerate (links ):
112+ link = link .strip () + extension
113+ subject_folder = find_subject_folder (names [x ] + extension , doc )
114+ if subject_folder != prev_sub_folder :
115+ if subject_folder in subject_folders_list :
116+ subject_folder = subject_folder + '-extras'
117+ y = 0
118+ new_name = str (y + 1 ) + '. ' + names [x ] + extension
119+ y += 1
120+ subject_folders_list .append (subject_folder )
121+ prev_sub_folder = subject_folder
122+ file_path = folder + subject_folder + '/' + new_name
123+ if os .path .isfile (file_path ):
124+ if new_name .startswith ('1.' ):
125+ print ('\n ################ ' + subject_folder + ' ################\n ' )
126+ print ( Fore .MAGENTA + new_name + ' <is already downloaded there XD>' + Fore .RESET )
127+ continue
128+ if not os .path .isdir (folder + subject_folder ):
129+ os .makedirs (folder + subject_folder )
122130 print ('\n ################ ' + subject_folder + ' ################\n ' )
123- print ( Fore .MAGENTA + new_name + ' <is already downloaded there XD>' + Fore .RESET )
124- continue
125- if not os .path .isdir (folder + subject_folder ):
126- os .makedirs (folder + subject_folder )
127- print ('\n ################ ' + subject_folder + ' ################\n ' )
128-
129- response = requests .get (link , headers = HEADERS )
130- with open (file_path , 'wb' ) as file :
131- file .write (response .content )
132- print ('[*] Downloaded ' + new_name )
131+
132+ response = requests .get (link , headers = HEADERS )
133+ with open (file_path , 'wb' ) as file :
134+ file .write (response .content )
135+ print ('[*] Downloaded ' + new_name )
136+
133137
134138# If not specified, prompt the user to input a folder
135-
139+
136140def choose_folder ():
137141 folder = os .path .expanduser ("~" ) + FOLDER
138142 if args .folder :
139143 if '~' in args .folder :
140144 args .folder = os .path .expanduser (args .folder )
141145 if os .path .isdir (args .folder ):
142- folder = args .folder
143- return folder
146+ folder = args .folder
147+ return folder
144148 else :
145149 print ('\n [*] Folder Not found! ' , end = '' )
146150 quit ()
@@ -164,6 +168,7 @@ def choose_folder():
164168# Gets the name of the course from the course number, and makes a folder with that name
165169
166170def make_course_folder (courses , index , folder ):
171+ course_name = None
167172 for course in courses :
168173 if course [2 ] == index :
169174 course_name = course [1 ]
@@ -184,11 +189,8 @@ def main():
184189 download_lectures (download_url , folder )
185190
186191if __name__ == '__main__' :
187- print (Fore .CYAN + '#' * 54 )
188- print (Fore .RED )
189- tprint ('RBCs' )
190- print (Fore .CYAN + '#' * 54 , end = '\n ' )
191-
192+ print (Fore .CYAN + '#' * 54 + Fore .RESET )
193+
192194 try :
193195 main ()
194196 except KeyboardInterrupt :
0 commit comments