75 lines
2.5 KiB
Python
Executable File
75 lines
2.5 KiB
Python
Executable File
#!/usr/bin/python3
|
|
from urllib import request
|
|
from urllib.parse import urlparse, parse_qs
|
|
from html.parser import HTMLParser
|
|
import re
|
|
|
|
class FormInputFinder(HTMLParser):
|
|
def __init__(self, target_name=None, target_id=None):
|
|
super().__init__()
|
|
self.target_name = target_name
|
|
self.target_id = target_id
|
|
self.input_value = None
|
|
|
|
def handle_starttag(self, tag, attrs):
|
|
if tag == 'input':
|
|
attrs_dict = dict(attrs)
|
|
if (self.target_name and attrs_dict.get('name') == self.target_name) or \
|
|
(self.target_id and attrs_dict.get('id') == self.target_id):
|
|
self.input_value = attrs_dict.get('value', '')
|
|
|
|
|
|
def is_url(input_string):
|
|
regex = r"https:\/\/drive\.google\.com\/file\/d\/[^\s&]+\?usp=drive_link"
|
|
return re.match(regex, input_string)
|
|
|
|
|
|
def get_file_id():
|
|
while True:
|
|
url = input("Enter the Google Drive Share URL: ")
|
|
if is_url(url):
|
|
file_id = url.split('/')[5]
|
|
# print(file_id)
|
|
return file_id
|
|
else:
|
|
print(f"The URL is not valid. Please try again.")
|
|
|
|
def get_link_from_google_drive(file_id):
|
|
def get_token(site_text, target_name):
|
|
finder = FormInputFinder(target_name=target_name)
|
|
finder.feed(site_text)
|
|
the_token = finder.input_value
|
|
if the_token:
|
|
return the_token
|
|
else:
|
|
return None
|
|
|
|
# URL = "https://drive.google.com/uc?export=download&id=" + file_id
|
|
URL = "https://drive.usercontent.google.com/download?export=download&authuser=0&id=" + file_id
|
|
|
|
response = request.urlopen(URL)
|
|
data = response.read()
|
|
try:
|
|
site_text = data.decode("utf8")
|
|
except UnicodeDecodeError:
|
|
print("===========================================================================================")
|
|
print("We believe this is trying to download the actual zip file, without asking about virus scan.")
|
|
print("===========================================================================================")
|
|
return None
|
|
uuid_token = get_token(site_text, 'uuid')
|
|
at_token = get_token(site_text, 'at')
|
|
# print(site_text)
|
|
response.close()
|
|
|
|
if uuid_token and at_token:
|
|
url = f"{URL}&confirm=t&uuid={uuid_token}&at={at_token}"
|
|
print(url)
|
|
elif uuid_token:
|
|
url = f"{URL}&confirm=t&uuid={uuid_token}"
|
|
print(url)
|
|
else:
|
|
print(URL)
|
|
|
|
file_id = get_file_id()
|
|
get_link_from_google_drive(file_id)
|