
    oh                         d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZ  e j        dd                                          Z ej        ed	
            ej        d          ZdZdZdZdZdZdZ ej        d          ZddiZd ZdedefdZ dddedede!de!dedz  f
dZ"d edz  defd!Z#d"ede$e%         fd#Z&de$e%         fd$Z'd%e$e%         de
e!e!f         fd&Z(d' Z)e*d(k    r e+ e)                       dS dS ))    N)BeautifulSoup)escape)ListTuple
get_client)broadcast_html	LOG_LEVELINFOz[%(levelname)s] %(message)s)levelformat	motie_n8nzhttps://www.motie.go.krzhttps://www.motie.go.kr/kor/article/ATCL6e90bb9de?mno=&pageIndex=1&rowPageC=0&displayAuthor=&searchCategory=3&schClear=on&startDtD=&endDtD=&searchCondition=1&searchKeyword=#ztd:nth-of-type(3)ztd:nth-of-type(5)za[href^="/attach/down"]za[onclick^="article.view"]z\d+z
User-Agentz*GovBot/1.0 (+https://work.jjickjjicks.com)c                      t                      S )Nr        */var/www/html/bot/app/crawler/motie_n8n.pySBr   "   s    <<r   targetreturnc                    dd l }ddlm}m} t          |                                          }	 t                                          d                              || dddd |                    |j	                  
                                d                                           n4# t          $ r'}t                              d|            Y d }~nd }~ww xY w|S )Nr   datetimetimezonecrawler_runrunning)idr   statuspagesrowsfail_reason
started_atz[crawler_run insert] )uuidr   r   struuid4r   tableinsertnowutc	isoformatexecute	Exceptionloggerwarning)r   r"   r   r   run_ides         r   
_run_startr0   %   s    KKK++++++++F4


=!!((",,x|44>>@@*
 *
 	 	 79999 4 4 42q22333333334Ms   A8B( (
C2CC)r    r.   r   r   r   r    c                   ddl m }m} ||                    |j                                                  ||d}|||d<   	 t                                          d                              |                              d|           	                                 d S # t          $ r(}t                              d|            Y d }~d S d }~ww xY w)Nr   r   )r   finished_atr   r   r    r   r   z[crawler_run finish] )r   r   r'   r(   r)   r   r%   updateeqr*   r+   r,   r-   )	r.   r   r   r   r    r   r   payloadr/   s	            r   _run_finishr6   7   s    ++++++++||HL11;;==	 G !,4


=!!((1144T6BBJJLLLLL 4 4 42q223333333334s   AB 
C(CCsc                 X    | sdS d                     |                                           S )N  )joinsplit)r7   s    r   _cleanr=   I   s)     r88AGGIIr   htmlc                 z   t          | d          }|                    d          }g }|D ]}|                    t                    }|                    t                    }|                    t
                    }|                    t                    }t          |r|                    d          nd          }	t          |r|                    d          nd          }
|r/|	                    d          r|d         
                                nd }|r/|	                    d          r|d         
                                nd}t                              |          }|r|                    d          nd }|r;|                    |	|
|r|                    d	          r
t           |z   n||d
           |S )Nzhtml.parserztable tbody trT)stripr9   hrefonclickr   /)titledatefileUrl	articleId)r   select
select_one	SEL_TITLESEL_DATESEL_FILESEL_LINKr=   get_texthas_attrr@   RE_ARTICLE_IDsearchgroupappend
startswithBASE)r>   soupr   itemstrtitle_eldate_elfile_ellink_elrD   rE   file_urlrB   m
article_ids                  r   parse_list_htmlr`   N   s   }--D;;'((DE  ==++==**==**==**Hx((t(444bIIwFw''d'333BGG/6^7;K;KF;S;S^76?((***Z^18aW=M=Mi=X=Xa')$**,,,_a  ))#$.QWWQZZZ$
 	LL19eh>Q>QRU>V>VeD8OO]e'	     Lr   c                      t          j        t          t          d          } |                                  t          | j                  S )N   )headerstimeout)requestsgetLIST_URLHEADERSraise_for_statusr`   text)rs    r   fetch_and_extractrl   j   s:    Xw;;;A16"""r   rW   c                    t                      }d\  }}| D ]%}|                    d          }|s|                    d                              d                              d|                              d                                          }|j        rt           d| d}t          |          
                                rt          |          n|}|                    d          pd	                                }	|                    d
          pd	                                }
||	d}|
r|
|d<   	 |                    d                              |                                           |dz  }n8# t          $ r+}t                              d| d|            Y d }~d }~ww xY wdt#          |	           d| d}	 t%          |          }|t'          |t                    rt          |          n|rdndz  }# t          $ r+}t                              d| d|            Y d }~d }~ww xY w||fS )N)r   r   rG   motie_idr      z/kor/article/ATCL6e90bb9de/z/view?rD   r9   rE   )r   rD   	posted_atzinsert fail for z: u"   산업부 인사발령입니다.
[z]
<a href="u   ">[자세히 보기]</a>r   znotify fail for )r   rf   r%   rH   r4   limitr*   datarU   r#   isdigitintr@   r&   r+   r,   r-   r   r	   
isinstance)rW   sbinsertednotifieditaidexist
detail_url	aid_valuerD   postedr5   r/   r>   sents                  r   upsert_to_supabase_and_notifyr   o   s   	BHh ": ":ff[!! 	$$++D1144T3??EEaHHPPRR: 	DDDDD
 #C 0 0 2 2;CHHH	&B--//&&..&B--//"U33 	*#)GK 	HHZ  ''0088:::MHH 	 	 	NN8c88Q88999HHHH	
=u= ="= = = 	
	:!$''DZc%:%:RD			dAQPQRHH 	: 	: 	:NN8c88Q8899999999	:Xs0   8?E88
F- F((F-<H
H: H55H:c            
      &   d} t          |           }d}d}	 t                      }|dz  }|s5t          |d|d           t                              d           ddd|ddS t          |          \  }}|}t          |d||           t                              d	||           d|||ddS # t          $ rZ}t          |d
||t          |                     t                              d|           dt          |          |d
dcY d }~S d }~ww xY w)Nrn   r   ro   passed)r   r   r   zMOTIE n8n-style run: no itemsMOTIE_ID)sourcerw   r   r.   r   z)MOTIE n8n-style run: inserted=%s, sent=%saborted)r   r   r   r    zMOTIE n8n-style run aborted: %s)r   errorr.   r   )	r0   rl   r6   r,   infor   r+   r#   	exception)r   r.   r   r   rW   insr   r/   s           r   run_oncer      s^   FFED^!##
 	jxu1EEEEKK7888(af`hiii1%88	TF85tDDDD?dKKK$#tvaijjj ^ ^ ^F9ERUVWRXRXYYYY:A>>>$s1vvS\]]]]]]]]^s&   A	B, !A
B, ,
D6ADDD__main__),osreloggingre   bs4r   r>   r   typingr   r   app.services.supabase_servicer   app.services.telegram_senderr	   getenvupperr
   basicConfig	getLoggerr,   rU   rg   rJ   rK   rL   rM   compilerP   rh   r   r#   r0   rt   r6   r=   listdictr`   rl   r   r   __name__printr   r   r   <module>r      sq   				 				                       4 4 4 4 4 4 7 7 7 7 7 7BIk6**0022	  ),I J J J J		;	'	' : 	  	%(
6""E
F
  s s    $ _c 4 4 4 4 4C 4s 4QTW[Q[ 4 4 4 4$cDj S    
# $t*    8#4: # # # #
&d &c3h & & & &V^ ^ ^. z	E((** r   