我上传了许多没有EXIF数据的照片,但名字中有日期。Google Photos使用上传日期对照片进行排序。我想用他们名字里的日期来修改他们。
到目前为止,我试图使用驱动器API来更改修改日期,我可以更改它,但它没有使用。我还尝试修改imageMediaMetadata。日期,但对我来说似乎是只读的。
代码: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
}
}
}
我可以删除它们,修改原始文件并重新上传,但在此之前我想确定没有其他方法。
谢谢。
也许您可以通过编程方式将EXIF头写入文件?
我也会寻找一个方便的方式来提供照片日期时,使用新的谷歌照片API上传旧照片。我的照片不一定有EXIF数据;我试着在MacOS机器的磁盘上设置一张JPEG文件的创建/最后修改日期,然后通过Google Photos web界面手动上传,本地磁盘上JPEG文件的日期就变成了Google Photos中照片的日期,和预期的一样。该文件没有EXIF数据,如果有,它将不包含相同的日期,因此显然google照片web上传程序尊重照片的本地文件系统日期。
然后我尝试使用Charles Proxy嗅探流量,但显然web界面不使用我们外部开发人员使用的Google Photos API相同的方式—它不POST到https://photoslibrary.googleapis.com/v1/uploads或看起来如此。所以我不能逆向工程这个过程。我也看不到文件创建日期是在哪里传入的。
最好在上传POST请求中有一个HTTP头来设置这个日期。我没有看到batchCreate (https://developers.google.com/photos/library/reference/rest/v1/mediaItems/batchCreate)方法有任何方法来设置这个