我上传了许多没有EXIF数据的照片,但是他们的日期在名称中。 Google相册使用上传日期对其进行排序。我想用他们名字中的日期来修改它们。
到目前为止,我尝试使用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
}
}
}
我可以删除它们,修改原始文件并重新上传,但在此之前我想确定没有别的办法。
谢谢。
答案 0 :(得分:0)
也许您可以通过编程方式将EXIF标头写入文件?
在使用新版Google Photos API上传旧照片时,我还将寻找一种方便的方法来提供照片日期。我的照片不一定具有EXIF数据;我尝试在MacOS计算机磁盘上的一个JPEG上设置创建日期/上次修改日期,然后通过Google Photos Web界面手动将其上传,然后本地磁盘上JPEG文件的日期变为照预期,照片在Google相册中的日期。该文件没有EXIF数据,如果有,则不会包含相同的日期,因此显然Google图片网络上传者会尊重该照片的本地文件系统日期。
然后,我尝试使用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)方法具有设置此方法的任何方法。