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

无法通过Google Photos API将已有Media Item添加至新相册

解决Google Photos API添加现有媒体项到相册的"无效上传令牌"错误

问题原因

你错误使用了API接口:mediaItems.batchCreate是用于上传新媒体项并同步添加到相册的接口,它要求的uploadToken是上传文件时生成的临时令牌,而非已存在的媒体项ID。要实现将现有媒体项添加到新相册的需求,应该使用专门的albums.batchAddMediaItems接口。

修正后的代码

import csv
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build

# Path to your '.json' file for the new account
CREDENTIALS_FILE_PATH = './credentials.json'

SCOPES = ['https://www.googleapis.com/auth/photoslibrary']

def create_album(service, album_title):
    album_request_body = {
        'album': {'title': album_title}
    }
    created_album = service.albums().create(body=album_request_body).execute()
    return created_album['id']

def add_photo_to_album(service, photo_id, album_id):
    try:
        # 使用正确的接口添加现有媒体项到相册
        service.albums().batchAddMediaItems(
            albumId=album_id,
            body={'mediaItemIds': [photo_id]}
        ).execute()
        print(f"成功将照片ID {photo_id} 添加到相册ID {album_id}")
    except Exception as e:
        print(f"添加照片ID {photo_id} 到相册ID {album_id} 失败: {e}")

def main():
    # 认证流程
    flow = InstalledAppFlow.from_client_secrets_file(CREDENTIALS_FILE_PATH, SCOPES)
    creds = flow.run_local_server(port=0)
    service = build('photoslibrary', 'v1', credentials=creds, static_discovery=False)

    # 避免重复创建相册
    created_albums = {}

    with open('photos.csv', 'r', newline='') as file:
        reader = csv.reader(file)
        next(reader)  # 跳过表头

        for album_name, _, photo_name, photo_id in reader:
            temp_album_name = f"{album_name}-TEMP"

            if temp_album_name not in created_albums:
                created_albums[temp_album_name] = create_album(service, temp_album_name)

            add_photo_to_album(service, photo_id, created_albums[temp_album_name])

if __name__ == '__main__':
    main()

关键说明

  • albums.batchAddMediaItems接口接收两个核心参数:目标相册的albumId,以及包含要添加的媒体项ID列表的mediaItemIds。
  • 该操作不会复制媒体项的物理文件,只是在目标相册中创建指向原媒体项的引用,符合Google Photos的多相册关联逻辑。
  • 你当前使用的https://www.googleapis.com/auth/photoslibrary权限已包含修改相册的权限,无需额外申请。

内容的提问来源于stack exchange,提问作者kai-no-sekai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:18:14