Loading repository data…
Loading repository data…
paupradel / repository
Aplicación para mandar N correos utilizando una base de datos y las API de Google
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
Aplicación simple para obtener un archivo remoto por medio de la API de Google Drive, para después importarlo y leerlo como un dataframe de pandas. Los datos de dicho dataframe armarán N cantidad de mensajes de correo electrónico y se enviarán usando la API de Gmail.
Como buena persona programadora, a veces me gusta complicarme la vida y pasar muchas horas automatizando una tarea que probablemente me tome dos horas hacerla de un jalón :3. Y pues bien, en el lugar donde trabajo tuvimos la iniciativa de realizar un intercambio virtual navideño. Soy la encargada de crear un formulario para que las personas registren sus preferencias de regalo y sus datos de contacto. Después también debo de enviar N cantidad de mails para informar a cada persona los resultados del sorteo, direcciones, etc. Así que aprovechando que los resultados del formulario de Google arrojan un spreadsheets de datos, se me ocurrió construir esta aplicación aprovechando las bondades (o no) de las API de google.
Seguramente existe una manera más fácil de hacer esto y evitar la programación, pero de cualquier manera este es un excelente ejercicio para aprender más y mejor acerca de las API de gugul y para seguir practicando python.
Gracias si llegaste hasta aquí y espero que esta aplicación te sirva o al menos la encuentres curiosa.
Trabajar con las API de Google con Python no es tan directo como uno pensaría. Existen ciertos wrappers de algunas de ellas que hacen el trabajo más sencillo y que funcionan bastante bien, pero siempre es bonito ensuciarnos un poco las manos para aprender mucho más. Si te interesa agregar funcionalidades a este código para adaptarlo a tus necesidades, tendrás que ensuciarte las manos. Para hacer tu vida más sencilla pondré acá algunos enlaces útiles que me sirvieron bastante para poder construir esta aplicación y para que puedas pasar a la sección de Instalación e Instrucciones mejor informade.
Dentro de la documentación de la API de Google Drive se encuentra este ejercicio de codelab con Python que te enseñará entre otras cosas a obtener las credenciales para tu aplicación, crear un proyecto en la consola de desarrolladores de Google, aprender acerca de las bibliotecas cliente de la API de Google, entre otra cosas.
scopesDependiendo de lo que necesites trabajar u obtener de las diferentes API de Google es a como vas a configurar unas
variables llamas scopes. En este proyecto existe un archivo llamado autenticacion.py que tendrás que ejecutar la
primera vez que uses este código para que le des permiso a tu cuenta de Google de acceder a este proyecto (aplicación
web). En ese archivo modificarás los scopes. Para este proyecto lucen así:
scopes = 'https://www.googleapis.com/auth/drive.readonly.metadata https://www.googleapis.com/auth/drive.readonly https://www.googleapis.com/auth/gmail.compose'
En el primer scope, estamos pidiendo permiso para ver los metadatos de los archivos que se encuentran en Google Drive, en el segundo scope estamos pidiendo permiso para leer el contenido de los archivos que se encuentran en Google Drive, y en el tercer scope estamos pidiendo permiso para crear y enviar mensajes usando Gmail.
Los scopes completos de la API de Google Drive los puedes encontrar
aquí y los de la API de Gmail
acá.
Puedes agregar la cantidad de scopes que necesites a la variable; sin embargo, es necesario tener cuidado pues estás
dando potencial acceso de datos sensibles a una aplicación externa. Te recomiendo que verifiques muy bien en la
documentación el tipo de uso (Recomendado, Sensible y Restringido) que tiene cada scope.
Cabe mencionar que los scopes usados aquí están marcados con Restringido, por lo que la primera vez que se
abra la ventana en tu navegador para dar permiso a la aplicación te aparecerá una advertencia de que esta aún no está
verificada. Esto es porque Google requiere que se lleve a cabo un proceso de verificación cuando las aplicaciones web
tienen acceso a ciertos datos sensibles para el usuario. Dado que tú como persona usuaria estás construyendo tu propia
aplicación web en la consola de Google y a este código le estás dando acceso a tu cuenta de Google, no debería de
haber ningún problema. Bajo ninguna circunstancia al correr esta aplicación yo como autora del código tendré acceso a
tus datos. Es posible que en un futuro someta esta aplicación web a verificación, simplemente por trámite administrativo
y para que ya no aparezca la ventana de advertencia. Para aprender más acerca de la verificación de las aplicaciones
web externas, puedes ir a este enlace.
Un MIME Type es un estándar que define
el tipo y formato de un archivo. Para poder descargar un archivo almacenado en Google Drive usando su API es necesario
conocer su MIME Type. Esto es debido a que dependiendo de si un archivo pertenece al Google Workspace (Google Docs,
Google Sheets, etc.) o tiene otro formato (pdf, csv, etc.) se utilizará un método u otro de la API para
descargar o exportar
el contenido del archivo por medio de la misma. Dentro del método empleado será necesario especificar el
MIME Type con el cual se descargará o exportará el archivo. Por ejemplo, en el caso de que quiera descargar el
contenido de un Google Sheet, usaré el método
export_media() y especificaré en sus parámetros
que deseo exportarlo como un archivo de Microsoft Excel con extensión .xlsx, por medio del
MIME Type application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.
En la documentación de la API de Google Drive se listan los MIME Type soportados de acuerdo a si pertenecen al Google Workspace o no:
En el script guguldraiv.py de la carpeta servicios de este proyecto es posible modificar o agregar los
MIME Type con los que se exportan o descargan los archivos. Dado que una de las funciones de este
proyecto es tener un listado de datos para con ello construir N correos electrónicos, los archivos más comunes que
acepta la aplicación son aquellos con extensión .xlsx, .csv, o un Google Sheet. En caso de que el tipo de archivo
sea distinto, la aplicación te mandará un mensaje de error para que modifiques el nombre del archivo, esto es
referido en el paso 10 de la sección de Instalación e Instrucciones.
Por medio del archivo Pipfile o el requirements.txt es posible instalar las dependencias de este proyecto. Para
usar el Pipfile es necesario tener instalado Pipenv y crear un ambiente
virtual como se indique en la documentación. El archivo requirements.txt se puede utilizar con cualquier otra
herramienta para generar ambientes virtuales de Python. Es muy recomendable trabajar dentro de un ambiente
virtual para el uso de este proyecto y evitar la instalación de los requerimientos de manera global.
En este proyecto se usa Python 3.10 y sus dependencias principales se listan a continuación:
Para familiarizarse con el uso de las API de Google usando Python, se puede realizar este ejercicio de codelab en google.
Lo descrito en esta sección solo es necesario efectuarlo una sola vez para dar permisos a la aplicación.
.JSON que contiene las credenciales y colócalo en la carpeta
/credenciales. Le puedes dar el nombre que tú quieras, pero por default aquí este archivo
se llama credenciales.json. Si deseas cambiarle el nombre, puedes ir a autenticacion.py y modificar la variable
archivo_credenciales./credenciales un archivo de nombre storage.json. En este archivo se guardará el token de
acceso una vez que autorices el uso de la aplicación web. Este archivo junto con el credenciales.json y toda
la carpeta /credenciales están marcados en el .gitignore para no ser cargados al repositorio de github. Cada vez
que agregues o modifiques los scopes en el archivo autenticacion.py es necesario que borres el archivo
storage.json y vuelvas a correr la autenticación.autenticacion.py, haciendo python autenticacion.py. Se abrirá una ventana en tu navegador que
mostrará una advertencia (ir a la sección de scopes más arriba para conocer más) o bien te pedirá que des permiso
con tu cuenta de Google a los scopes utilizados. El script autenticacion.py es una adaptación del código mostrado en
este Google codelab.En el script aplicacion.py establece la variable nombre, colocando el nombre del archivo
almacenado en Google Drive y en donde se encuentran los datos que van a componer el cuerpo de los correos electrónicos
que deseas mandar. Esta variable es una cadena de texto. Por default en este script nombre = '', es decir una
cadena de texto vacía. Si no cambias la variable te aparecerá un mensaje de advertencia para que lo modifiques.
Los tipos de archivo que acepta esta aplicación son:
En el caso de los primeros tres tipos el nombre del archivo lo debes ingresar incluyendo la extensión del mismo, es
decir ejemplo_archivo.csv o bien ejemplo_archivo.xlsx. Para los Google Sheets solo ingresa