Google云端硬盘API:获取上传的视频的可共享的公开链接 修改后的脚本:注意:参考:修改后的脚本:

问题描述

我正在使用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']