Ë
    <1ˆj  ã                   óœ   — 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ZdZ ej                  dd«      Z
d„ Zd„ Zd„ Zd	„ Zed
k(  r e«        yy)uQ  import_jsonl_auto.py - è°ƒåº¦å™¨è‡ªåŠ¨å¯¼å…¥å™¨ (æ ¹æ²»"å�ªæŠ“ä¸�å¯¼å…¥")

ç”¨é€”: æ—¥è·‘è°ƒåº¦å™¨è·‘å®Œè„šæœ¬å�Žè‡ªåŠ¨è°ƒç”¨, æŠŠè„šæœ¬è¾“å‡ºçš„æ•°æ�®å¯¼å…¥ search.dbã€‚
æ”¯æŒ�ä¸¤ç±»è¾“å‡º:
  1. --file <jsonlè·¯å¾„>      è„šæœ¬å†™æ–‡ä»¶åž‹ (ç›´æŽ¥å¯¼å…¥)
  2. --stdout <outæ–‡ä»¶>      è„šæœ¬ print åˆ° stdout åž‹ (æ™ºèƒ½è§£æž�)

stdout è§£æž�æ”¯æŒ�ä¸‰ç§�æ ¼å¼�:
  A. JSON_BEGIN:...:JSON_END åŒ…è£¹ (crawl_hequ ç­‰)
  B. æ•´ä½“ JSON æ•°ç»„ print(json.dumps(list, indent=2)) (crawl_shuozhou ç­‰)
  C. é€�è¡Œ JSON å¯¹è±¡ (JSONL) (crawl_baixiang ç­‰)

å­—æ®µå½’ä¸€åŒ–: title, url/page_url/link, date/pub_date/publish_date, content, attachments, site_name
ç”¨æ³•:
  python3 import_jsonl_auto.py --file /tmp/x.jsonl [--script crawl_x.py] [--site "ç«™ç‚¹å��"]
  python3 import_jsonl_auto.py --stdout /tmp/x.out [--script crawl_x.py] [--site "ç«™ç‚¹å��"]
é    Nz/root/gov_crawlerÚ	SEARCH_DBz/root/search.dbc                 óF  — g }t        j                  d| t         j                  «      }|rY	 t        j                  |j                  d«      «      }t        |t        «      rd|v r|d   }|S t        |t        «      r|}|S |g}|S | j                  «       }	 t        j                  |«      }t        |t        «      r|S t        |t        «      rd|v rt        |d   t        «      r|d   S |gS 	 |j                  «       D ]v  }|j                  «       }|sŒ|d   dv sŒ	 t        j                  |«      }t        |t        «      r|j                  |«       n!t        |t        «      r|j                  |«       Œx |S # t        $ r Y Œþw xY w# t        $ r Y Œ¥w xY w# t        $ r Y Œ¤w xY w)uF   ä»Žè„šæœ¬ stdout æ–‡æœ¬ä¸­æ��å�– JSON æ•°æ�®è®°å½•åˆ—è¡¨ (dict åˆ—è¡¨)zJSON_BEGIN:(.*?):JSON_ENDé   Úitemsr   z[{)ÚreÚsearchÚSÚjsonÚloadsÚgroupÚ
isinstanceÚdictÚlistÚ	ExceptionÚstripÚ
splitlinesÚappendÚextend)Útextr   ÚmÚdataÚstrippedÚlineÚobjs          úimport_jsonl_auto.pyÚparse_stdout_textr      sœ  € à€Eä
�	‰	Ð.°´b·d±dÓ;€AÙð
	Ü—:‘:˜aŸg™g a›jÓ)ˆDÜ˜$¤Ô%¨'°T©/Ø˜W™�ð
 ˆLô	 ˜D¤$Ô'Ø�ð ˆLð ˜�ØˆLð �z‰z‹|€Hð	Ü�z‰z˜(Ó#ˆÜ�dœDÔ!ØˆKÜ�dœDÔ!Ø˜$‰¤:¨d°7©m¼TÔ#BØ˜G‘}Ð$Ø�6ˆMð "ð ×#Ñ#Ó%ò ˆØ�z‰z‹|ˆÙØØ�‰7�dŠ?ðÜ—j‘j Ó&�Ü˜c¤4Ô(Ø—L‘L Õ%Ü ¤TÔ*Ø—L‘L Ô%øðð €Løô; ò 	Ùð	ûô ò Ùðûô ò ÙðúsN   «>E6 Á*E6 Á>E6 Â&F Â;+F Ã'F ÄAFÅ6	FÆFÆ	FÆFÆ	F ÆF c                 óÚ  — t        | j                  d«      xs | j                  d«      xs d«      j                  «       d d }t        | j                  d«      xs( | j                  d«      xs | j                  d«      xs d«      j                  «       d d }t        | j                  d	«      xs; | j                  d
«      xs( | j                  d«      xs | j                  d«      xs d«      j                  «       }t        | j                  d«      xs; | j                  d«      xs( | j                  d«      xs | j                  d«      xs d«      d d }t        | j                  d«      xs d«      j                  «       d d }| j                  d«      xs g }t        |t         «      r	 t	        j
                  |«      }t        |t        «      sg }||||||dœS # t        $ r g }Y Œ(w xY w)NÚtitleÚnameÚ iô  Úpage_urlÚurlÚlinkiè  ÚcontentÚcontent_htmlÚbodyr   Úpublish_dateÚpub_dateÚdateÚdate_pubé   Ú	site_nameéd   Úattachments)r   r!   r$   r'   r,   r.   )ÚstrÚgetr   r   r
   r   r   r   )Úitr   r!   r$   ÚpubÚsiteÚatts          r   Únormalize_itemr5   J   s°  € Ü�—‘�w“Ò7 2§6¡6¨&£>Ò7°RÓ8×>Ñ>Ó@ÀÀ#ÐF€EÜ�2—6‘6˜*Ó%ÒN¨¯©°«ÒN¸"¿&¹&À».ÒNÈBÓO×UÑUÓWÐX]ÐY]Ð^€HÜ�"—&‘&˜Ó#Òg r§v¡v¨nÓ'=ÒgÀÇÁÈÃÒgÐSU×SYÑSYÐZ`ÓSaÒgÐegÓh×nÑnÓp€GÜ
ˆb�f‰f�^Ó$Òh¨¯©¨zÓ(:Òh¸b¿f¹fÀV»nÒhÐPR×PVÑPVÐWaÓPbÒhÐfhÓ
iÐjmÐkmÐ
n€CÜˆr�v‰v�kÓ"Ò( bÓ)×/Ñ/Ó1°$°3Ð7€DØ
�&‰&�Ó
Ò
% 2€CÜ�#”sÔð	Ü—*‘*˜S“/ˆCô �cœ4Ô ØˆØ¨¸WØ¨dÀ3ñHð Høô	 ò 	ØŠCð	ús   Æ,G ÇG*Ç)G*c                 ó  — | st        d«       yt        j                  t        «      }|j	                  d«       |j	                  d«       |j	                  d«       |j	                  d«       |j	                  d«       |j	                  d«       |j	                  d	«       |j                  «        d
\  }}| D ]•  }t        |«      }|d   r|d   s|dz  }Œ|xs	 |d   xs d}|xs d}	|d   rt        j                  |d   d¬«      nd}
|j	                  d|d   f«       |j	                  d|d   |d   |d   |d   ||d   |
|	f«       |dz  }Œ— |j                  «        |j                  «        t        d|› d|› d�«       |S )Nu     [AUTO-IMP] æ— æœ‰æ•ˆè®°å½•r   zPRAGMA journal_mode=WALzPRAGMA busy_timeout=300000zPRAGMA synchronous=NORMALzsCREATE VIRTUAL TABLE IF NOT EXISTS gov_search USING fts5(
        title, site_name, summary, tokenize=trigram
    )zÓCREATE TRIGGER IF NOT EXISTS trg_gov_raw_fts_ins AFTER INSERT ON gov_raw BEGIN
      INSERT INTO gov_search(rowid, title, site_name, summary)
      VALUES (new.id, new.title, new.site_name, new.summary);
    ENDz‰CREATE TRIGGER IF NOT EXISTS trg_gov_raw_fts_del AFTER DELETE ON gov_raw BEGIN
      DELETE FROM gov_search WHERE rowid = old.id;
    ENDa  CREATE TRIGGER IF NOT EXISTS trg_gov_raw_fts_upd AFTER UPDATE ON gov_raw BEGIN
      DELETE FROM gov_search WHERE rowid = old.id;
      INSERT INTO gov_search(rowid, title, site_name, summary)
      VALUES (new.id, new.title, new.site_name, new.summary);
    END)r   r   r   r!   r   r,   ÚunknownÚimport_jsonl_autor.   F)Úensure_asciir    z&DELETE FROM gov_raw WHERE page_url = ?zŸINSERT INTO gov_raw (title, page_url, content, publish_date, site_name, source_url, status, attachments, script_name) VALUES (?, ?, ?, ?, ?, ?, 'synced', ?, ?)r$   r'   u     [AUTO-IMP] âœ… å¯¼å…¥ +u	    (è·³è¿‡ ú))
ÚprintÚsqlite3ÚconnectÚDB_PATHÚexecuteÚcommitr5   r
   ÚdumpsÚclose)ÚrecordsÚ
force_siteÚforce_scriptÚdbÚaddedÚskippedr1   Únr,   Úscript_nameÚatt_strs              r   Úwrite_recordsrL   ]   s¥  € ÙÜÐ,Ô-ØÜ	�‰œÓ	!€BØ‡J�JÐ(Ô)Ø‡J�JÐ+Ô,Ø‡J�JÐ*Ô+Ø‡J�Jð 	ô 
ð ‡J�Jð ô ð ‡J�Jð ô ð ‡J�Jð ô ð
 ‡I�I„Kà�N€Eˆ7Øò ˆÜ˜2ÓˆØ�Šz  :¢Ø�q‰LˆGØØÒ= ! K¡.Ò=°Iˆ	Ø"Ò9Ð&9ˆØFGÈÒFV”$—*‘*˜Q˜}Ñ-¸EÕBÐ\^ˆØ
�
‰
Ð;¸aÀ
¹mÐ=MÔNØ
�
‰
ð nØˆw‰Z˜˜:™¨¨)©°a¸Ñ6GÈÐTUÐV`ÑTaÐcjÐlwÐxô	
ð 	�‰
‰ðð ‡I�I„KØ‡H�H„JÜ	Ð% e W¨I°g°Y¸aÐ
@ÔAØ€Ló    c                  óJ  — t        j                  «       } | j                  dd¬«       | j                  dd¬«       | j                  ddd¬	«       | j                  d
dd¬	«       | j                  «       }|j                  �rzt
        j                  j                  |j                  «      r,t
        j                  j                  |j                  «      dk(  r-t        d|j                  › �«       t        j                  d«       g }t        |j                  dd¬«      5 }|j                  «       }d d d «       j                  «       j                  d«      rt!        |«      ng }|sat        |j                  dd¬«      5 }|D ]:  }|j                  «       }|sŒ	 |j#                  t%        j&                  |«      «       Œ< 	 d d d «       t+        ||j,                  |j.                  «      }t        j                  d«       |j0                  rÈt
        j                  j                  |j0                  «      s-t        d|j0                  › �«       t        j                  d«       t        |j0                  dd¬«      5 }|j                  «       }d d d «       t!        «      }t+        ||j,                  |j.                  «      }t        j                  d«       t        d«       t        j                  d«       y # 1 sw Y   �ŒÄxY w# t(        $ r Y �ŒŠw xY w# 1 sw Y   �ŒRxY w# 1 sw Y   Œ•xY w)Nz--fileu   JSONL æ–‡ä»¶è·¯å¾„)Úhelpz--stdoutu    è„šæœ¬ stdout è¾“å‡ºæ–‡ä»¶è·¯å¾„z--scriptr    u   è„šæœ¬å�� (å†™å…¥ script_name))ÚdefaultrO   z--siteu   å¼ºåˆ¶ site_namer   u'     [AUTO-IMP] æ–‡ä»¶ä¸�å­˜åœ¨æˆ–ä¸ºç©º: zutf-8Úignore)ÚencodingÚerrors)ú[ú{u%     [AUTO-IMP] stdout æ–‡ä»¶ä¸�å­˜åœ¨: zWUsage: import_jsonl_auto.py --file <jsonl> | --stdout <outfile> [--script X] [--site Y]r   )ÚargparseÚArgumentParserÚadd_argumentÚ
parse_argsÚfileÚosÚpathÚexistsÚgetsizer;   ÚsysÚexitÚopenÚreadr   Ú
startswithr   r   r
   r   r   rL   r3   ÚscriptÚstdout)ÚapÚargsrC   Úfr$   r   rG   r   s           r   Úmainri   ‹   sR  € Ü	×	 Ñ	 Ó	"€BØ‡O�O�HÐ#7€OÔ8Ø‡O�O�JÐ%G€OÔHØ‡O�O�J¨Ð1Q€OÔRØ‡O�O�H bÐ/A€OÔBØ�=‰=‹?€Dà‡yƒyä�w‰w�~‰~˜dŸi™iÔ(¬B¯G©G¯O©O¸D¿I¹IÓ,FÈ!Ò,KÜÐ;¸D¿I¹I¸;ÐGÔHÜ�H‰H�QŒKØˆÜ�$—)‘) g°hÔ?ð 	À1Ø—f‘f“hˆG÷	à07·±³×0JÑ0JÈ:Ô0VÔ# GÔ,Ð\^ˆÙä�d—i‘i¨'¸(ÔCð ÀqØò �DØŸ:™:›<�DÙØ ðØŸ™¤t§z¡z°$Ó'7Õ8ñ÷ô ˜g t§y¡y°$·+±+Ó>ˆÜ�‰�Œà‡{‚{Ü�w‰w�~‰~˜dŸk™kÔ*ÜÐ9¸$¿+¹+¸ÐGÔHÜ�H‰H�QŒKÜ�$—+‘+¨¸ÔAð 	ÀQØ—6‘6“8ˆD÷	ä# DÓ)ˆÜ˜g t§y¡y°$·+±+Ó>ˆÜ�‰�Œä	Ð
cÔdÜ‡H�HˆQ…K÷9	ñ 	ûô %ò Úðú÷ñ ú÷ 	ð 	úsH   ÄK/Å;LÆ$K<Æ9LÉ4LË/K9Ë<	L	ÌLÌL	Ì	LÌLÌL"Ú__main__)Ú__doc__r
   r<   r_   r[   r   rV   Ú
subprocessÚBASEÚgetenvr>   r   r5   rL   ri   Ú__name__© rM   r   ú<module>rq      s\   ðñ÷" 8× 7× 7Ó 7à€Ø
ˆ"�)‰)�KÐ!2Ó
3€ò,ò`Hò&+ò\*ðZ ˆzÒÙ…Fð rM   