问题描述
我正在使用pydrive库来获取我在共享的Google驱动器文件夹中上传的视频的可共享链接,但我却获得了下载链接。
这是我的代码的一部分:
folderName = 'Videos' # Please set the folder name.
folders = drive.ListFile({'q': "title='" + folderName + "' and mimeType='application/vnd.google-apps.folder' and trashed=false"}).GetList()
for folder in folders:
if folder['title'] == folderName:
folderId = folder['id']
import glob,os
os.chdir("C:/upload_recording/videos")
for file in glob.glob("*.mp4"):
with open(file,"r") as f:
fn = os.path.basename(f.name)
file_drive = drive.CreateFile({'title':fn,'parents': [{'id': folderId}],'copyRequiresWriterPermission': True,'writersCanShare': False})
file_drive.Upload()
file_drive.InsertPermission({
'type': 'anyone','value': 'anyone','role': 'reader'})
files = drive.ListFile({'q': "title='" + folderName + "' and mimeType='application/vnd.google-apps.folder' and trashed=false"}).GetList()
for file in files:
keys = file.keys()
if file['shared']:
link = 'https://drive.google.com/file/d/' + file['id'] + '/view?usp=sharing'
else:
link = 'No Link Available. Check your sharing settings.'
name = file['id']
print('name: {} link: {}'.format(name,link))
解决方法
我相信您的目标如下。
- 您要检索文件夹
https://drive.google.com/drive/folders/{folderId}?usp=sharing
之类的共享链接。
在当前阶段,Drive API似乎无法直接返回共享链接。因此,在这种情况下,我认为可以使用通过drive.ListFile({'q': "title='" + folderName + "' and mimeType='application/vnd.google-apps.folder' and trashed=false"}).GetList()
检索的文件夹ID来创建共享链接。
修改脚本后,它如下所示。
修改后的脚本:
从:for file in files:
keys = file.keys()
if 'webContentLink' in keys:
link = file['webContentLink']
elif 'webViewLink' in keys:
link = file['webViewLink']
else:
link = 'No Link Available. Check your sharing settings.'
if 'name' in keys:
name = file['name']
else:
name = file['id']
至:
for file in files:
keys = file.keys()
if file['shared']:
link = 'https://drive.google.com/drive/folders/' + file['id'] + '?usp=sharing'
elif 'webContentLink' in keys:
link = file['webContentLink']
elif 'webViewLink' in keys:
link = file['webViewLink']
else:
link = 'No Link Available. Check your sharing settings.'
if 'name' in keys:
name = file['name']
else:
name = file['id']
- 在此示例修改中,当文件夹ID公开共享时,将返回共享链接。
注意:
- 例如,如果要检索除Google Docs文件(文档,电子表格,幻灯片等)以外的文件的共享链接,则可以使用
https://drive.google.com/file/d/{fileId}/view?usp=sharing
。
参考:
已添加:
- 您要从特定文件夹中上传的文件中检索共享链接(查看链接)。
在这种情况下,我认为可以使用alternateLink
。但是在更新的脚本中,从{'q': "title='" + folderName + "' and mimeType='application/vnd.google-apps.folder' and trashed=false"}
中检索了folderName
的文件夹。因此,还需要修改搜索查询。
修改后的脚本:
folderId = '###' # Please set the folder ID.
files = drive.ListFile({"q": "'" + folderId + "' in parents and mimeType!='application/vnd.google-apps.folder'"}).GetList()
for file in files:
keys = file.keys()
if file['shared'] and 'alternateLink' in keys:
link = file['alternateLink']
else:
link = 'No Link Available. Check your sharing settings.'
name = file['id']
print('name: {} link: {}'.format(name,link))
- 在您的脚本中,我认为可以从
folderId
中使用folderId = folder['id']
。