├── .gitignore ├── info.txt ├── requirements.txt ├── wiki ├── icon.ico ├── ex_info_txt.png ├── run_vc_kntu.png └── done_vc_kntu.png ├── export_only.py ├── exporter.py ├── iut_vc_dl.py ├── kntu_vc_dl.py ├── ikiu_vc_dl.py ├── ut_vc_dl.py ├── GUI.py ├── README.md ├── media_converter.py └── downloader.py /.gitignore: -------------------------------------------------------------------------------- 1 | output/ 2 | temp/ 3 | __pycache__/ 4 | .idea/ 5 | GUI -------------------------------------------------------------------------------- /info.txt: -------------------------------------------------------------------------------- 1 | username 2 | password 3 | url-1 4 | url-2 5 | url-3 6 | ... 7 | url-n -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | requests 2 | bs4 3 | html5lib 4 | ffmpeg-python 5 | xmltodict 6 | tqdm 7 | PySimpleGUI -------------------------------------------------------------------------------- /wiki/icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sina-rostami/Adobe-Connect-Meetings-Downloader/HEAD/wiki/icon.ico -------------------------------------------------------------------------------- /wiki/ex_info_txt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sina-rostami/Adobe-Connect-Meetings-Downloader/HEAD/wiki/ex_info_txt.png -------------------------------------------------------------------------------- /wiki/run_vc_kntu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sina-rostami/Adobe-Connect-Meetings-Downloader/HEAD/wiki/run_vc_kntu.png -------------------------------------------------------------------------------- /wiki/done_vc_kntu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sina-rostami/Adobe-Connect-Meetings-Downloader/HEAD/wiki/done_vc_kntu.png -------------------------------------------------------------------------------- /export_only.py: -------------------------------------------------------------------------------- 1 | import os 2 | import exporter 3 | 4 | 5 | def export_only(): 6 | for meeting in [x for x in os.listdir('./temp/') if x.endswith('.zip')]: 7 | meeting_name = meeting[:len(meeting) - 4] 8 | exporter.export(meeting_name) 9 | 10 | 11 | if __name__ == '__main__': 12 | export_only() 13 | -------------------------------------------------------------------------------- /exporter.py: -------------------------------------------------------------------------------- 1 | import zipfile 2 | import media_converter 3 | 4 | 5 | def unzip(name): 6 | print('extracting zip file...') 7 | path = './temp/' + name + '.zip' 8 | zipfile.ZipFile(path, 'r').extractall('./temp/' + name) 9 | print('extracted!') 10 | 11 | 12 | def convert(name): 13 | print('converting and merging media....') 14 | if not media_converter.convert_media(name): 15 | print('An error occurred during conversion...') 16 | return 17 | print('converted!') 18 | 19 | 20 | def export(name): 21 | unzip(name) 22 | convert(name) 23 | -------------------------------------------------------------------------------- /iut_vc_dl.py: -------------------------------------------------------------------------------- 1 | from downloader import Downloader 2 | import time 3 | import re 4 | import exporter 5 | 6 | def iut_download(user_name, password, pasted_urls): 7 | 8 | iut_headers = { 9 | 'User-Agent' : 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36', 10 | } 11 | 12 | iut_login_data = { 13 | 'anchor' : '', 14 | 'username' : user_name, 15 | 'password' : password, 16 | 'rememberusername' : '0' 17 | } 18 | 19 | iut_downloader = Downloader('https://elearning.iut.ac.ir/login/index.php', 20 | 'https://ve.iut.ac.ir/', 21 | iut_login_data, iut_headers, iut_headers) 22 | 23 | if not iut_downloader.login({'logintoken'}): 24 | return 25 | 26 | for url in pasted_urls: 27 | if re.match(r'https://elearning\d*\.iut\.ac\.ir/mod/adobeconnect/joinrecording\.php.*', url): 28 | meeting_id=re.findall('recording=(\d+)&', url)[0] 29 | if not iut_downloader.download_meeting(url): 30 | print('An error occurred during download...') 31 | time.sleep(10) 32 | continue 33 | exporter.export(meeting_id) 34 | iut_downloader.download_other_files() 35 | print(meeting_id + ' is ready!') 36 | else: 37 | print('Wrong URL format') 38 | time.sleep(10) 39 | 40 | iut_downloader.remove_temp_directory() 41 | 42 | if __name__ == '__main__': 43 | with open('info.txt', 'r') as f: 44 | lines = f.read().splitlines() 45 | user_name = lines[0] 46 | password = lines[1] 47 | iut_download(user_name, password, lines[2:]) 48 | -------------------------------------------------------------------------------- /kntu_vc_dl.py: -------------------------------------------------------------------------------- 1 | from downloader import Downloader 2 | import time 3 | import re 4 | import exporter 5 | 6 | def kntu_download(user_name, password, pasted_urls): 7 | 8 | kntu_headers = { 9 | 'User-Agent' : 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36', 10 | } 11 | 12 | kntu_login_data = { 13 | 'anchor' : '', 14 | 'username' : user_name, 15 | 'password' : password, 16 | 'rememberusername' : '0' 17 | } 18 | 19 | kntu_downloader = Downloader('https://vc4011.kntu.ac.ir/login/index.php', 20 | 'https://connect4011.kntu.ac.ir/', 21 | kntu_login_data, kntu_headers, kntu_headers) 22 | 23 | if not kntu_downloader.login({'logintoken'}): 24 | return 25 | 26 | for url in pasted_urls: 27 | if re.match(r'https://vc\d*\.kntu\.ac\.ir/mod/adobeconnect/joinrecording\.php.*', url): 28 | meeting_id=re.findall('recording=(\d+)&', url)[0] 29 | if not kntu_downloader.download_meeting(url): 30 | print('An error occurred during download...') 31 | time.sleep(10) 32 | continue 33 | exporter.export(meeting_id) 34 | kntu_downloader.download_other_files() 35 | print(meeting_id + ' is ready!') 36 | else: 37 | print('Wrong URL format') 38 | time.sleep(10) 39 | 40 | kntu_downloader.remove_temp_directory() 41 | 42 | if __name__ == '__main__': 43 | with open('info.txt', 'r') as f: 44 | lines = f.read().splitlines() 45 | user_name = lines[0] 46 | password = lines[1] 47 | kntu_download(user_name, password, lines[2:]) 48 | -------------------------------------------------------------------------------- /ikiu_vc_dl.py: -------------------------------------------------------------------------------- 1 | from downloader import Downloader 2 | import time 3 | import re 4 | import exporter 5 | 6 | 7 | def ikiu_download(user_name, password, pasted_urls): 8 | 9 | headers = { 10 | 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36', 11 | } 12 | 13 | login_data = { 14 | 'anchor': '', 15 | 'username': user_name, 16 | 'password': password, 17 | 'rememberusername': '0' 18 | } 19 | 20 | ikiu_downloader = Downloader('http://lms.ikiu.ac.ir/blocks/whc_backup/login.php', 21 | 'https://ac.aminidc.com', 22 | login_data, headers, headers) 23 | 24 | if not ikiu_downloader.login({'logintoken'}): 25 | return 26 | 27 | for url in pasted_urls: 28 | if re.match(r'https://ac\.aminidc\.com/(.*)/.*', url): 29 | filename=re.findall('recording=(\d+)&', url)[0] 30 | print('Downloading ' + filename + '...') 31 | if not ikiu_downloader.download_meeting(url): 32 | print('An error occurred during download...') 33 | time.sleep(10) 34 | continue 35 | exporter.export(filename) 36 | ikiu_downloader.download_other_files() 37 | print(filename + ' is ready!') 38 | else: 39 | print('Wrong URL format') 40 | time.sleep(10) 41 | 42 | ikiu_downloader.remove_temp_directory() 43 | 44 | if __name__ == '__main__': 45 | with open('info.txt', 'r') as f: 46 | lines = f.read().splitlines() 47 | user_name = lines[0] 48 | password = lines[1] 49 | ikiu_download(user_name, password, lines[2:]) 50 | -------------------------------------------------------------------------------- /ut_vc_dl.py: -------------------------------------------------------------------------------- 1 | from downloader import Downloader 2 | import exporter 3 | import os 4 | import re 5 | import shutil 6 | import time 7 | 8 | def ut_download(user_name, password, pasted_urls): 9 | 10 | ut_headers = { 11 | 'User-Agent' : 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36', 12 | } 13 | 14 | ut_login_data = { 15 | 'username' : user_name, 16 | 'password' : password, 17 | '_eventId' : 'submit', 18 | 'geolocation' : '', 19 | 'submit' : 'LOGIN' 20 | } 21 | 22 | ut_downloader = Downloader('http://elearn.ut.ac.ir/', '', ut_login_data, ut_headers, ut_headers) 23 | 24 | if not ut_downloader.login({'execution'}): 25 | print("username or password is incorrect!") 26 | time.sleep(10) 27 | return 28 | 29 | for url in pasted_urls: 30 | if re.match(r'https://elearn\d*\.ut\.ac\.ir/mod/adobeconnect\d*/joinrecording\.php.*', url): 31 | filename=re.findall('recording=(\d+)&', url)[0] 32 | if not ut_downloader.download_meeting(url): 33 | print('An error occurred during download...') 34 | time.sleep(10) 35 | continue 36 | exporter.export(filename) 37 | ut_downloader.download_other_files() 38 | print(filename + ' is ready!') 39 | else: 40 | print('Wrong URL format') 41 | time.sleep(10) 42 | 43 | ut_downloader.remove_temp_directory() 44 | 45 | if __name__ == '__main__': 46 | with open('info.txt', 'r') as f: 47 | lines = f.read().splitlines() 48 | user_name = lines[0] 49 | password = lines[1] 50 | ut_download(user_name, password, lines[2:]) 51 | -------------------------------------------------------------------------------- /GUI.py: -------------------------------------------------------------------------------- 1 | from tkinter import Scrollbar 2 | from tkinter.constants import CENTER 3 | import PySimpleGUI as sg 4 | import export_only 5 | import kntu_vc_dl 6 | import ut_vc_dl 7 | import iut_vc_dl 8 | import ikiu_vc_dl 9 | 10 | sg.theme("Topanga") 11 | 12 | 13 | def download_meeting(values, window): 14 | window.close() 15 | pasted_urls = [l for l in values['-LINKS-'].split("\n") if len(l) > 0] 16 | if values['-UNI-'] == 'Khaje Nasir Toosi University Of Technology': 17 | kntu_vc_dl.kntu_download( 18 | values['-USERNAME-'], values['-PASSWD-'], pasted_urls) 19 | elif values['-UNI-'] == 'University Of Tehran': 20 | ut_vc_dl.ut_download(values['-USERNAME-'], values['-PASSWD-'], pasted_urls) 21 | elif values['-UNI-'] == 'Isfahan University Of Technology': 22 | iut_vc_dl.iut_download(values['-USERNAME-'], values['-PASSWD-'], pasted_urls) 23 | elif values['-UNI-'] == 'Imam Khomeini International University': 24 | ikiu_vc_dl.ikiu_download(values['-USERNAME-'], values['-PASSWD-'], pasted_urls) 25 | 26 | 27 | layout = [ 28 | [sg.T('"Adobe Connect Meetings Tools"', pad=(220, 0))], 29 | [sg.T('University:')], [sg.Combo(['Khaje Nasir Toosi University Of Technology', 'University Of Tehran', 'Isfahan University Of Technology','Imam Khomeini International University'], key='-UNI-')], 30 | [sg.T('Username:')], [sg.Input(key='-USERNAME-', size=(25, 1))], 31 | [sg.T('Password:')], [sg.Input(key='-PASSWD-', size=(25, 1))], 32 | [sg.T('Mettings Links:')], [sg.MLine(key='-LINKS-', size=(150, 8))], 33 | [sg.Button('Download'), sg.Button('Export-Only')], 34 | ] 35 | 36 | window = sg.Window('Adobe Connect Meetings Tools', 37 | layout, size=(800, 450), grab_anywhere=True, resizable=True) 38 | 39 | while True: 40 | event, values = window.read() 41 | 42 | if event == sg.WIN_CLOSED: 43 | break 44 | 45 | elif event == "Download": 46 | download_meeting(values, window) 47 | break 48 | elif event == "Export-Only": 49 | window.close() 50 | export_only.export_only() 51 | break 52 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | Adobe-Connect-Based-Meetings-Downloader
3 | دانلودر جلسات ادوبی کانکت
4 | آموزش فارسی
5 |