Google 驱动器 API:获取已上传视频的可公开共享 link

Google drive API: get the shareable publicly link of a video uploaded

我正在使用 pydrive 库来获取我上传到共享 google 驱动器文件夹中的视频的可共享 link,但我得到的是下载 link .

这是我的部分代码:

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.
  • 等文件夹的共享 link

现阶段,Drive API 似乎不能直接return 共享link。所以在这种情况下,我认为可以使用 drive.ListFile({'q': "title='" + folderName + "' and mimeType='application/vnd.google-apps.folder' and trashed=false"}).GetList().

检索到的文件夹 ID 创建共享 link

当你的脚本修改后,变成如下。

修改后的脚本:

从:
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 公开共享时,共享的 link 为 returned。

注:

  • 例如,如果要检索 Google Docs 文件(Document、Spreadsheet、Slides 等)以外的文件的共享 link,可以使用 https://drive.google.com/file/d/{fileId}/view?usp=sharing.

参考:

已添加:

  • 您想从特定文件夹中的上传文件中检索共享 link(查看 link)。

这种情况下,我觉得可以用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'] 使用。