【问题标题】:(Python) Google Drive API: get mime type of file from id in a non-awkward way(Python)Google Drive API:以非尴尬的方式从 id 获取文件的 mime 类型
【发布时间】:2022-11-10 14:05:12
【问题描述】:

我需要下载附加到 Google 课堂提交的 Google Drive 文件。
从谷歌类“提交”我得到了一些信息不是包括 mime 类型:

{
   "driveFile":{
       "id":"10NDXAyz8gkWzkXPS[removed]",
       "title":"git bash.PNG",
       "alternateLink":"https://drive.google.com/file/d/10NDXAyz8gkWzkX[removed]/view?usp=drive_web",
       "thumbnailUrl":"https://lh3.googleusercontent.com/nf4i[removed]=s200"
   }
}

如果我理解正确,则需要 mime 类型来知道哪个是调用下载的正确方法,即。

service.files().export_media(fileId=file_id, mimeType=export_mime_type

相对

service.files().get_media(fileId=file_id))

到目前为止,我发现只有一种非常尴尬的方式来获取 mime 类型(底部的代码)。

这是问是否有使用API​​​​,一种不太尴尬的方式,我搜索但找不到它。
在我的代码中,将 ...thing 拆分为 2 个函数是有意的,尴尬之处在于必须按名称查询,然后他们检查 id。 我想知道是否有比 files.list() 更合适的“方法”来调用。
如果没有是否可以用它通过id查询。我在文档中没有找到,无论如何都尝试过,但它没有用

def get_file_from_id_name(file_id, file_name, gdrive_service):
    """it seems I can only query by name, not by id"""
    page_token = None
    while True:
        query = "name='{}'".format(file_name)
        response = gdrive_service.files().list(spaces='drive', q = query, 
            fields='nextPageToken, files({})'.format(ALL_FILE_FIELDS),
            pageToken=page_token).execute()

        for file in response.get('files', []):
            if file.get('id') == file_id:
                return file
        page_token = response.get('nextPageToken', None)
        if page_token is None:
            break

    log.info("breakpoint")
    return None

def get_mime_type_from_id_name(file_id, file_name, gdrive_service):
    file_d = get_file_from_id_name(file_id, file_name, gdrive_service)
    mime_type = file_d.get("mimeType")
    return mime_type

抱歉,问题很长,尽量简明扼要

【问题讨论】:

    标签: python google-drive-api google-classroom


    【解决方案1】:

    我已经看到,在 Python 中,您可以使用 mimetypes.guess_type 来检索文件的 mimetype。您可以查看此example,以便您有一个想法。在那种情况下是这样完成的:

    mimetype = MimeTypes().guess_type(name)[0]
    

    【讨论】:

    • 感谢您的回答,我的问题是关于从 API 本身获取确定信息,我改进了我的问题,使其明确。再次感谢。
    【解决方案2】:

    经过一些进一步没有结果的研究,似乎没有办法获得 mime 类型从 API.
    API 并未涵盖所有可用的功能和数据这一事实也支持这一推论,例如,当前缺乏对一个非常重要的功能(如 private comments)的 API 支持(目前已获批准但尚不可用)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      • 2017-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多