Google 照片 api 添加照片不起作用,上传似乎可以

2023-12-24

尝试使用 Google Apps 脚本和 Google Photos API 将照片添加到 Google Photos。上传似乎有效/返回令牌,但随后将照片添加到库失败。该过程包含两个步骤: 1. 按照说明上传照片数据here https://developers.google.com/photos/library/guides/upload-media,然后 2. 按照说明将照片添加到照片库here https://developers.google.com/photos/library/reference/rest/v1/mediaItems/batchCreate.

第 1 步对我有用,因为我获得了上传令牌,但是带有下面源代码的第 2 步会抛出错误,但我的调用有它需要的一个媒体项。

{
  "error": {
    "code": 400,
    "message": "Request must have at least one newMediaItem.",
    "status": "INVALID_ARGUMENT"
  }
}

我的代码在下面的上传步骤之后。我尝试对请求正文进行字符串化,并将其传递给有效负载而不是正文,但没有任何效果。由于错误看起来足够具体,我感觉我只是忽略了一件小事,但是什么???谁有一段可用的代码,最好是在应用程序脚本中,我可以看一下?

    requestHeader = {
      "authorization": "Bearer " + photos.getAccessToken(),
      "Content-Type": "application/json"
    }

    var requestBody = {
      "newMediaItems": [
        {
          "description": "Photo description",
          "simpleMediaItem": {
            "fileName": fileName,
            "uploadToken": uploadToken
          }
        }
      ]
    }

    var options = {
      "muteHttpExceptions": true,
      "method" : "post",
      "headers": requestHeader,
      "body" : requestBody
    };


      var response = UrlFetchApp.fetch("https://photoslibrary.googleapis.com/v1/mediaItems:batchCreate", options);

      Logger.log("raw: " + response);

  • 您想要使用 Photo API 和 Google Apps 脚本将图像文件添加到相册中。
  • 您已在 API 控制台启用 Google Photo API。并且yout访问令牌可用于使用mediaItems.batchCreate方法。

如果我的理解是正确的,这个答案怎么样?请将此视为几个可能答案之一。

Usage:

1. 将 Cloud Platform 项目链接到 Google Apps 脚本项目:

关于这一点,你可以看到详细流程here https://gist.github.com/tanaikech/e945c10917fac34a9d5d58cad768832c.

2. 添加范围:

在这种情况下,请添加范围https://www.googleapis.com/auth/photoslibrary到清单文件(appsscript.json).

虽然我认为从你的问题来看,上述步骤 1 和 2 已经完成,但我添加了它们,因为我认为这可能对其他用户有用。

3. 示例脚本:

在你的脚本中,我看不到细节uploadToken。但在你的问题中,我可以确认你已经检索到了uploadToken。因此,当您想使用脚本进行检索时uploadToken,请更换uploadToken给你的。作为脚本的修改点, 1. 包含专辑 ID。 2.没有bodyUrlFetchApp 的属性。 3.请使用JSON.stringify()到有效负载。

function getUplaodToken_(imagefileId) {
  var headers = {
    "Authorization": "Bearer " + ScriptApp.getOAuthToken(),
    "X-Goog-Upload-File-Name": "sampleFilename",
    "X-Goog-Upload-Protocol": "raw",
  };
  var options = {
    method: "post",
    headers: headers,
    contentType: "application/octet-stream",
    payload: DriveApp.getFileById(imagefileId).getBlob()
  };
  var res = UrlFetchApp.fetch("https://photoslibrary.googleapis.com/v1/uploads", options);
  return res.getContentText()
}

// Please run this.
function myFunction() {
  var imagefileId = "###";  // Please set the file ID of the image file.
  var albumId = "###";  // Please set the album ID.
  var uploadToken = getUplaodToken_(imagefileId);

  var requestHeader = {Authorization: "Bearer " + ScriptApp.getOAuthToken()};
  var requestBody = {
    "albumId": albumId,
    "newMediaItems": [{
      "description": "Photo description",
      "simpleMediaItem": {
      "fileName": "sampleName",
      "uploadToken": uploadToken
    }}]
  };
  var options = {
    "muteHttpExceptions": true,
    "method" : "post",
    "headers": requestHeader,
    "contentType": "application/json",
    "payload" : JSON.stringify(requestBody)
  };
  var response = UrlFetchApp.fetch("https://photoslibrary.googleapis.com/v1/mediaItems:batchCreate", options);
  Logger.log(response);
}
  • 在此脚本中,假设图像文件放置在 Google Drive 中。

Note:

  • 如果错误为No permission to add media items to this album.发生时,请按照脚本创建相册。官方文档是这样说的。

    媒体项目只能在您的应用创建的相册中创建。

    • 在这种情况下,请通过以下脚本创建新相册,并检索相册 ID。

      function createNewAlbum() {
        var options = {
          headers: {Authorization: "Bearer " + ScriptApp.getOAuthToken()},
          payload: JSON.stringify({album: {title: "sample title"}}),
          contentType: "application/json",
          method: "post"
        };
        var res = UrlFetchApp.fetch("https://photoslibrary.googleapis.com/v1/albums", options);
        Logger.log(res);
      }
      

参考:

  • 类 UrlFetchApp https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app
  • 上传媒体 https://developers.google.com/photos/library/guides/upload-media
  • 创建媒体项目 https://developers.google.com/photos/library/guides/upload-media#creating-media-item
  • 方法:mediaItems.batchCreate https://developers.google.com/photos/library/reference/rest/v1/mediaItems/batchCreate

如果我误解了你的问题并且这不是你想要的方向,我深表歉意。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google 照片 api 添加照片不起作用,上传似乎可以 的相关文章

  • 获取 Google Apps 脚本中新创建的文件夹的 ID

    作为 Google Apps 脚本项目的一部分 我尝试将活动电子表格和几个上传的文件移动到在共享目录中创建的新文件夹中 我已经能够使用以下命令创建新文件夹 DriveApp getFolderById parentFolder create
  • 重命名带有“完整工作表”图表的工作表会导致电子表格重新加载

    Google 表格允许将图表移动到自己的表格中 不过 谷歌脚本似乎无法重命名这些工作表 而不会使电子表格崩溃并强制其重新加载 要明白我的意思 请尝试以下操作 1 创建新的电子表格并在其中放入一些数据 2 使用数据创建任何类型的图表 3 编辑
  • 向文档添加动态页眉/页脚

    我想知道是否有一种方法可以向文档添加动态页眉或页脚 即在页脚中添加每个页面都不同的 页面标题 据我所知 编辑内置页眉或页脚将反映在每个页面上 我想知道是否有人想到了一种解决方法 通过访问页面上的第一行 最后一行并在那里插入文本来 强制 它
  • 根据表单提交创建名称的新工作表

    在 Google Sheets 中 我有一个脚本 用于为提交的每个 Google 表单创建一个新工作表 它应该创建一个新工作表 其名称基于最后一列 G 列 不是表单提交的列 然后 它从最后一行和标题行获取信息并将其复制到创建的工作表的前两行
  • Google Apps 脚本中 $.ajax() 的服务器端等效项是什么?

    我想在 Google App 脚本中从服务器端代码执行 HTTP 请求Authorization标头 是否有用于发送 HTTP 请求的 App Script API Google Apps 脚本中的这段代码相当于什么 var api URL
  • 在 userCodeAppPanel 中看不到我的 javascript 代码

    这是来自 Google 电子表格中包含的脚本的代码 唯一的其他代码是onOpen它创建菜单和showDialog 功能 function showDialog userInterface HtmlService createHtmlOutp
  • Google 文档有内容控制吗?

    我对 Google 文档和内容控制有疑问 如果有的话 我们有一个系统 允许用户设计带有内容控件 rtf 文本 组合框等 的 MS Word 文档 并为控件分配一个 ID 以便我们的系统可以提取 ID 并注册答案 然后数据被保存在数据库中 什
  • 根据日期自动对数据进行排序

    我正在尝试使我的电子表格根据日期自动对数据进行排序 我附上了我正在使用的电子表格的照片 您会注意到 G 列中有一个工作日公式 目前 一旦我更新了配药日期 重新订购日期就会根据公式进行更新 基于安排的工作日 然后我对 G 列使用 SORT R
  • 如何让 Google Apps 脚本进行 SHA-256 加密?

    我需要使用文本输入 1 轮 十六进制输出 SHA 256 加密来加密字符串 这应该是一个长度为 64 的字符串 我在 Google Apps 脚本文档中尝试过的每个 SHA 256 加密模块都会返回一组数字 例如 function SHA2
  • 选择列的最后一个值

    我有一个电子表格 G 列中有一些值 有些单元格之间是空的 我需要将该列中的最后一个值获取到另一个单元格中 就像是 LAST G2 G9999 除了那个LAST不是一个函数 类似的答案卡里加里的回答 https stackoverflow c
  • AdminDirectory.Members.list 授权错误

    我正在尝试使用 Admin SDK 并尝试在 Google 电子表格中列出群组成员 这是我想出的代码 function recordGroupsMembers var ss SpreadsheetApp getActiveSpreadshe
  • 我正在尝试将变量从 Google 脚本传递到 HtmlOutputFromFile

    我正在尝试创建一个带有下拉列表的输入框 其中该列表基于从电子表格中提取的二维数组 到目前为止 我的研究告诉我 如果我将 HtmlService createHtmlOutputFromFile 存储在一个变量中 我就可以 设置该变量的属性
  • 根据条件格式化货币

    Google Apps 脚本新手 但有一些 VBA 编码经验 我希望能够根据不同的单元格输入决定单元格的数字格式 eg Col A 客户名称 验证范围 B 栏 货币类型 英镑 美元 欧元 经过验证的列表 Col C 费用 100 用户免费类
  • 如何下载以前保存的 Google Apps 脚本修订版本?

    我仍在尝试从中恢复不知何故 丢失 了 Google Apps 脚本 https stackoverflow com questions 33697789 当我创建脚本的副本以将代码分叉到另一个项目时 我的想法是尝试通过驱动器 API 下载
  • 使用 Gmail Apps 脚本以 HTML 和普通格式发送电子邮件

    我正在使用 Google Apps 脚本为 Gmail 编写一个自动回复机器人 http script google com http script google com 每次我使用GmailThread s Reply https dev
  • 如果您有多个表单向单个电子表格发送响应,Google 如何知道提交表单时要执行哪个 onsubmit 触发器

    我需要有人澄清 据我了解 多个表单可以将其回复发送到新 Google 表格中的单个电子表格 因此 我创建了两个 Google 表单 并让他们都将回复发送到新的 Google 电子表格 然后我在电子表格 而不是表单 中创建了两个脚本 每个脚本
  • 无法从新版 Google 相册应用中同时选择照片和视频

    Google 相册更新后 我无法同时选择视频和照片 如果我使用单个 视频 或 图像 意图 它会像平常一样工作 在视频 照片意图中 它忽略第二个参数 如果第一个是视频 它将是视频意图 如果它是照片 您将建议选择照片 Intent intent
  • 将 html 转换为 pdf 时防止表格单元格跨页破坏

    使用 Google Apps 脚本 我有一个 html 模板 我填写该模板 然后以 pdf 形式发送 通过传真和 或电子邮件 该模板包括一个带有问题 答案的两列表格 如果行数足够多 表格会在pdf中跨页分页 并且分页符通常发生在单元格的中间
  • ReferenceError:未定义 ConferenceDataService

    我正在尝试开发像 Zoom 会议这样的谷歌日历插件 在 appsscript json 文件中 有以下代码 calendar conferenceSolution onCreateFunction createConference id 1
  • 迭代数组时,如何在 Google 文档的 Google Apps 脚本中附加项目符号和子项目符号?

    我有一份与会者名单 我想列出每一个 并在其后面添加两个要点 每个要点都有一个子项目符号 我尝试了以下代码 但它列出了数组的元素 然后在末尾写入所有项目符号 for i 0 i lt attendees length i body inser

随机推荐

  • GIT-SVN克隆命令执行没有错误,但本地master分支丢失

    我正在尝试使用 GIT SVN 但在启动时遇到问题 我可以克隆 svn 存储库 或使用 git svn init 然后使用 git svn fetch 不会出现任何错误 但在命令停止处理后 git 存储库为空 并且没有本地主分支 我的 sv
  • 某些客户端的 HTTP 标头的字符被随机替换

    正在进行网络流量和日志分析 但有很多从客户端传递的格式错误的标头 这些字符被转调或替换为 x 有谁知道它们来自哪里或为什么 这是某种安全尝试 还是更邪恶的行为 例子 xroxy connection Keep Alive cneoction
  • 有人在 Solaris 10x86 上安装了 Rails 3

    我想要一种在未连接到互联网的 Solaris 10 x86 服务器上安装 Rails 3 的简单方法 我可以下载文件并刻录到 DVD 或记忆棒并以这种方式安装 有些软件包是最好的 因为并不真正期待从源代码编译 有没有人做过这个或看过任何有关
  • 实体框架代码优先迁移和 Firebird

    我正在尝试在 Firebird 2 5 数据库上启用迁移 我正在使用 VS2015 ADO 驱动程序和实体提供程序已安装并正常工作 我对数据库进行了逆向工程 进行了必要的更改以使其正常工作 我可以在包管理器控制台上执行启用迁移 并添加迁移
  • 将 vCard 数据直接添加到系统地址簿

    我正在设计一个QR码阅读器 它需要检测并导入vCard格式 vcf 的联系人卡片 有没有办法直接将名片数据添加到系统地址簿中 或者我需要自己解析vCard并单独添加每个字段 如果您在 iOS 5 或更高版本上运行 以下代码应该可以解决问题
  • PySpark:搜索文本和子集数据框中的子字符串

    我是全新的pyspark并想翻译我现有的pandas python代码到PySpark 我想子集我的dataframe这样只有包含我要查找的特定关键字的行 original problem 字段被返回 下面是我在 PySpark 中尝试的
  • 是否可以使用一个 Set-Cookie 设置多个 cookie?

    一个HTTP Set Cookie指令只能保存一个cookie 对吗 我的意思是 一个单name value pair Netscape 的原始 cookie 规范 参见这个缓存版本 http web archive org web 200
  • 如何在Ubuntu 15.10中安装最新的JMeter?

    当我尝试使用 apt get install JMeter 在 Ubuntu 15 10 中安装 Apache JMeter 时 它会安装旧版本 2 11 但是 我尝试下载最新的 JMeter 3 0 版本 并在尝试运行时jmeter ja
  • 返回延迟承诺对象并解决它

    我有一个形式的函数 get members function var group id gid val if this val group id return var deferr Deferred get url done functio
  • 模板多态不起作用?

    我正在构建一个小型模板层次结构并尝试利用类多态性 下面是一些示例代码 无法编译 来演示它 template
  • SwiftUI 如何调整背景颜色的亮度,而不是所有子视图

    如何使亮度只影响视图的背景颜色而不影响其子视图 我希望文本保持白色 但背景变暗 这段代码 struct ListCell View let brightness Double var body some View VStack HStack
  • Python 中的自定义“with open()”语句:生成器没有产生错误

    我有一个文件类 您可以从中解析数据 写入数据等 我想从任何应用程序中使用它 如下所示 f MyFileClass init method puts a lot of default data in object with f open as
  • Angular2 - 在动态添加的 HTML 中捕捉/订阅(点击)事件

    我正在尝试注入一个包含 click 事件到 Angular2 模板中 加载 DOM 后很久 就会从后端动态检索字符串 Angular 无法识别注入的内容也就不足为奇了 click event 示例模板 div div 后端给出的示例字符串
  • JavaFX 模块 javafx.graphics

    在修复了 robots awt 的需求问题后 我现在在运行应用程序时遇到了另一个问题 应用程序构建没有任何问题 堆栈跟踪 Exception in Application constructor Exception in thread ma
  • 检测开始和结束标签的奇怪 TagHandler 行为

    我正在尝试使用 TextView 显示带有自定义标签的字符串文本 字符串
  • 如何在 PySpark 中获得不同的字典 RDD?

    我有一个字典的 RDD 我想获得一个仅包含不同元素的 RDD 但是 当我尝试打电话时 rdd distinct PySpark 给我以下错误 TypeError unhashable type dict at org apache spar
  • CefSharp 在任何文档加载/处理之前注入 Javascript

    对于我正在从事的项目 我需要在任何网页文档处理开始之前注入 JavaScript 这可以通过 WebBrowser 组件轻松实现 但我在使用 CefSharp 时遇到困难 这是问题的简化 网页需要一个 InjectedObject 才能发挥
  • Delphi 2009类/组件读/写文件权限

    有没有人有一组类 组件可以与 Delphi 2009 Unicode 一起使用来读写 NTFS 文件权限 有一个叫做 NTSet 的东西 但他们在大约 3 年前在 Delphi 2006 停止了开发 还有其他接盘者吗 谢谢 马克 JCL h
  • animateTransform 不适用于变换比例

    我正在尝试让 moon svg 组遵循一条路径并应用定时变换 我似乎无法让 animateTransform 在这种情况下工作 当我设置 animateMotion 时 它会导致
  • Google 照片 api 添加照片不起作用,上传似乎可以

    尝试使用 Google Apps 脚本和 Google Photos API 将照片添加到 Google Photos 上传似乎有效 返回令牌 但随后将照片添加到库失败 该过程包含两个步骤 1 按照说明上传照片数据here https de