├── README.md ├── bypass_experimental.py └── gdtot.py /README.md: -------------------------------------------------------------------------------- 1 | ## GDToT Scraper 2 | A py script to interact with gdtot. 3 | 4 | ### Sample output: 5 | 6 | ```bash 7 | { 8 | 'error': False, 9 | 'message': 'Some status message' 10 | 'title': 'Filename on website', 11 | 'size': '420 MB', 12 | 'date': '11-Feb-2023 09:40:22', 13 | 'src_url': 'https://gdtot-domain/file/fileid', 14 | 'gdrive_link': 'https://drive.google.com/open?id=driveid' 15 | } 16 | ``` 17 | -------------------------------------------------------------------------------- /bypass_experimental.py: -------------------------------------------------------------------------------- 1 | import requests 2 | from lxml import html 3 | 4 | url = 'https://new.gdtot.zip/file/1234567890' 5 | 6 | # --------------------------------------------- 7 | 8 | api = 'https://6e0.uuxd.workers.dev' 9 | api_res = requests.get(api, params={ 10 | 'url': url 11 | }).text 12 | 13 | tree = html.fromstring(api_res) 14 | tg = tree.xpath("//button[@id='dirdown']/@onclick")[0][7:-2] 15 | 16 | # --------------------------------------------- 17 | 18 | forms = tree.xpath('//form') 19 | ddl = forms[0] 20 | ddlu = ddl.xpath("./@action")[0] 21 | form_data = {} 22 | for input_element in ddl.xpath('.//input'): 23 | name = input_element.get("name") 24 | value = input_element.get("value") 25 | form_data[name] = value 26 | 27 | res = requests.post(ddlu, data=form_data).text 28 | tree = html.fromstring(res) 29 | drive = tree.xpath('//button[@onclick]/@onclick')[0][6:-2] 30 | 31 | # --------------------------------------------- 32 | 33 | print({'tg': tg, 'drive': drive}) 34 | 35 | 36 | ''' 37 | sample op: 38 | { 39 | 'tg': 'https://t.me/FilestoringmBot?start=M-y-Z-a-xyzabc-xyzabc-', 40 | 'drive': 'https://drive.google.com/u/0/uc?id=1234567890abcdefghijklm1234567890&export=download' 41 | } 42 | ''' 43 | -------------------------------------------------------------------------------- /gdtot.py: -------------------------------------------------------------------------------- 1 | import re 2 | import base64 3 | import requests 4 | from urllib.parse import urlparse, parse_qs 5 | 6 | # gdtot url 7 | URL = "" 8 | 9 | # add your crypt cookie here 10 | crypt = "" 11 | 12 | # ========================================== 13 | 14 | def parse_info(res): 15 | title = re.findall(">(.*?)<\/h5>", res.text)[0] 16 | info = re.findall('(.*?)<\/td>', res.text) 17 | parsed_info = { 18 | 'error': True, 19 | 'message': 'Link Invalid.', 20 | 'title': title, 21 | 'size': info[0], 22 | 'date': info[1] 23 | } 24 | return parsed_info 25 | 26 | # ========================================== 27 | 28 | def gdtot_dl(url): 29 | client = requests.Session() 30 | client.cookies.update({ 'crypt': crypt }) 31 | res = client.get(url) 32 | 33 | info = parse_info(res) 34 | info['src_url'] = url 35 | 36 | res = client.get(f"https://new.gdtot.top/dld?id={url.split('/')[-1]}") 37 | 38 | try: 39 | url = re.findall('URL=(.*?)"', res.text)[0] 40 | except: 41 | info['message'] = 'The requested URL could not be retrieved.', 42 | return info 43 | 44 | params = parse_qs(urlparse(url).query) 45 | 46 | if 'msgx' in params: 47 | info['message'] = params['msgx'][0] 48 | 49 | if 'gd' not in params or not params['gd'] or params['gd'][0] == 'false': 50 | return info 51 | 52 | try: 53 | decoded_id = base64.b64decode(str(params['gd'][0])).decode('utf-8') 54 | gdrive_url = f'https://drive.google.com/open?id={decoded_id}' 55 | info['message'] = 'Success.' 56 | except: 57 | info['error'] = True 58 | return info 59 | 60 | info['error'] = False 61 | info['gdrive_link'] = gdrive_url 62 | 63 | return info 64 | 65 | # ========================================== 66 | 67 | info = gdtot_dl(URL) 68 | 69 | print(info) 70 | 71 | # ========================================== 72 | --------------------------------------------------------------------------------