GoogleDriveAPI开发
Google Drive 是一款 Google 提供的在线文件存储与共享服务。
2. API 使用方式
Section titled “2. API 使用方式”- 创建文件
from googleapiclient.http import MediaFileUpload
def create_file(self, name=None, file_path=None, file_metadata=None, fields=None): """ 创建文件 """ media = MediaFileUpload(file_path, mimetype='image/jpeg', resumable=True) file = self.service.files().create(body=file_metadata, media_body=media, fields=fields).execute() return file- 创建文件夹
def create_dir(self, name=None, fields=None): """ 创建文件夹 """ file_metadata = { 'name': name, 'mimeType': 'application/vnd.google-apps.folder' } file = self.service.files().create(body=file_metadata, fields=fields).execute() return file- 复制文件
def copy_file(self, file_id=None, fields=None): """ 复制文件 """ file = self.service.files().copy(fileId=file_id, fields=fields).execute() return file- 删除文件
def remove_file(self, file_id=None, fields=None): """ 删除文件(注意:此操作是彻底删除,而非移动到回收站) """ file = self.service.files().delete(fileId=file_id, fields=fields).execute() return file- 获取文件
def get_file(self, file_id=None, fields=None): """ 获取文件元数据 """ file = self.service.files().get(fileId=file_id, fields=fields).execute() return file- 查询文件
def search_file(self, query=None, fields=None): """ 查询文件,fields 示例: "files(parents,id,name)" """ files = [] page_token = None while True: response = self.service.files().list(q=query, fields=fields, pageToken=page_token).execute() for file in response.get('files', []): print(f'Found file: {file.get("name")}, {file.get("id")}, {file.get("parents")}') files.extend(response.get('files', [])) page_token = response.get('nextPageToken', None) if page_token is None: break return files- 下载文件
import urllib.request
slide_url = f"https://docs.google.com/presentation/d/{file_id}"url = f"https://docs.google.com/presentation/d/{file_id}/export/pptx?access_token={self.credentials.token}"urllib.request.urlretrieve(url, save_path)
return slide_url- 更新文件
def update_file(self, file_id=None, file_metadata=None, fields=None): """ 更新文件元数据 """ file = self.service.files().update(fileId=file_id, body=file_metadata, fields=fields).execute() return file- 移动文件
def move_file(self, file_id, folder_id, old_folder_id, fields=None): """ 移动文件(实质是通过修改父级目录实现) """ file = self.service.files().update( fileId=file_id, addParents=folder_id, removeParents=old_folder_id, fields=fields ).execute() return file.get('id', None), file.get('parents', None)- 导出文件
import iofrom googleapiclient.http import MediaIoBaseDownload
def export_file(self, file_id, mime_type): """ 导出文档内容 """ request = self.service.files().export_media(fileId=file_id, mimeType=mime_type) file = io.BytesIO() downloader = MediaIoBaseDownload(file, request) done = False while done is False: status, done = downloader.next_chunk() print(f'Download {int(status.progress() * 100)}%.')
return file.getvalue()- 返回文件的特定字段:可以通过
fields参数指定返回字段。- 默认返回
id,name,mimeType。 - 语法:
,代表分割选择;/表示嵌套字段;*代表通配符;()代表一组子选择器。具体可 参考官方字段参数文档。
- 默认返回
- 接口仅存在频率限制,详细可 参考频率控制官方说明。