¿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.