
    6i^-                     `    S SK r S SKJr  S SKJr  S SKJr  S SKJr  S SKrS SK	r	 " S S5      r
g)    N)BeautifulSoup)datetime)	NewsModel)Sessionc                   4    \ rS rSrS\4S jrS rS rS rSr	g)	NewsScraperClass	   dbc                     Xl         SU l        g )Nz'https://especial.mineduc.cl/destacados/r
   url)selfr
   s     XC:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\classes\news_scraper_class.py__init__NewsScraperClass.__init__
   s    <    c                     SSSSSSSSS	S
SSS.nUR                  5       R                  5       n[        US   5      nUS   R                  SS5      n[        US   R                  SS5      5      nUR	                  US5      n[        XgU5      nU$ ! [         a9  n	[        SU S[        U	5       35        [
        R                  " 5       s Sn	A	$ Sn	A	ff = f)u\   
Convierte fecha en español a datetime
Ejemplo: "Martes 25 de Noviembre, 2025" -> datetime
                        r	   
         )enerofebreromarzoabrilmayojuniojulioagosto
septiembreoctubre	noviembre	diciembre, zError parseando fecha 'z': N)
lowersplitintreplacegetr   	Exceptionprintstrnow)
r   date_strmesespartsdiames_straniomesresultes
             r   parse_spanish_date#NewsScraperClass.parse_spanish_date   s    
	" q1qAQBRbE NN$**,EeAh-CAh&&sB/GuQx''R01D))GQ'Cd-FM 	"+H:SQAB<<>!	"s   BB 
C.CCCc           	          [         R                  " XSS9nUR                  5         [        UR                  S5      nSnUR                  SSS9nU(       dM  UR                  S5      nU H6  nUR                  SS	9n	U	(       d  M  U	S
;  d  M#  [        U	5      S:  d  M4  Un  O   U(       d'  UR                  SSS9=(       d    UR                  SSS9nU(       a  UR                  SS	9n[        SU S35        U(       a  [        U5      S:  d  US
;   a  [        S5        gUR                  SSS9=(       d(    UR                  S5      =(       d    UR                  SSS9n
SnU
(       aU  U
R                  S5      nSR                  U Vs/ s H'  oR                  SS	9(       d  M  UR                  SS	9PM)     sn5      nU(       a  [        U5      S:  a  g[        U5      S:  a  USS S-   OUnSnUR                  SSS9=(       d    UR                  SSS9nU(       d  U
(       a  U
R                  S5      nU(       d)  UR                  S5      nU(       a  UR                  S5      nU(       d  UR                  S5      nU(       a  UR                  SS5      =(       d+    UR                  SS5      =(       d    UR                  S S5      nU(       a7  UR                  S!5      (       d!  UR                  S"5      (       a  S#U 3nOS$U 3nU(       d  gUUUUS%.$ s  snf ! [         a$  n[        S&U S'[        U5       35         SnAgSnAff = f)(z7
Obtiene el detalle completo de una noticia individual
r   headerstimeouthtml.parserr,   h1zentry-titleclass_Tstrip)u   Ministerio de Educaciónu   Educación Especialh2z
post-titleu   Título extraído: ''u0   Título inválido o genérico, omitiendo noticiaNdivzentry-contentarticlecontentpz

2         ...imgzattachment-post-thumbnailzwp-post-imagesrczdata-srczdata-lazy-srchttp/zhttps://especial.mineduc.clzhttps://especial.mineduc.cl/)titleshort_descriptiondescriptionimagezError obteniendo detalle de z: )requestsr1   raise_for_statusr   rO   findfind_allget_textlenr3   join
startswithr2   r4   )r   r   rC   responsesouprY   	title_tagall_h1rF   h1_textrO   r[   
paragraphsrP   rZ   	image_urlimg_tagrN   r>   s                      r   get_news_detail NewsScraperClass.get_news_detail+   s%   \	||C"EH%%' !1!1=AD E 		$}	=I t, B kkk5Gw72e#ejmnujvy{j{$&	 !  IId<I@iDIId[hIDi	!***6(q12 CJOu8k/kHJ iioi>|$))IBV|Z^ZcZcdir{ZcZ|G K$--c2
$kk:*p:aYcYcjnYcYo+A1::D:+A:*pq #k"2R"7 >A=MPS=SDS 1E 9Yd I ii.IiJvdiiX]fuiNvG w!,,u- ))I.%ll51G ))E*#KKr2ugkk*b6QuU\U`U`aprtUu	Y%9%9&%A%A ++C00&A)$M	&B9+$N	  %6*"	 U +q`  	0RAx@A	sW   A>L L L B L A(L L!L4L D9L L L 
M"MMc                     SS0n[         R                  " U R                  USS9nUR                  5         [	        UR
                  S5      nUR                  SSS9nS	nS	n[        S
[        U5       35        U GHB  n UR                  SSS9nSn	U HX  n
U
R                  SS5      nU(       d  M  SU;   d  M&  SU
R                  S/ 5      ;  d  M>  SU
R                  S/ 5      ;  d  MV  Un	  O   U	(       d  M~  UR                  SSS9nU(       a  UR                  SS9OSnU(       a  U R                  U5      OSn[        SU	 35        U R                  X5      nU(       a
  US   (       d  [        SU	 35        GM  US   nUS   nUS   nUS   n[        SUSS  S 35        U R                  R                  [        5      R!                  [        R"                  U:H  [        R$                  S	:H  5      R'                  5       nU(       a  [        S!USS  S 35        US"-  nGM  [        S#U S$U 35        [        S	UUUUU(       a  UO[(        R*                  " 5       [(        R*                  " 5       S%9nU R                  R-                  U5        U R                  R/                  5         US"-  n[        S&USS  S 35        GME     [        S(U S)35         U R                  R5                  5         [        S*5        U R                  R                  [        5      R!                  [        R$                  S	:H  5      R7                  5       n[        S+U 35        S-S.U S/U S03UUS1.$ ! [0         a#  n[        S'[3        U5       35         SnAGM  SnAff = f! [0         a7  n[        S,[3        U5       35        U R                  R9                  5         e SnAff = f! [         R:                   a5  nU R                  R9                  5         S2S3[3        U5       3S4.s SnA$ SnAf[0         a5  nU R                  R9                  5         S2S5[3        U5       3S4.s SnA$ SnAff = f)6zL
Scraper para obtener noticias del MINEDUC y guardarlas en la base de datos
z
User-AgentzsMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36r   rB   rE   rM   boxrG   r   zTotal de noticias encontradas: aT)hrefNrr   r,   zespecial.mineduc.clthumbclassvermasspanfecharI   zProcesando noticia: rY   zNo se pudo obtener detalle de: rZ   r[   r\   u   Título encontrado: rQ   rT   zNoticia ya existe: r   u   Creando noticia con título: 'z' - Fecha: )deleted_status_idrY   rZ   r[   r\   
added_dateupdated_dateu   Noticia agregada a la sesión: z%Error procesando noticia individual: zIntentando guardar z  noticias en la base de datos...zCommit exitoso!u0   Total de noticias en la BD después del commit: zError en commit: successzScraping completado. z noticias guardadas, z omitidas (duplicadas))statusmessagesavedskippederroru"   Error al realizar petición HTTP: )r|   r}   zError en el scraping: )r]   r1   r   r^   r   rO   r`   r3   rb   r_   ra   r?   rm   r
   queryr   filterrY   rx   firstr   r5   addflushr2   r4   commitcountrollbackRequestException)r   rC   re   rf   
news_boxessaved_countskipped_countrp   linksr   linkrr   	fecha_tag	fecha_str	news_datenews_detailrY   rZ   r[   rk   existing_newsnew_newsr>   r   s                           r   scrape_newsNewsScraperClass.scrape_news   sa   y	   TG  ||DHHgrJH%%' !!1!1=AD uU;JKM3C
O3DEF!BLL4L8EC %#xx34$9T$AgUYU]U]^egiUjFjow  @D  @H  @H  IP  RT  @U  pU"&C! !&   !$ @IBK	 2 2 2 >QUIFO 7 7	 BUYI067 #'"6"6s"DK&k'.B ?uEF '0E(34G(H%"-m"<K +G 4I0sC@A %)GGMM)$<$C$C!50!33q8% eg "
 % 3E#2J<sCD%*  :5'YKXY(*+#*;$/'099x||~%-\\^ H GGKK)GGMMO1$K;E#2J<sKL "L '}4TUV ) i077	8S8SWX8XY__aHPQ $2;-?TUbTccyz$(	 ' ! A#a&JK  )#a&23  " (( 	GG!?AxH   	GG!3CF8< 	s   A;O >.M0M8MM(M5O 7B M7O :B#MO  BM;O B N O 
N(N?O NO 
O2O

OO Q&*PQQ#*QQQr   N)
__name__
__module____qualname____firstlineno__r   r   r?   rm   r   __static_attributes__ r   r   r   r   	   s     =7 =":`D}r   r   )r]   bs4r   r   app.backend.db.modelsr   sqlalchemy.ormr   localerer   r   r   r   <module>r      s&       + "  	A Ar   