2

我上传了许多没有 EXIF 数据但名称中有日期的照片。谷歌相册使用上传日期对它们进行排序。我想用他们名字中的日期来修改它们。

到目前为止,我尝试使用 Drive API 更改修改日期,我可以更改它但没有使用。我也尝试修改 imageMediaMetadata.date,但它对我来说似乎是只读的。

代码:

function myFunction() {
  var files = DriveApp.getFilesByName("IMG-20150402-WA0002_1.jpg")
  while (files.hasNext()) {
    var file = files.next();
    var name = file.getName().toUpperCase();
    if (name.indexOf("-WA") > -1) {
      if (name.indexOf("IMG-20") == 0 || name.indexOf("VID-20") == 0) {
        var y = name.substr(4, 4);
        var m = name.substr(8, 2);
        var d = name.substr(10, 2);

        var file2 = Drive.Files.get(file.getId());
        file2.imageMediaMetadata.date = y+"-"+m+"-"+d+"T12:00:00.000Z";
        var file3 = Drive.Files.patch(file2, file.getId());
        Logger.log(name + " no ok " + file3.imageMediaMetadata.date);  // same as file2
      }
    }
  }

我可以删除它们,修改原始文件并重新上传,但在此之前我想确定没有其他方法。

谢谢你。

4

1 回答 1

2

也许您可以以编程方式将 EXIF 标头写入文件?

在使用新的 Google Photos API 上传旧照片时,我还会寻找一种方便的方法来提供照片日期。我的照片不一定有EXIF数据;我尝试在我的 MacOS 机器磁盘上的一个 JPEG 上设置创建/上次修改日期,然后通过 Google Photos网络界面手动上传它,本地磁盘上 JPEG 文件的日期成为 Google Photos 中照片的日期,如预期的。该文件没有 EXIF 数据,如果有,它不会包含相同的日期,因此显然谷歌照片网络上传器尊重照片的本地文件系统日期。

然后我尝试使用 Charles Proxy 来嗅探流量,但显然 Web 界面并没有像我们外部开发人员那样使用 Google Photos API——它不会发布到https://photoslibrary.googleapis.com/v1/uploads或所以它看起来。所以我无法对这个过程进行逆向工程。我也看不到文件创建日期在哪里传递。

最好在上传 POST 请求中有一个 HTTP 标头来设置此日期。我看不到具有任何设置方法的 batchCreate ( https://developers.google.com/photos/library/reference/rest/v1/mediaItems/batchCreate ) 方法。

于 2019-02-09T07:03:38.123 回答