Google Фото: конец прекрасной эпохи

В Google есть добрая традиция закрывать полезные сервисы или ломать удобные вещи; интернет-общественность давно ждёт, когда же они, наконец, объявят о закрытии Gmail… Но Gmail пока живёт, а вот Google Фото решили сломать.

Раньше ж как было у меня, например: все фото с телефона автомагически летят в Google Фото в исходном качестве, а старый ноутбук в шкафу, пафосно называемый «сервер», регулярно бэкапит весь Google Диск (в том числе папку с Google Фото), и добавляет всю эту радость в инкрементные бэкапы. Фото не теряются, всё зарезервировано, красота и благорастворение, я ради этого даже гуглу денег давал за дополнительное место. Теперь всё, кончилась простая жизнь.

Google

Теперь Google Диск будет отдельно, а Google Фото — отдельно. И называется это «мы упростили синхронизацию». Новые фотографии в бэкап не попадут. Куда податься бедному крестьянину?

Во-первых, если уж что в Google попало, то это всегда можно из Google достать: да здравствует Takeout! Вот только Google страшно не любит, когда из него что-то достают, поэтому автоматизировать Takeout нельзя. А бэкап вручную — это всё равно, что без бэкапа вовсе. Поэтому думаем дальше…

Во-вторых, есть же Library API, через который можно тыкаться прямо в Google Фото. Начинаем тыкаться, видим грустную картину: файлы в исходном виде через API не получить, от картинки отрезается половина метаданных (например, информация о координатах места съёмки) и отдаётся отдельно в JSON.

Вывод: как посредник при бэкапах Google Фото теперь бесполезен. Ну что ж, горит дом — гори и баня! Раз такие дела, нет больше смысла платить гуглу за дополнительное место, можно грузить фотографии и видео в Google Фото со сжатием, всё равно бэкапить их теперь надо другим путём.

Кстати, а каким?

без бэкапа никуда

Отправная точка есть: тот самый бэкап директории Google Фото из Google Диска. Копируем в отдельную директорию (потому что из Диска это дело в перспективе надо удалять, чтобы место не занимало). Теперь надо сделать, чтобы туда же добавлялись новые фото, сделанные на телефон. Благо, есть Syncthing: настраиваем папку, куда камера телефона складывает фото и видео, на «только отправить», делимся ей с «сервером», на «сервере» ставим в режим «только получить», чтобы при удалении файлов из этой директории они на телефоне не удалялись. Не забываем, что Syncthing на Android любит электричество, поэтому пусть он работает только при зарядке телефона.

Теперь хорошо бы в cron поставить задачу перемещать из этой директории файлы в наш фото/видеоархив. Правда, в архиве они у нас рассортированы по директориям по годам и месяцам (это удобно, и так было в Google Диске), но это не проблема, мы ведь линуксоиды-туксоводы — бери bash и действуй! В телефоне (в отличие от Google Диска, кстати) mtime файла будет совпадать с временем создания, поэтому пишем несложный скрипт и сажаем его в cron. Одной проблемой меньше.

Правда, вторая проблема осталась: надо как-то забирать из Google Фото фотографии, накиданные родственниками и друзьями в общие альбомы. Вообще Google Фото стоит пользоваться хотя бы ради одного этого: поехали куда-то толпой, создали общий альбом, каждый туда забросил, что наснимал — времена «а кто снимал, когда на море ходили? Вася, не у тебя на фотике? когда скинешь?» прошли навсегда, и вспоминаются как страшный сон. Хорошо бы и это всё в бэкап, как было до гугловского «упрощения».

Пока, правда, новые фотографии в Диск ещё добавляются, так что пока — временно — можно поставить в cron что-то примерно такое:

1
2
3
50 23 \* \* \* /bin/cp -pnr /mnt/ext/GoogleDrive/Google\ Фото/"$(/bin/date -d "week ago" +\\%Y/\\%m)" /mnt/ext/photo/"$(/bin/date -d "week ago" +\\%Y/)"
55 23 \* \* \* /bin/cp -pnr /mnt/ext/GoogleDrive/Google\ Фото/"$(/bin/date +\\%Y/\\%m)" /mnt/ext/photo/"$(/bin/date +\\%Y/)"
10 22 \* \* 6 /bin/cp -pnr /mnt/ext/GoogleDrive/Google\ Фото/\* /mnt/ext/photo/

Фишка с “week ago” — это чтоб плавно проходить стыки месяцев и годов.

А вот что делать, когда «упрощение» вступит в силу?..

Нет, понятно, что делать: писать софтину, которая будет по REST API забирать эти файлы из Google Фото напрямую. Для этого придётся, например, форкнуть Go-библиотеку, которую Google сначала выложил, а потом убрал, но Git всё помнит, поэтому по

1
require google.golang.org/api v0.0.0-20181221000618-65a46cafb132

её можно подтянуть. Она неполноценная (например, она не поддерживает для mediaItem свойство filename, хотя для этого достаточно добавить ровно одну строчку), поэтому надо форкать (и потом, очевидно, поддерживать). Потом, имея эту библиотеку, можно слегка допилить обработку ошибок в явно заброшенном проекте, для чего его, очевидно, тоже придётся форкнуть. На всё это нужно время и вдохновение; одна надежда — что кто-то соберётся всё это сделать раньше, чем они будут у меня.

кодить может каждый

Надежда эта, правда, совсем призрачная.