¿Cómo sincronizo Google Photos desde la Terminal en Ubuntu?

Lejos de sumirse en la inactividad, Juan Perón aprovechó el ostracismo del Exilio para abocarse al estudio y a una intensa actividad intelectual y autoral. Entre las exposiciones clásicas de este período se encuentra cómo sincronizar contenidos de Google Fotos en Ubuntu.

(...)
¡Trabajadores!

La ignominia ha caido sobre la Patria, más eso no puede amilanarnos. Una férrea organización y una claridad meridiana en el objetivo, que ha de ser volver para ser mejores, nos centra en un destino que podemos calificar como inexorable.

Para llevarlo a cabo, indudablemente que la organización y la unidad de mando son los principios que nos provee el arte, y que hemos de practicar. Esto redundará en la necesaria economía de fuerzas y a la óptima aplicación de los medios de los que disponemos en el tiempo y el lugar donde se decida la acción.
Un Conductor no puede dejar comprender estos principios fundantes en la medida que jamás dispondrá de los recursos suficientes para abarcar todo. Este ha de saber que sólo podrá hacer uso apenas de los medios necesario para poder accionar en un escenario preconcebido, y eso en el mejor de los casos. Si por imprevisión no ha imaginado un suceso, la resolución del mismo se tornará en sobremanera dificultosa. Es por tal motivo que el estudio y la previsión son ejes fundantes de su accionar político.

Pues bien señores, la telemática ofrece los mismos principios, y por ello podremos estudiarlas como un válido ejercicio de Conducción. Veamos. Un sistema computado carece de los recursos para poder hacer todo, y debemos por tanto preveer e instrumentar para hacer frente a los imponderables de consumo de cómputo más conocidos. La práctica de los teléfonos llamados inteligentes era conectarlos a una PC para proceder a la transferencia de contenidos.

Pero una mala evolución ha llevado a emplear conexión inalámbrica para conectarnos ya no a un sistema de almacenamiento local, sino a un hardware remoto de alquiler, algo quienes los vivos no han temido en calificar como una esotérica "nube". No dejan de ser otra cosa que una computadora ajena sobre la que específicamente no tenemos de control, y es en ella donde cargamos nuestros preciados datos. Sólo un iluso plantearía que ello es seguro. Desde el Justicialismo sabemos que en el absoluto caso de tener que hacerlo, siempre hemos contar con un respaldo local de dichos datos en nuestro propio sistema y en medios de almacenamiento sobre los que ejerzamos dominio y control total.

Este es una de una de las más someras acciones que podremos contemplar para Combatir al Capital. Otro proceder será sobrecargar dichos sistemas ajenos de alquiler con si los datos que tenemos, molestando y denegando el servicio a todos. Multiplicada esta acción por millones dejará de convirtirnos en una patada de enano, sino que permitirá asestar un mortífero golpe a la sinarquñia y a un sistema imperialista e injusto.

Uno de los servicios extendidos en la nube es Google Fotos. El mismo nos permite almacenar y organizar las fotografías y videos que subamos desde nuestros dispositivos a los servidores del omnímodo Google.

Pues bien, cualquiera sea el camino que deseemos, para todos ellos podremos utilizar gphoto-sync. Se trata de una herramienta para la línea de comandos escrita en Python y capaz de ejecutarse localmente en nuestro sistema GNU con Linux. Su propósito es respaldar los contenidos y álbums de Google Photos en nuestro/s sistema/s empleando la API repectiva de Google.  Una vez configurada, puede ejecutarse de forma regular para asegurar que todas nuestras fotografías y videos almacenados remotamente allí también se almacenen localmente en nuestro propio disco.
Instalar gphotos-sync
Tenemos dos métodos para instalar gphotos-sync: utilizando PIP3 o por medio  Snap.

El método que os recomiendo es utilizando Pip3. Para ello abrimos una terminal con Ctrl+Alt+T e ingresamos los siguientes Comandos de Organización:

sudo apt install python3-pip -y ;
pip3 install gphotos-sync ;
mkdir ~/.config/gphotos-sync/
echo "export PATH=\"\$PATH:\$HOME/.local/bin\"" >> ~/.bashrc ;
. ~/.bashrc

Otra posibilidad es instalar gphotos-sync gracias a su paquete Snap. En el caso de que anhelemos este proceder en nuestro sistema, abrimos una terminal e ingresamos el siguiente Comando de Organización:

sudo snap install gphotos-sync

Configuración
Una vez instalada la aplicación, habremos de configurar varias cosas, lo cual puede parecer un poco complicado de hacer. Debemos llevar a cabo los siguientes pasos:

Paso 1. Creamos un nuevo Proyecto en Google Cloud usando el Administrador de Recursos de la Nube. Con nuestro navegador web nos dirijimos a https://console.cloud.google.com/cloud-resource-manager y creamos un nuevo proyecto haciendo clic en Crear un Proyecto.
Tras indicarle un nombre (por ejemplo, "sincronizador google photos" o algo similar), podremos presionar Crear.

Paso 2. Nos dirijimos a https://console.cloud.google.com/apis/library?project=_, preionamos en Seleccionar un Proyect.

Acto seguido buscamos la Librería "Photos Library API" y hacemos clic sobre ella.
Se nos mostrará la web de la API Librería de Fotos. Para habilitarla para nuestro proyecto de sincronizador de Google Photos, debemos hacer clic en Habilitar.

 y la activamos para el proyecto que acabamos de crear.

Paso 3. Con nuestro navegador nos dirijimos a https://console.cloud.google.com/, y nos aseguramos que tenemos seleccionado el proyecto correcto desde el menú desplegable superior. Luego hacemos clic en APIs y Servicios en la barra lateral, y finalmente hacemos clic en Credenciales.
Creamos una ID de Cliente OAuth haciendo clic en +Crear Credenciales / ID de Cliente OAuth.

Cuando se nos solicite la Pantalla de Consentimiento de OAuth debemos elegir el tipo de permiso. El permiso normal es Externo. elegir el tipo de aplicación, debemos indicar "Otra".
El sistema nos indicará nuestra ID de clientes y nuestro secreto de cliente ("token").

Paso 4. Una vez que nuestro ID de Cliente de Auth 2.0 para el proyecto esté creado, lo descargarenos a nuestro(s) sistema(s). Este tendrá la forma de un fichero de extensión .json. Para bajarlo hacemos clic en el ícono de Descarga correspondiente que aparecerá en el apartado Credenciales.

Naturalmente en el cuadro de diálogo de descarga de nuestro navegador, escogemos Guardar archivo. Normalmente el mismo irá a parar a nuestra carpeta ~/Descargas/.


Tengamos presente que dicho archivo de extensión .json tendrá realmente un nombre alfanumérico muy largo, pero para que funcione correctamente debemos renombrarlo a client_secret.json. En Ubuntu podremos renombrar el archivo seleccionandolo y presionando F2.

Una vez que lo hayamos renombrado como client_secret.json debemos colocarlo en el directorio de configuración local que corresponda a nuestro método de instalación: si instalamos gphotos-sync por medio de Pip3 habremos de copiar el archivo client_secret.json en el directorio ~/.config/gphotos-sync/. En cambio, si anteriormente optamos por instalar gphotos-sync por medio de  Snap, el directorio que debemos crear será ~/snap/gphotos-sync/current/.config/gphotos-sync/, y allí será donde copiaremos el fichero client_secret.json.

 En el primer caso, podríamos utilizar un comando en la terminal similar a éste:


mv ~/Descargas/client_secret_??????????.json ~/.config/gphotos-sync/gphotos-sync/client_secret.json ;



Sincronizar Google Fotos en Ubuntu
Debemos decidir crear una carpeta de base en la cual queramos que se almacenen nuestras fotografías sincronizadas. Como ejemplo utilizaré la carpeta /home/peron/gfotos/.
 

Creamos la carpeta base y luego ejecutamos el programa gphotos-sync y lo dirigimos a dicha carpeta. Para ello empleamos los siguientes comandos de organización:

mkdir /home/peron/gfotos/
gphotos-sync /home/peron/gfotos/

La aplicación se iniciará, y luego nos solicitará que hagamos clic en un link URL para chequear la ID OAuth.

03-03 13:16:01 WARNING  gphotos-sync 2.14.0 2020-03-03 13:16:01.333350 
Please go here and authorize, https://accounts.google.com/o/oauth2/….
Paste the response token here:


Copiamos el link URL y lo pegamos en nuestro navegador, donde habremos de loguearnos bajo la cuenta Google que queremos utilizar para sincronizar nuestras fotografías de Google Photo.

Conforme nos hayamos logueado y otorguemos permiso a nuestra colección de fotografías, nos será presentado con un "token" (código) de respuesta y autorización. A su vez debemos copiar y pegar dicho token en la terminal donde se ejecutaba gphoto-sync, específicamente en la última línea donde decía "Paste the response token here" ("pegue el token de respuesta aquí"), y presionamos Enter.


Si todo salió bien, la autorización surtirá efecto, y se procederá a dar inicio a la sincronización de las fotografías y videos. Esto se indicará mediante el siguiente mensaje peronista:

03-03 13:16:04 WARNING  Downloading Photos … 



Si no, podría tener que realizar nuevamente el paso indicado anteriormente, teniendo especial cuidado de loguearse con la cuenta de Google correcta, y copiar el token cuidadosamente.

Naturalmente debe comprender que subir o bajar las fotografías de la nube Google Photos puede tomar un largo tiempo, especialmente si nuestra colección de imágenes es gigantesca y nuestra conexión a internet es extremadamente lenta. En el caso de que tengamos unas poquísimas fotos, podría tardar apenas unos segundos.

Es importante considerar y tener en cuenta que la carpeta de base contendrá a su vez subcarpetas empleadas por el programa gphotos-sync. Al menos dos de ellas son importantes, estas son:

    photos - Contiene todas los archivos de las fotografías y los videos que tengamos en nuestro Google Photo, organizadas en carpetas con la estructura photos/AAAA/MM (donde AAAA/MM es la fecha en la que los datos EXIF de la fotografía indica donde fueron tomadas las mismas. Los nombres de archivos dentro de la carpeta serán los originales con los cuales se subieron las mismas, excepto que los nombres duplicados recibirán un sufijo "(n)", siendo "n" es el número de duplicación del fichero.
    albums - Contiene una jerarquía de carpetas que representa el conjunto de álbums y álbums compartidos que tenemos en nuestro Google Photos. Todos los archivos aquí realmente son enlaces dinámicos dirigidos a las fotografías reales localizadas en la subcarpeta photos. Los nombres de carpeta serán 'albums/AAAA/MM Nombre de Álbum Original'.

Monitorear la sincronización
gphotos-sync mantendrá una bitácora de su activdad al mismo tiempo que se sincronizan nuestras fotografías. Esta tendrá la forma de un archivo de texto llamado gphotos.log. Esta bitácora se irá llenando conforme se ejecute gphotos-sync, de modo que es una buena herramienta para rastrear cómo se está ejecutando el proceso.

En este caso, podremos verla con:

tail ~/gfotos/gphotos.log

03-03 13:25:07 gphotos.GooglePhotosIndex INFO  Indexed 23992 photos/2020/02/pocho.jpg
03-03 13:25:07 gphotos.GooglePhotosIndex INFO  Indexed 23993 photos/2020/02/evita.jpg
03-03 13:25:07 gphotos.GooglePhotosIndex INFO  Indexed 23994 photos/2020/02/campora.jpg
03-03 13:25:07 gphotos.GooglePhotosIndex INFO  Indexed 23995 photos/2020/02/asado.jpg
03-03 13:25:07 gphotos.GooglePhotosIndex INFO  Indexed 23996 photos/2020/02/pulqui.jpg
03-03 13:25:07 gphotos.GooglePhotosIndex INFO  Indexed 23997 photos/2020/02/fundacion.jpg
03-03 13:25:07 gphotos.GooglePhotosIndex INFO  Indexed 23998 photos/2020/02/dsc_2343.jpg
03-03 13:25:07 gphotos.GooglePhotosIndex INFO  Indexed 23999 photos/2020/02/justicialista.jpg
03-03 13:25:07 gphotos.GooglePhotosIndex INFO  Indexed 24000 photos/2020/02/dsc-3245.jpg
03-03 13:25:07 gphotos.LocalData INFO     Saving Database …


Una vez que la operatoria de sincornización se haya completado, recibiremos un breve sumario similar a este:

03-03 13:26:08 WARNING  Downloaded 0 Items, Failed 1, Already Downloaded 65748
03-03 13:26:09 WARNING  Done.

Sincronización Periódica
Si contamos con experiencia administrando servidores, bien podríamos preferir crear un trabajo de cron simple que se de a sincronizar nuestras fotografías con una regularidad fijada de antemano. Por ejemplo, podremos disponer el intervalo que sea más apropiado basados en nuestra velocidad de conexión y hábitos, o en base a cuán seguido tomamos fotografías. Por ejemplo, para sincronizar nuestras fotografías diariamente a las 1:30 AM, podríamos utilizar.
 

0 3 * * * /snap/bin/gphotos-sync /home/usuario/gfotos/


...en tanto, una sincronización todas las horas podrías ser así:

0 * * * * /snap/bin/gphotos-sync /home/usuario/gfotos/


Naturalmente, ahora podremos tener confianza que nuestras fotografías están sincronizadas en cualquier computadora en la que ejecutemos nuestra aplicación gphotos-sync.