Ë
    ¸¬uj  ã                   ó(  — d Z ddlZddlZddlZddlZddlZddlZddlmZmZ  ej                  dd«      Z
dZdZdZd	Zd
ddddœZ ej                   «        ed¬«      z
  j#                  d«      Z ede› �«       d„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u¦   æ˜ŽæºªåŽ¿äººæ°‘æ”¿åºœ - ç»¼å�ˆé€šçŸ¥å…¬å‘Š çˆ¬è™«
TRS WCM API (fjdzapp/data)ï¼Œç›´æŽ¥JSONæ•°æ�®ï¼Œä¸�éœ€è¦�çˆ¬è¯¦æƒ…é¡µ
å�ªçˆ¬å‰�5é¡µï¼ˆ75æ�¡ï¼‰ï¼Œæ—¥è·‘å¢žé‡�æ¨¡å¼�
é    N)ÚdatetimeÚ	timedeltaÚ	SEARCH_DBz/root/search.dbu   æ˜ŽæºªåŽ¿-ç»¼å�ˆé€šçŸ¥å…¬å‘Šz#http://www.fjmx.gov.cn/fjdzapp/dataé   é   z<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36z!application/json, text/plain, */*zapplication/jsonz$http://www.fjmx.gov.cn/zwgk/gggs/zh/)z
User-AgentÚAcceptzContent-TypeÚRefereriG  )Údaysú%Y-%m-%du   [info] æ—¥æœŸè¿‡æ»¤: >= c                 ó¦   — 	 t        j                  | j                  «       d«      }|j                  d«      S #  | dd j	                  dd«      cY S xY w)z-Convert '2026.06.25 16:34:00' to '2026-06-25'z%Y.%m.%d %H:%M:%Sr   Né
   ú.ú-)r   ÚstrptimeÚstripÚstrftimeÚreplace)ÚdatestrÚdts     ú/root/gov_crawler/crawl_fjmx.pyÚconvert_dater       sO   € ð.Ü×Ñ˜wŸ}™}›Ð0CÓDˆØ�{‰{˜:Ó&Ð&øð.Ø�s˜ˆ|×#Ñ# C¨Ó-Ò-ús	   ‚47 ·Ac                 ó0  — dddt         | dœ}	 t        j                  t        |t        d¬«      }|j                  «       }|j                  d«      rt        d|› �«       g S |j                  d	g «      S # t        $ r}t        d
|› �«       g cY d}~S d}~ww xY w)zOPagination indexing seems 0-based or 1-based at the API level - use page numberi † zchnlid=40146z-docorderpri,-docreltime)Ú	channelidÚclasssqlÚ	sortfieldÚprepageÚpager   )ÚjsonÚheadersÚtimeoutÚerroru     [error] APIè¿”å›žé”™è¯¯: Údatau     [error] APIè¯·æ±‚å¤±è´¥: N)	ÚITEMS_PER_PAGEÚrequestsÚpostÚAPI_URLÚHEADERSr   ÚgetÚprintÚ	Exception)r   ÚpayloadÚrr"   Úes        r   Ú
fetch_pager.   )   s•   € ð Ø"Ø/Ü!Øñ€Gð	Ü�M‰Mœ'¨¼È"ÔMˆØ�v‰v‹xˆØ�8‰8�GÔÜÐ/°¨vÐ6Ô7ØˆIØ�x‰x˜ Ó#Ð#øÜò ÜÐ+¨A¨3Ð/Ô0Ø�	ûðús$   ŽAA2 Á A2 Á2	BÁ;BÂ
BÂBc                 ó  — g }| j                  dg «      D ]W  }|j                  dd«      }|j                  dd«      }|sŒ*|j                  d«      sd|z   }|j                  d|› d|› d	�«       ŒY |rd
j                  |«      S dS )u    ä»Žfileså­—æ®µæ��å�–é™„ä»¶ä¿¡æ�¯ÚfilesÚ_hrefÚ ÚappdescÚhttpzhttp://www.fjmx.gov.cnz	<a href="z">z</a>z<br>)r(   Ú
startswithÚappendÚjoin)ÚitemÚattsÚfÚhrefÚdescs        r   Úextract_attachmentsr=   >   s�   € à€DØ�X‰X�g˜rÓ"ò 8ˆØ�u‰u�W˜bÓ!ˆØ�u‰u�Y Ó#ˆÚØ—?‘? 6Ô*Ø/°$Ñ6�Ø�K‰K˜) D 6¨¨D¨6°Ð6Õ7ð8ñ !%ˆ6�;‰;�tÓÐ,¨"Ð,ó    c                  óH  — dd l } | j                  t        «      }|j                  «       }|j	                  d«       d}d}d}d}t        dt        dz   «      D �]q  }t        |«      }|st        d|› d�«       Œ!d}	d}
|D �]  }|j                  dd«      }t        |«      }|t        k  r|dz  }Œ0|j                  dd«      j                  «       }|j                  d	d«      }|j                  d
d«      j                  «       }t        |«      }|r|dz   |z   }|sd|› �}|j	                  d|f«       |j                  «       d   dkD  r|
dz  }
ŒÍ	 |j	                  d|||t        ||df«       |j                   dkD  r|	dz  }	t        d|d d › �«       �Œ |j%                  «        ||	z  }||
z  }t        d|› dt        › d|	› d|
› d|› �
«       �Œt |j'                  «        t        dt        › d|› d|› d|› d|› �
«       y # t"        $ r}t        d|› �«       |dz  }Y d }~�ŒŸd }~ww xY w)Nr   zPRAGMA journal_mode=WALé   u
   [warn] ç¬¬u   é¡µæ— æ•°æ�®Ú
docreltimer2   ÚdoctitleÚ
chnldocurlÚcontentu$   

<p><strong>é™„ä»¶ï¼š</strong></p>
u   [æ— æ­£æ–‡] z-SELECT COUNT(*) FROM gov_raw WHERE page_url=?z»
                    INSERT OR IGNORE INTO gov_raw (page_url, title, content, site_name, publish_date, summary, category)
                    VALUES (?, ?, ?, ?, ?, ?, ?)
                u   é€šçŸ¥å…¬å‘Šz  [+] é(   u     [error] å…¥åº“å¤±è´¥: z[page ú/z] +z new, z dup, total: u
   
[å®Œæˆ�] u	   : æ–°å¢ž u    æ�¡, é‡�å¤�è·³è¿‡ u   , è¶…3å¹´è·³è¿‡ u	   , é”™è¯¯ )Úsqlite3ÚconnectÚDB_PATHÚcursorÚexecuteÚrangeÚTOTAL_PAGESr.   r)   r(   r   ÚCUTOFF_DATEr   r=   ÚfetchoneÚ	SITE_NAMEÚrowcountr*   ÚcommitÚclose)rG   ÚconnÚcÚ	new_countÚ
skip_countÚold_skipÚ	err_countr   ÚitemsÚpage_newÚ	page_skipr8   Úraw_dateÚdateÚtitleÚurlrD   r9   r-   s                      r   Úmainra   K   sz  € ÛØ�?‰?œ7Ó#€DØ�‰‹€AØ‡I�IÐ'Ô(à€IØ€JØ€HØ€Iä�aœ q™Ó)ó 1cˆÜ˜4Ó ˆÙÜ�J˜t˜f LÐ1Ô2ØàˆØˆ	Øó $	ˆDà—x‘x ¨bÓ1ˆHÜ Ó)ˆDØ”kÒ!Ø˜A‘�Øà—H‘H˜Z¨Ó,×2Ñ2Ó4ˆEØ—(‘(˜<¨Ó,ˆCØ—h‘h˜y¨"Ó-×3Ñ3Ó5ˆGÜ& tÓ,ˆDñ Ø!Ð$MÑMÐPTÑT�áØ(¨¨Ð0�ð �I‰IÐEÈÀvÔNØ�z‰z‹|˜A‰ Ò"Ø˜Q‘�	Øð
Ø—	‘	ð ð ˜5 '¬9°d¸EÀ>ÐRôTð —:‘: ’>Ø ‘M�HÜ˜F 5¨¨" : ,Ð/Ô0ùðC$	ðL 	�‰ŒØ�XÑˆ	Ø�iÑˆ
Ü��t�f˜Aœk˜]¨#¨h¨Z°v¸i¸[ÈÐV_ÐU`ÐaÖbðc1cðf 	‡J�J„LÜ	ˆKœ	�{ )¨I¨;Ð6IÈ*ÈÐUeÐfnÐeoÐoxð  zCð  yDð  Eõ  Føô ò ÜÐ0°°Ð4Ô5Ø˜Q‘–	ûðús   ÅAG:Ç:	H!ÈHÈH!Ú__main__)Ú__doc__ÚosÚsysÚreÚtimer   r$   r   r   ÚgetenvrI   rP   r&   rM   r#   r'   Únowr   rN   r)   r   r.   r=   ra   Ú__name__© r>   r   ú<module>rl      s¼   ðñó
 
Û 
Û 	Û Û Û ß (à
ˆ"�)‰)�KÐ!2Ó
3€Ø*€	Ø
/€Ø€Ø€ð QØ1Ø&Ø5ñ	€ð ˆx�|‰|‹~¡	¨uÔ 5Ñ5×?Ñ?À
ÓK€Ù Ð   Ð.Ô /ò.òò*
-ò?FðD ˆzÒÙ…Fð r>   