You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 10:15:04