Skip to content

Commit

Permalink
feat: menos pegadas en noticias automáticas; otros cambios menores
Browse files Browse the repository at this point in the history
  • Loading branch information
SBen-IV committed Apr 1, 2023
1 parent a592171 commit c5f4db4
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 23 deletions.
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,10 @@ pipenv run python3.8 main.py

## TODOs

- [ ] Ver cómo cambiar las noticias automáticas para hacer menos pegadas a la página (método que reciba una fecha y devuelva sólo noticias posteriores).
- [x] Ver cómo cambiar las noticias automáticas para hacer menos pegadas a la página (método que reciba una fecha y devuelva sólo noticias posteriores).
- [ ] Agregar método para convertir una url de una noticia.
- [ ] Agregar archivo config para variables como delay, intervalo entre mensajes, etc.
- [ ] Agregar script para correr en "dev" y "prod".
- [ ] Agregar comando /status, /estado o /info que devuelva el estado del bot
- [ ] Agregar /version (?)
- [ ] Agregar /version (?)
- [ ] Agregar tests
4 changes: 4 additions & 0 deletions connectors/fiuba_web.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,8 @@ class FiubaWeb(ABC):

@abstractclassmethod
def obtener_noticias(self, n: int = 1) -> list:
pass

@abstractclassmethod
def obtener_noticias_nuevas(self, ultima_noticia: Noticia) -> list:
pass
29 changes: 24 additions & 5 deletions connectors/silk.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from tkinter.tix import MAX
import requests as requests
import dateparser as dp

Expand All @@ -22,10 +23,7 @@ def __init__(self):
def obtener_noticias(self, n_noticias: int = 1) -> list:
self.__validar_cantidad(n_noticias)

page = requests.get(LINK_NOTICIAS)
soup = BeautifulSoup(page.content, 'html.parser')

uris_noticias = list(map(lambda x: x.get('href'), soup.select(".noticia > a")))
uris_noticias = self.__obtener_uri_noticias()

noticias = []

Expand Down Expand Up @@ -53,8 +51,29 @@ def obtener_noticia(self, uri: str) -> Noticia:

return Noticia(titulo, descripcion, fecha, url)

def obtener_noticias_nuevas(self, ultima_noticia: Noticia) -> list:
uris_noticias = self.__obtener_uri_noticias()

noticias_nuevas = []

for uri in uris_noticias[:MAX_NOTICIAS]:
noticia = self.obtener_noticia(uri)

if noticia.fecha > ultima_noticia.fecha:
noticias_nuevas.append(noticia)
else:
break

return noticias_nuevas

def __obtener_uri_noticias(self) -> list:
page = requests.get(LINK_NOTICIAS)
soup = BeautifulSoup(page.content, 'html.parser')

return list(map(lambda x: x.get('href'), soup.select(".noticia > a")))

def __validar_cantidad(self, n_noticias: int) -> None:
if n_noticias <= 0:
raise CantidadNoticiasNegativaException(n_noticias)
elif n_noticias >= MAX_NOTICIAS:
elif n_noticias > MAX_NOTICIAS:
raise CantidadNoticiasMaximaException(n_noticias)
26 changes: 11 additions & 15 deletions controllers/jjjameson.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,10 @@ def conseguir_noticias(self, update: Update, context: CallbackContext):
if len(context.args) < 1:
noticias = self.fiuba_web.obtener_noticias()
else:
n_noticias = int(context.args[0])
noticias = self.fiuba_web.obtener_noticias(n_noticias)
cant_noticias = int(context.args[0])
noticias = self.fiuba_web.obtener_noticias(cant_noticias)

self.logger.info("Se consiguieron {n_noticias} noticias.".format(n_noticias=len(noticias)))
self.logger.info("Se consiguieron {cant_noticias} noticias.".format(cant_noticias=len(noticias)))

self.imprenta.enviar_noticias(update.effective_chat, noticias)
except ValueError:
Expand All @@ -49,7 +49,7 @@ def activar_noticias_automaticas(self, update: Update, context: CallbackContext)
update.effective_chat.send_message("Las noticias automáticas ya estan activadas.")


def desactivar_noticias_automaticas(self, update: Update, context: CallbackContext):
def desactivar_noticias_automaticas(self, update: Update, _: CallbackContext):
if self.noticias_automaticas == True:
self.job.schedule_removal()
self.noticias_automaticas = False
Expand All @@ -60,17 +60,13 @@ def desactivar_noticias_automaticas(self, update: Update, context: CallbackConte

def conseguir_noticias_automatico(self, context: CallbackContext):
ultima_noticia_guardada = self.repo.ultima_noticia()
ultimas_noticias = self.fiuba_web.obtener_noticias(15)

self.logger.info("Fecha de ultima noticia {titulo} es {fecha}.".format(titulo=ultima_noticia_guardada.titulo, fecha=ultima_noticia_guardada.fecha))

nuevas_noticias = []
for noticia in ultimas_noticias:
if noticia.fecha > ultima_noticia_guardada.fecha:
self.logger.info("Fecha de noticia {titulo} es {fecha}".format(titulo=noticia.titulo, fecha=noticia.fecha))
nuevas_noticias.append(noticia)
self.logger.info("Fecha de última noticia {titulo} es {fecha}.".format(titulo=ultima_noticia_guardada.titulo, fecha=ultima_noticia_guardada.fecha))

nuevas_noticias = self.fiuba_web.obtener_noticias_nuevas(ultima_noticia_guardada)

if len(nuevas_noticias) > 0:
self.logger.info("Hay {cant_noticias} noticias nuevas.".format(cant_noticias=len(nuevas_noticias)))
self.repo.guardar(max(nuevas_noticias, key=lambda n: n.fecha))

self.imprenta.enviar_noticias(context.job.context, nuevas_noticias, 30)
self.imprenta.enviar_noticias(context.job.context, nuevas_noticias, 30)
else:
self.logger.info("No hay noticias nuevas.")
2 changes: 1 addition & 1 deletion repositories/noticias_repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ def guardar(self, noticia: Noticia) -> Noticia:
with open(self.path, 'w', encoding='utf-8') as f:
json.dump(noticia_json, f, indent=4)

self.logger.info("Guardado {noticia}.".format(noticia=noticia_json))
self.logger.info("Guardada {noticia}.".format(noticia=noticia_json))

return noticia

Expand Down

0 comments on commit c5f4db4

Please sign in to comment.