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

Google Photos API脚本无法获取所有指定相册元数据的排查求助

解决Google Apps Script批量获取Google Photos相册元数据不完整的问题

针对500+相册场景下仅能获取部分元数据的问题,可从以下几个方向排查并解决:

1. API调用配额与速率限制

Google Photos API存在调用配额限制,高频批量请求容易触发限流,导致部分请求失败。

  • 检查Google Cloud Console中Photos Library API的配额使用情况,确认是否超限;
  • 在API调用之间添加间隔,例如Utilities.sleep(500)(毫秒),避免短时间内发起过多请求;
  • 若配额不足,可在Cloud Console申请配额提升。

2. 相册匹配逻辑缺陷

Sheet中的相册名称与Google Photos中的实际名称可能存在大小写、空格、特殊字符差异,导致匹配失败。

  • 统一名称匹配规则,例如将两者都转为小写并去除首尾空格后再对比:album.title.toLowerCase().trim() === targetName.toLowerCase().trim();
  • 改用相册ID而非名称进行查询,完全避免名称歧义(可先批量导出所有相册ID与名称的对应关系到Sheet,再基于ID查询元数据)。

3. 未处理API分页

Google Photos API的albums.list接口默认每页返回20个相册,超过该数量的相册需要通过nextPageToken分页获取,未处理分页会直接漏掉后续相册。
优化后的分页获取逻辑示例:

function getAllAlbums() {
  let allAlbums = [];
  let pageToken = null;
  do {
    const response = PhotosLibrary.Albums.list({
      pageToken: pageToken,
      pageSize: 50 // 最大支持每页50个相册
    });
    if (response.albums) allAlbums = allAlbums.concat(response.albums);
    pageToken = response.nextPageToken;
    Utilities.sleep(500); // 间隔避免限流
  } while (pageToken);
  return allAlbums;
}

4. 权限范围不足

脚本的OAuth权限可能未覆盖所有目标相册(例如仅允许访问当前账号创建的相册,无法读取共享相册)。

  • 确认脚本的OAuth scopes包含https://www.googleapis.com/auth/photoslibrary.readonly或更全面的权限;
  • 检查所有目标相册是否为当前授权账号可访问状态(包括共享相册的权限设置)。

5. 脚本执行超时

Google Apps Script单次执行最长限制为6分钟,处理500+相册时容易超时中断。

  • 拆分任务,使用时间驱动触发器分批处理(例如每次处理100个相册);
  • 优化代码逻辑:先一次性获取所有相册数据,再与Sheet中的列表匹配,避免重复发起API请求。

完整优化脚本示例

function fetchAlbumMetadata() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  // 读取Sheet中的相册名称列表(假设第一列为名称,从第二行开始)
  const albumNameList = sheet.getRange(2, 1, sheet.getLastRow() - 1, 1).getValues().flat();
  
  // 批量获取所有相册(处理分页)
  const allAlbums = getAllAlbums();
  
  // 匹配并写入元数据到Sheet(第二列ID、第三列媒体数量、第四列创建时间)
  albumNameList.forEach((targetName, rowIndex) => {
    const matchedAlbum = allAlbums.find(album => 
      album.title.toLowerCase().trim() === targetName.toLowerCase().trim()
    );
    
    const currentRow = rowIndex + 2;
    if (matchedAlbum) {
      sheet.getRange(currentRow, 2).setValue(matchedAlbum.id);
      sheet.getRange(currentRow, 3).setValue(matchedAlbum.mediaItemsCount);
      sheet.getRange(currentRow, 4).setValue(new Date(matchedAlbum.creationTime));
    } else {
      sheet.getRange(currentRow, 2).setValue("未找到匹配相册");
    }
    Utilities.sleep(300); // 避免Sheet写入过快
  });
}

// 分页获取所有相册的辅助函数
function getAllAlbums() {
  let allAlbums = [];
  let pageToken = null;
  do {
    const response = PhotosLibrary.Albums.list({
      pageToken: pageToken,
      pageSize: 50
    });
    if (response.albums) allAlbums = allAlbums.concat(response.albums);
    pageToken = response.nextPageToken;
    Utilities.sleep(500);
  } while (pageToken);
  return allAlbums;
}

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:20:33