如何在Google Colab中正确连接Google Photos API?
在Google Colab中连接Google Photos API的正确步骤
一、提前准备OAuth凭据
- 确认Google Cloud项目已启用Google Photos Library API
- 生成OAuth 2.0客户端ID(类型选「桌面应用」,不要选Web应用),下载
client_secret.json到本地 - 在Colab左侧文件面板点击「上传」,将
client_secret.json上传到当前环境
二、安装依赖库
Colab默认没有Photos API的Python客户端,先执行安装命令:
pip install google-auth google-auth-oauthlib google-auth-httplib2 google-api-python-client
三、手动实现认证流程(规避默认方法的权限问题)
默认的authenticate()是针对Google Drive的,必须手动指定Photos的权限作用域。运行以下代码:
from google_auth_oauthlib.flow import InstalledAppFlow from googleapiclient.discovery import build # 定义Photos API所需的权限作用域 SCOPES = [ 'https://www.googleapis.com/auth/photoslibrary', 'https://www.googleapis.com/auth/photoslibrary.readonly', 'https://www.googleapis.com/auth/photoslibrary.appendonly' ] # 加载凭据并启动认证流程 flow = InstalledAppFlow.from_client_secrets_file('client_secret.json', SCOPES) # 用port=0自动选择可用端口,解决服务器启动失败问题 creds = flow.run_local_server(port=0) # 构建Photos API服务实例 service = build('photoslibrary', 'v1', credentials=creds)
执行后会弹出授权链接,点击链接完成权限申请(此时窗口会显示Google Photos相关权限),复制授权码粘贴回Colab输入框即可完成认证。
四、验证连接有效性
可调用API获取相册列表测试:
results = service.albums().list(pageSize=10).execute() items = results.get('albums', []) if not items: print('未找到相册') else: print('相册列表:') for item in items: print(f"{item['title']} ({item['id']})")
五、大视频的下载与上传处理
- 下载:通过API获取视频的
baseUrl,拼接=dv参数(表示下载原视频),用requests库下载到Colab本地 - 压缩:Colab已预装ffmpeg,直接执行压缩命令,示例:
ffmpeg -i input_video.mp4 -vcodec libx265 -crf 28 output_compressed.mp4
- 上传:调用Photos API的
mediaItems.batchCreate方法,先将压缩后的视频上传到Google Photos临时存储空间,再创建正式媒体项
常见问题排查
- 作用域无效:检查SCOPES参数是否正确,确认Google Cloud项目已启用Photos API
- 服务器启动失败:使用
run_local_server(port=0)自动分配端口,避免端口占用 - 权限不足:认证时务必勾选所有需要的Photos权限(读取、写入)
内容的提问来源于stack exchange,提问作者SMUsamaShah
相关产品推荐
相关产品推荐

