Closed asiokfd closed 3 years ago
Por favor, en la corrección, explicarme como hacer un put para poder añadir parametros a la base de datos, por ejemplo, añadir el pais, o el sentimiento para que se procese en la api. Lo intenté pero no pude. Entiendo que hay que crear un endpoint put y luego en un "putdata" hacer las funciones para que "pasen cosas", esta última parte la entiendo, y la tenía a medias. pero mi problema creo que es que no entiendo muy bien como la api recibe los datos.
Holaaaaa Albertoooooo 🙋♀️, vamos con el proyecto de crear una API!! 🔥🔥
En general el readme esta bastante bien organizado, lo tienes todo muy compartimentado, con ejemplos de tus endpoints, los pasos que has ido dando para construir la API. El apartado donde explicas todo el contenido que hay en el repo esta suuper bien, ayuda mucho a seguir el workflow de trabajo. Solo como detalles, por si te aporta valor:
Suuper bien organizado el repo Alberto 👏🏽
No se te ha pasado ningún archivo "rarinchi" fuera del .gitignore
.
La estructura de las carpetas esta perfecta.
Tienes el .txt
de requeriments 🙌🏽
Por ponerme un poco tiquismiquis, en la carpeta src
tienes algún jupyter, lo ideal es que dejes esta carpeta solo para los .py
. Los notebooks los podrías poner en otra carpeta que por ejemplo se llame Notebooks.
Suuuper bien que hayas hecho programación defensiva y que te hayas anticipado a las peticiones del usuario, devolviendo un mensaje en caso de que no haya datos en tu base de datos 👏🏽
Vamos con las dudas que tenías(espero haberlas entendido bien):
Cuando quieres actualizar algún dato que tengas ya en tu colección puedes usar el método update
de mongo. La estructura básica que podrías seguir:
# te creas un endpoint específico la actulizar datos:
url_upd_lit = ("http://127.0.0.1:5000/update")
@app.route("/update")
def update_lit():
args = dict(request.args)
return json_util.dumps(update(args))
#donde args será un diccionario con los datos nuevos que quieras actulizar
#tendrás que create un post para actulizar datos
def update(update):
setting = {"push": update}
update = collection.update_one(update, setting)
return "All right!!!"
url_upd_lit = ("http://127.0.0.1:5000/update")
#lo que quieras actulizar se lo pasarás como un diccionario al endpoint
actulizado = {Año': '1963',
'Keywords': 'Keywords',
'Nombre': 'Martin Luther King',
'Partido': 'XXXX',
'Texto': "bla bla bla"}
lit_upd = requests.get(url_upd_lit , params = actulizado)
Te dejo por aquí algo de documentación sobre el método update
Todas las funciones que te creaste para escrapear los datos, limpiarlos y cargarlos en tu BBDD están muy bien, un código muy encapsulado con objetivos específicos. En el jupyter cargar_datos.ipynb
lo tienes perfecto, pero tienes líneas de código que se repiten mucho, por ejemplo:
# esto lo tienes repetido 14 veces.
suarez= porparrafos ("https://www.lamoncloa.gob.es/presidente/presidentes/investiduras/Paginas/30031979_InvestSuarez.aspx", xpath)
sotelo= porparrafos ("https://www.lamoncloa.gob.es/presidente/presidentes/investiduras/Paginas/18021981_InvestCalvoSotelo.aspx", xpath)
⚪️ Te puedes crear una lista o un diccionario con las distintas urls, luego iterar por esa lista mientras llamas a la función que te has creado. Lo mismo podrías hacer con el resto de las líneas de código que tienes muy repetidas en ese mismo jupyter.
Te dejo por aquí algunas ideas que se me han ido ocurrido según iba leyendo tu proyecto:
El análisis de sentimientos lo puedes incluir como un enpoint de tu API. Lo puedes crear para que te devuelva la evolución del sentimiento de un deterimando político y año o comparar entre varios políticos o partidos.
Atomizar algunas partes del código, sobre todo en las llamadas a las funciones de generación de datos.
En cualquier caso Alberto, te has escrapeado un dataset , lo has incorparado en una base de datos de mongo, te has creado muchísimos enpoints (tanto GET como POST 👏🏽) y por último has hecho una representación gráfica de tus datos. Enhorabuena Alberto! 🔥🔥🔥 Si te quedó alguna duda, ya sabes donde estamos!!!
https://github.com/asiokfd/Proyecto4