无法通过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
相关产品推荐
相关产品推荐

