From 1200be279419287091ac7ce835fa7fca593dc6f4 Mon Sep 17 00:00:00 2001 From: vscg <39382021+vscg@users.noreply.github.com> Date: Sun, 27 Dec 2020 17:11:55 +0530 Subject: [PATCH 1/2] Update service.py Functions Added getIdFromUrl : extract file/folder id from drive URL add_file_shortcut: create shortcut of a drive file in my drive --- pygdrive3/service.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/pygdrive3/service.py b/pygdrive3/service.py index 0a8987b..efda51b 100644 --- a/pygdrive3/service.py +++ b/pygdrive3/service.py @@ -5,7 +5,7 @@ from oauth2client import file, client, tools import mimetypes import os - +import re class DriveService: def __init__(self, client_secret): @@ -33,6 +33,10 @@ def auth(self): flow = client.flow_from_clientsecrets(self.client_secret, SCOPES) creds = tools.run_flow(flow, store) self.drive_service = build('drive', 'v3', http=creds.authorize(Http())) + + def getIdFromUrl(self, url): + regex = "(?<=/folders/)([\w-]+)|(?<=%2Ffolders%2F)([\w-]+)|(?<=/file/d/)([\w-]+)|(?<=%2Ffile%2Fd%2F)([\w-]+)|(?<=id=)([\w-]+)|(?<=id%3D)([\w-]+)" + return re.search(regex,url) def create_folder(self, name, parent_id=None): if parent_id != None: @@ -54,6 +58,26 @@ def create_folder(self, name, parent_id=None): return folder.get('id') + def add_file_shortcut(self, file_id, file_name = '', folder_id = ''): + mime_type = 'application/vnd.google-apps.shortcut' + + shortcut_metadata = { + 'mimeType': mime_type, + 'shortcutDetails': { + 'targetId': file_id + } + } + + if(len(file_name) > 0): + shortcut_metadata['name'] = file_name + + if(len(folder_id) > 0): + shortcut_metadata['parents'] = [folder_id] + + shortcut = self.drive_service.files().create(body=shortcut_metadata, fields='id,shortcutDetails').execute() + + return shortcut.get('id') + def upload_file(self, name, file_path, folder_id, mime_type = None): fileType = mime_type if(mime_type == None): From f621c78e8a2b884f93024a6fbda4ab5b70ef18b0 Mon Sep 17 00:00:00 2001 From: vscg <39382021+vscg@users.noreply.github.com> Date: Sun, 27 Dec 2020 17:14:26 +0530 Subject: [PATCH 2/2] Add Multiple File Shortcuts --- test/addMultipleFileShortcuts.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 test/addMultipleFileShortcuts.py diff --git a/test/addMultipleFileShortcuts.py b/test/addMultipleFileShortcuts.py new file mode 100644 index 0000000..252e9ab --- /dev/null +++ b/test/addMultipleFileShortcuts.py @@ -0,0 +1,12 @@ +from context import service + +drive_service = service.DriveService('.\credentials.json') +drive_service.auth() + +fileURLs = open('fileURLs.txt') + +for url in fileURLs: + match = drive_service.getIdFromUrl(url) + if match: + shortcut = drive_service.add_file_shortcut(file_id = match[0], folder_id = '') + print(shortcut)