U
    .q¢jÞc  ã                   @   sœ  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 dlZd dlZ	d dl
Z	ej ej e¡¡Zej ed¡ZdZdZdZdZdZdZdd	d
dhZdZdddddgdœdddddgdœdddddgdœdddd gd!œd"dd#d$gd!œd%dd&d'gd!œd(dd)d*gd!œgZd+d,d-œd.d/d-œd0d/d-œd1œZd
d2d3ddd4d5d6gd7d8œd
d9d:ddd4d;d<gd7d8œd
d=d>ddd4d;d?gd7d8œd
d@dAdddBdCd6gd7d8œgZdDZdEZdFZedG Z dHZ!dIZ"dJZ#dKZ$dLZ%dd"d%d(hZ&dddhZ'dMdN„ Z(d�dPdQ„Z)d‚dTdU„Z*dƒdWdX„Z+dYdZ„ Z,d[d\„ Z-d]d^„ Z.d_d`„ Z/d„dbdc„Z0ddde„ Z1dfdg„ Z2dhdi„ Z3djdk„ Z4dldm„ Z5dndo„ Z6dpdq„ Z7drds„ Z8d…dtdu„Z9dvdw„ Z:dxdy„ Z;dzd{„ Z<d|d}„ Z=d~d„ Z>e?d€k�r˜e>ƒ  dS )†é    Nzlearning-hot-videos.jsonuS   å­¦ä¹ ç±»è§†é¢‘é›·è¾¾ï¼šAIæŠ€èƒ½ / å‰ªè¾‘æŠ€æœ¯ / AI+å‰ªè¾‘ä¸ºä¸»ï¼Œæ³›å­¦ä¹ ä¸ºè¾…é   é   é   é   õ   æŠ–éŸ³õ	   å°�çº¢ä¹¦õ   Bç«™ÚYouTube)zkuaishou.comzgifshow.comõ   AIæŠ€èƒ½u   AI Agent å…¥é—¨ æ•™ç¨‹ å®žæ“�u*   Codex Claude Code Gemini CLI å…¥é—¨ æ•™ç¨‹u$   Ollama æœ¬åœ°å¤§æ¨¡åž‹ å…¥é—¨ æ•™ç¨‹u   AI è‡ªåŠ¨åŒ– å·¥ä½œæµ� æ•™ç¨‹)ÚcategoryÚqueriesõ   å‰ªè¾‘æŠ€æœ¯u   å‰ªæ˜  å‰ªè¾‘ æ•™ç¨‹ å®žæ“�u   çŸ­è§†é¢‘ å‰ªè¾‘ èŠ‚å¥� æ•™ç¨‹u   PR å‰ªè¾‘ å…¥é—¨ æ•™ç¨‹u   è¾¾èŠ¬å¥‡ è°ƒè‰² å‰ªè¾‘ æ•™ç¨‹õ	   AI+å‰ªè¾‘u   AI å‰ªè¾‘ æ•™ç¨‹u   AI è§†é¢‘å‰ªè¾‘ å·¥ä½œæµ�u   AI å­—å¹• å‰ªè¾‘ æ•™ç¨‹u!   AI åˆ†é•œ çŸ­è§†é¢‘ å‰ªè¾‘ æ•™ç¨‹õ   è‹±è¯­å�£è¯­Tu   è‹±è¯­å�£è¯­ ç»ƒä¹  æ•™ç¨‹u    è‹±è¯­å�¬åŠ›å�£è¯­ æ��å�‡ æ–¹æ³•)r   Z
supplementr   õ   é˜…è¯»æ–¹æ³•u   é˜…è¯»æ–¹æ³• æ•™ç¨‹u    é«˜æ•ˆé˜…è¯» è¯»ä¹¦ç¬”è®° æ–¹æ³•õ   è‡ªæˆ‘æˆ�é•¿u   è‡ªæˆ‘æ��å�‡ æˆ�é•¿ æ–¹æ³•u    æ—¶é—´ç®¡ç�† è‡ªå¾‹ å­¦ä¹ æ–¹æ³•õ   è�Œåœºèƒ½åŠ›u   è�Œåœºæ²Ÿé€š æ•™ç¨‹u   è�Œåœºæ•ˆçŽ‡ å·¥ä½œæ–¹æ³•)zyoutube.com/watchúyoutu.beztutorial guide)ÚsitesÚsearch_suffix)zxiaohongshu.com/explorezxiaohongshu.com/discovery/itemúxhslink.comu   æ•™ç¨‹ å®žæ“� å­¦ä¹ )zdouyin.com/videozdouyin.com/noteúiesdouyin.com©r	   r   r   uP   ã€�æœ€æ–°ç‰ˆCodexå®‰è£…Gitã€‘ä¿�å§†çº§æ•™ç¨‹å’Œè®²è§£ å�šåˆ°é›¶é£Žé™©æ“�ä½œCodexz,https://www.bilibili.com/video/BV14WGw6UEYu/ÚCodexZGitu   å…¥é—¨æ•™ç¨‹uS   å·²éªŒè¯�çœŸå®ž Bç«™å­¦ä¹ é“¾æŽ¥ï¼›å¹³å�°æŽ¥å�£è¢«é™�åˆ¶æ—¶ä½œä¸ºå­¦ä¹ ç±»å…œåº•ã€‚)ÚplatformÚtitleÚurlr   ÚtagsÚnotesuz   ã€�2026æœ€æ–°ã€‘Codex æŽ¥å…¥ Gemini 3.5 Flashï½œç¬¬ä¸‰æ–¹ API é…�ç½®å®žæˆ˜ï½œmacOS + Windows å�Œç‰ˆæœ¬ï½œRouterLink æ•™ç¨‹z,https://www.bilibili.com/video/BV1F8GR6sE6t/ZAPIu   å®žæ“�æ•™ç¨‹ud   Codexçš„å®‰è£…å¹¶ä¸”å¦‚ä½•é…�ç½®è½¬æŽ¥ç¬¬ä¸‰æ–¹APIå®Œæ•´ä½¿ç”¨æ•™ç¨‹#codex #ai #å®‰è£…#å¤§æ¨¡åž‹#APIz,https://www.bilibili.com/video/BV1RNjb6JEZf/õ	   å¤§æ¨¡åž‹ui   ã€�2026æœ€æ–°ç‰ˆã€‘å…¨ç½‘æœ€é€‚å�ˆåˆ�å­¦è€…çš„Ollamaæ•™ç¨‹ï¼Œå…�è´¹å¼€æº�ï¼Œå¸¦ä½ ä»Ž0åˆ°1å�ƒé€�Ollamaï¼�z,https://www.bilibili.com/video/BV1KVd6BwEhs/ÚOllamau   æœ¬åœ°å¤§æ¨¡åž‹)!u	   å‰²éŸ­è�œu   æš´å¯Œu   æœˆå…¥ç™¾ä¸‡u   èººèµšu   æ”¶å¾’u	   è®­ç»ƒè�¥u   åŠ ç›Ÿu   éª—å±€u   å�–è¯¾u   ç ´è§£u   ç»•è¿‡u   èµ„æº�å�ˆé›†u   ç½‘ç›˜u   æ— æ°´å�°ä¸‹è½½u   æ�¬è¿�u   å�Šæ‰“ä»˜è´¹u	   ä»˜è´¹è¯¾u   å•†ä¸šå�˜çŽ°u   å®Œæ•´èµ„æ–™u	   é™„èµ„æ–™u	   å®‰è£…åŒ…u	   å…¨100é›†u   å…¨å¥—u   ä»Žå…¥é—¨åˆ°ç²¾é€šu   å¤§ç¥žu   é€Ÿæˆ�u   æŽ¥å�•u   å¸¦è´§u   è–ªèµ„ç¿»å€�u   å°‘èµ°u   æœ€å…¨æœ€ç»†u	   é›†ï¼ˆå…¨u   97é›†)u   æ•™ç¨‹u   æ•™å­¦u   å®žæ“�u   å…¥é—¨u	   ä¿�å§†çº§u   ä»Ž0åˆ°1u   ä»Žé›¶u   æŒ‡å�—ZworkflowZtutorialZguideZcourseZbeginnerZwalkthrough)ZAIZAIGCr   ZAgentu	   æ™ºèƒ½ä½“r   zClaude Codez
Gemini CLIr    u	   æ��ç¤ºè¯�ZPromptu	   è‡ªåŠ¨åŒ–u	   å·¥ä½œæµ�)u   å�³æ¢¦u   å�¯ç�µZRunwayZPikaZSorau	   æ•°å­—äºº)u   å‰ªè¾‘u   å‰ªæ˜ ZCapCutZPRZPremiereu	   è¾¾èŠ¬å¥‡u   è°ƒè‰²u	   çŸ­è§†é¢‘u   é•œå¤´u   èŠ‚å¥�u   å­—å¹•u   åŒ…è£…u   è½¬åœºZDaVinci)r   u   å�£è¯­u   å�¬åŠ›u   å�‘éŸ³u   è·Ÿè¯»u   é›…æ€�å�£è¯­u   è‹±è¯­è¡¨è¾¾zspoken english)u   é˜…è¯»u   è¯»ä¹¦u   è¯»ä¹¦ç¬”è®°u   é«˜æ•ˆé˜…è¯»u   ç²¾è¯»u   ä¹¦å�•r   )u   æˆ�é•¿u   è‡ªæˆ‘æ��å�‡u   è‡ªå¾‹u   æ—¶é—´ç®¡ç�†u   å­¦ä¹ æ–¹æ³•u   ä¹ æƒ¯u   å¤�ç›˜u   ç›®æ ‡ç®¡ç�†)u   è�Œåœºu   æ²Ÿé€šu   æ±‡æŠ¥u   è¡¨è¾¾u   æ•ˆçŽ‡u   å·¥ä½œæ–¹æ³•u   å�‘ä¸Šç®¡ç�†u   é¡¹ç›®ç®¡ç�†c                  C   s$   t  t jdd�¡} t j  | ¡ d¡S )Né   )Zhoursz%Y-%m-%d %H:%M:%S)ÚdatetimeÚtimezoneZ	timedeltaZnowÚstrftime)Ztz8© r%   ú /opt/workbuddy/hot_video_auto.pyÚnow_str¥   s    r'   úhttps://search.bilibili.com/c                 C   s`   t j | ¡}|jr*|jr*|j› d|j› �nd}d| |dddt ¡ j ¡ › dt	t
 
¡ ƒ› d�d	œS )
Nz://zhttps://search.bilibili.comzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36zQapplication/json, text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8zzh-CN,zh;q=0.9,en;q=0.8zbuvid3=zinfoc; b_nut=z; CURRENT_FNVAL=4048;)z
User-AgentZRefererZOriginZAcceptzAccept-LanguageZCookie)ÚurllibÚparseÚurlparseZschemeÚnetlocÚuuidZuuid4ÚhexÚupperÚintÚtime)ÚrefererÚparsedÚoriginr%   r%   r&   Úbrowser_headersª   s    ""úr5   é   úhttps://www.bing.com/c              
   C   sL   t jj| t|ƒd�}t jj||d��}| ¡  dd¡W  5 Q R £ S Q R X d S ©N)Zheaders)Útimeoutúutf-8Úignore)r)   ÚrequestÚRequestr5   ÚurlopenÚreadÚdecode©r   r9   r2   ZreqZrespr%   r%   r&   Ú
fetch_text·   s    rB   é   c              
   C   sR   t jj| t|ƒd�}t jj||d��$}t | ¡  dd¡¡W  5 Q R £ S Q R X d S r8   )	r)   r<   r=   r5   r>   ÚjsonÚloadsr?   r@   rA   r%   r%   r&   Ú
fetch_json½   s    rF   c                 C   s>   t jdd| pdt jd�} t  dd| ¡} t t  dd| ¡¡ ¡ S )Nz<em[^>]*>|</em>Ú ©Úflagsz<[^>]+>z\s+ú )ÚreÚsubÚIÚhtmlÚunescapeÚstrip)r   r%   r%   r&   Úclean_titleÃ   s    rQ   c                 C   s¤   | dkrd S t | ttfƒr"t| ƒS t| ƒ ¡  ¡ }zV| d¡rXtt|d d… ƒd ƒW S | d¡r|tt|d d… ƒd ƒW S tt|ƒƒW S  tk
rž   Y d S X d S )N)NrG   ú-u   ä¸‡éÿÿÿÿi'  u   äº¿i áõ)Ú
isinstancer0   ÚfloatÚstrrP   ÚlowerÚendswithÚ	Exception)ÚvalueÚtextr%   r%   r&   Únormalize_numberÉ   s    

r\   c                    s´   ˆ pd‰ t ‡ fdd„tD ƒƒ}t ‡ fdd„tD ƒƒ}|r@|r@dS |rHdS t ‡ fdd„tD ƒƒrbdS t ‡ fd	d„tD ƒƒr|d
S t ‡ fdd„tD ƒƒr–dS t ‡ fdd„tD ƒƒr°dS dS )NrG   c                 3   s   | ]}|  ¡ ˆ   ¡ kV  qd S ©N©rW   ©Ú.0Úk©r[   r%   r&   Ú	<genexpr>Û   s     z!infer_category.<locals>.<genexpr>c                 3   s   | ]}|  ¡ ˆ   ¡ kV  qd S r]   r^   r_   rb   r%   r&   rc   Ü   s     r   r   c                 3   s   | ]}|  ¡ ˆ   ¡ kV  qd S r]   r^   r_   rb   r%   r&   rc   á   s     r   c                 3   s   | ]}|  ¡ ˆ   ¡ kV  qd S r]   r^   r_   rb   r%   r&   rc   ã   s     r   c                 3   s   | ]}|  ¡ ˆ   ¡ kV  qd S r]   r^   r_   rb   r%   r&   rc   å   s     r   c                 3   s   | ]}|  ¡ ˆ   ¡ kV  qd S r]   r^   r_   rb   r%   r&   rc   ç   s     r   r
   )ÚanyÚAI_STRONG_KEYWORDSÚEDITING_KEYWORDSÚSPEAKING_KEYWORDSÚREADING_KEYWORDSÚCAREER_KEYWORDSÚGROWTH_KEYWORDS)r[   Zhas_aiZhas_editingr%   rb   r&   Úinfer_categoryÙ   s     rk   c                    sn   ˆ pd‰ t ‡ fdd„tD ƒƒr"dS t ‡ fdd„tD ƒƒ}tt t t t t }t ‡ fdd„|D ƒƒ}|ol|S )NrG   c                 3   s   | ]}|ˆ kV  qd S r]   r%   r_   rb   r%   r&   rc   î   s     z'is_learning_relevant.<locals>.<genexpr>Fc                 3   s   | ]}|  ¡ ˆ   ¡ kV  qd S r]   r^   r_   rb   r%   r&   rc   ð   s     c                 3   s   | ]}|  ¡ ˆ   ¡ kV  qd S r]   r^   r_   rb   r%   r&   rc   ò   s     )	rd   ÚLOW_VALUE_KEYWORDSÚLEARNING_KEYWORDSÚAI_KEYWORDSrf   rg   rh   rj   ri   )r[   Zhas_learningZtopic_keywordsZ	has_topicr%   rb   r&   Úis_learning_relevantì   s    ro   rG   c                    sî   | › d|› �‰ d}|t ‡ fdd„tD ƒƒ7 }|t ‡ fdd„tD ƒƒ7 }|t ‡ fdd„tD ƒƒ7 }|t ‡ fdd„tt t t D ƒƒ7 }|t ‡ fdd„tD ƒƒ8 }|r¶|t	d	t
|ƒƒ7 }|rÐ|t	d
t|ƒd ƒ7 }|rê|t	dt|ƒd ƒ7 }|S )NrJ   r   c                 3   s"   | ]}|  ¡ ˆ   ¡ krd V  qdS )é   Nr^   r_   rb   r%   r&   rc   ù   s      z!learning_score.<locals>.<genexpr>c                 3   s"   | ]}|  ¡ ˆ   ¡ krd V  qdS ©r   Nr^   r_   rb   r%   r&   rc   ú   s      c                 3   s"   | ]}|  ¡ ˆ   ¡ krd V  qdS rq   r^   r_   rb   r%   r&   rc   û   s      c                 3   s"   | ]}|  ¡ ˆ   ¡ krd V  qdS )é   Nr^   r_   rb   r%   r&   rc   ü   s      c                 3   s   | ]}|ˆ krd V  qdS )é
   Nr%   r_   rb   r%   r&   rc   ý   s      é   r!   iˆ  rp   i,  )Úsumrm   rn   rf   rg   rh   rj   ri   rl   ÚminrU   r0   )r   r   ÚplaysÚlikesÚratioÚscorer%   rb   r&   Úlearning_scoreö   s    &r{   c                 C   sd   |g}t | tƒr| nt dt| p"dƒ¡}|D ]2}t|ƒ}|rN||krN| |¡ t|ƒdkr, q`q,|S )Nu
   [,ï¼Œ#\s]+rG   rp   )rT   ÚlistrK   ÚsplitrV   rQ   ÚappendÚlen)Úrawr   r   ÚpartsÚpartÚtagr%   r%   r&   Úextract_tags  s    "
r„   c                 C   sL   |dkrdS |dkrdS |dkr$dS |dkr0dS |d	kr<d
S |dkrHdS dS )Nr   uX   å�Œæ—¶å‘½ä¸­ AI ä¸Žå‰ªè¾‘æŠ€èƒ½ï¼Œé€‚å�ˆæ²‰æ·€ä¸€æ�¡å�¯å¤�ç”¨çš„è§†é¢‘åˆ¶ä½œå·¥ä½œæµ�ã€‚r   uc   æ ‡é¢˜åŒ…å�«å‰ªè¾‘å­¦ä¹ çº¿ç´¢ï¼Œé€‚å�ˆæ‹†è§£èŠ‚å¥�ã€�å­—å¹•ã€�è½¬åœºæˆ–è°ƒè‰²ç­‰å�¯ç»ƒä¹ æŠ€èƒ½ã€‚r   uZ   ä½œä¸ºæ¯�æ—¥å°‘é‡�æ³›å­¦ä¹ è¡¥å……ï¼Œé€‚å�ˆç»ƒä¹ å�¯å¤�ç”¨è¡¨è¾¾ã€�å�‘éŸ³æˆ–å�¬è¯´è¾“å…¥ã€‚r   uW   ä½œä¸ºæ¯�æ—¥å°‘é‡�æ³›å­¦ä¹ è¡¥å……ï¼Œé€‚å�ˆæ”¹è¿›é˜…è¯»ã€�æ‘˜å½•å’Œè¯»ä¹¦ç¬”è®°æ–¹æ³•ã€‚r   uQ   ä½œä¸ºæ¯�æ—¥å°‘é‡�æ³›å­¦ä¹ è¡¥å……ï¼Œé€‚å�ˆæ��å�‡æ²Ÿé€šã€�æ±‡æŠ¥æˆ–å·¥ä½œæ•ˆçŽ‡ã€‚r   uQ   ä½œä¸ºæ¯�æ—¥å°‘é‡�æ³›å­¦ä¹ è¡¥å……ï¼Œé€‚å�ˆä¼˜åŒ–ä¹ æƒ¯ã€�å¤�ç›˜å’Œç›®æ ‡ç®¡ç�†ã€‚ua   æ ‡é¢˜åŒ…å�« AI å·¥å…·æˆ–å·¥ä½œæµ�å­¦ä¹ çº¿ç´¢ï¼Œé€‚å�ˆæŒ‰æ­¥éª¤è·Ÿå�šå¹¶äº§å‡ºä¸€ä¸ªå°�æˆ�æžœã€‚r%   )r   r   r%   r%   r&   Úbuild_why_watch  s    r…   c                 C   sL   | dkrdS | dkrdS | dkr$dS | dkr0dS | d	kr<d
S | dkrHdS dS )Nr   u^   è·Ÿå�šä¸€æ�¡ 30-60 ç§’çŸ­è§†é¢‘æµ�ç¨‹ï¼šè„šæœ¬/ç´ æ��/å­—å¹•/å‰ªè¾‘è‡³å°‘å®Œæˆ�ä¸¤ä¸ªçŽ¯èŠ‚ã€‚r   uK   å¤�åˆ»è§†é¢‘é‡Œçš„ä¸€ä¸ªå‰ªè¾‘æŠ€å·§ï¼Œä¿�å­˜å‰�å�Žå¯¹æ¯”å’Œå…³é”®å�‚æ•°ã€‚r   u@   é€‰ 5 å�¥è¡¨è¾¾è·Ÿè¯» 3 é��ï¼Œå¹¶å½•ä¸€æ®µ 60 ç§’å�£è¯­å¤�è¿°ã€‚r   uO   ç”¨è§†é¢‘æ–¹æ³•å¤„ç�† 10 é¡µä¹¦ï¼Œè¾“å‡º 3 æ�¡æ‘˜å½•å’Œ 1 æ�¡è‡ªå·±çš„ç�†è§£ã€‚r   uT   æŠŠè§†é¢‘æ–¹æ³•å¥—åˆ°ä¸€ä¸ªçœŸå®žå·¥ä½œåœºæ™¯ï¼Œå†™å‡ºä¸€æ®µæ²Ÿé€šæˆ–æ±‡æŠ¥æ¨¡æ�¿ã€‚r   uK   é€‰ä¸€ä¸ªæ–¹æ³•æ‰§è¡Œä¸€å¤©ï¼Œå¹¶è®°å½•è§¦å�‘ç‚¹ã€�é˜»åŠ›å’Œæ”¹è¿›åŠ¨ä½œã€‚uU   è·Ÿå�šè§†é¢‘ä¸­çš„ä¸€ä¸ª AI å·¥å…·æµ�ç¨‹ï¼Œå¹¶è®°å½•è¾“å…¥ã€�æ­¥éª¤ã€�è¾“å‡ºç»“æžœã€‚r%   ©r   r%   r%   r&   Úbuild_practice_task#  s    r‡   c                 C   s`   | sd S z<dt j d| i¡ }t|ddd�}t| d¡p:i  d¡ƒW S  tk
rZ   Y d S X d S )Nz)https://api.bilibili.com/x/relation/stat?Zvmidr!   zhttps://www.bilibili.com/©r9   r2   ÚdataZfollower)r)   r*   Ú	urlencoderF   r\   ÚgetrY   )Úmidr   r‰   r%   r%   r&   Úget_bilibili_fans3  s    r�   c                 C   s`  g }t ƒ }g }tD �]$}|d D �]}dtj d|ddddœ¡ }zt|dtj |¡ d	�}W nP tk
r® } z2t|ƒj	› d
|› �}	|	|kr–| 
|	¡ W Y ¢q W 5 d }~X Y nX | d¡dkrÀq | d¡pÌi  d¡pÖg D �]Z}
t|
 d¡ƒ}|
 d¡pød}|�rd|› d�nt|
 d¡�pdƒ dd¡}t|
 d¡�p8dƒ}|› d|› �}|rØd|ksØ||k�rbqØt|ƒ�snqØt|
 d¡ƒ}t|
 d¡ƒ}t|
 d¡ƒ}|�r²|�r²t|| dƒnd }t|ƒ}t|||||ƒ}|dk �rÚqØ| 
d|||||||||||t||ƒ|
 d ¡�pdtƒ |t||ƒt|ƒd!d"œ¡ | |¡ qØq q|�r\|  
d#d$ |d d%… ¡ ¡ |S )&Nr   z5https://api.bilibili.com/x/web-interface/search/type?Úvideoé   é   Z	totalrank)Zsearch_typeÚkeywordÚpageZ	page_sizeÚorderz(https://search.bilibili.com/all?keyword=)r2   ú: Úcoder   r‰   Úresultr   ÚbvidrG   zhttps://www.bilibili.com/video/ú/Zarcurlzhttp://zhttps://rƒ   rJ   zbilibili.com/videoZplayZlikerŒ   r   r!   r   ÚauthoruR   Bç«™å…¬å¼€æ�œç´¢æŽ¥å�£æŠ“å�–ï¼›ä½Žç²‰çˆ†æ¬¾æ¯”ä»…åœ¨ç²‰ä¸�æ•°å�¯èŽ·å�–æ—¶è®¡ç®—ã€‚©r   r   r   rw   Ú	playCountrx   Ú	likeCountÚfansÚfollowerCountÚplayFanRatior   ÚlearningValueScorer   r™   Ú
capturedAtÚsourceQueryÚwhyWatchÚpracticeTaskr   u   Bç«™æŽ¥å�£éƒ¨åˆ†è¯·æ±‚å¤±è´¥ï¼šõ   ï¼›rr   )ÚsetÚSEARCH_TOPICSr)   r*   rŠ   rF   ZquoterY   ÚtypeÚ__name__r~   r‹   rQ   rV   Úreplacero   r\   r�   Úroundrk   r{   r„   r'   r…   r‡   ÚaddÚjoin)r   ÚresultsÚseenÚerrorsÚtopicÚqueryr   r‰   ÚeÚerrÚitemr   r—   Z	video_urlZtag_textr[   rw   rx   r�   ry   r   rz   r%   r%   r&   Úcollect_bilibili>  sx    
ÿ
.

ír¶   c              	   C   sü   t  | p
d¡ dd¡} tj | ¡}tj |j¡}dD ]š}| |¡pFd gd }|sRq4tj 	|¡}| 
d¡r¼|dd … }z2dt|ƒ d	  }t ||  d
¡¡ dd¡}W n tk
rº   Y nX | 
d¡r4|  S q4tjd| tjd�}|røtj 	| d¡¡S | S )NrG   z\/r˜   )Úur   Úrr   Za1r   ú=r   Úasciir:   r;   Úhttpzhttps?%3A%2F%2F[^&\"'<>]+rH   )rN   rO   rª   r)   r*   r+   Úparse_qsr²   r‹   ÚunquoteÚ
startswithr   Úbase64Zurlsafe_b64decodeÚencoder@   rY   rK   ÚsearchrM   Úgroup)r   r3   r²   ÚkeyrZ   ZencodedZpaddingZencoded_urlr%   r%   r&   Údecode_possible_search_url}  s*    
 

rÄ   c                 C   s|  t j t| ƒ¡} |  d¡sdS t j | ¡}|j ¡ }|j}t j 	|j
¡}|dkr¤d|krz|dkrz| d¡rzd|d d  S d	|kr¤| d
¡r¤d| d
¡ d
¡d  S |dk�rd|krÔt j d|j|jd|j
df¡S d|k�rd|ksðd|k�rt j d|j|jdddf¡S |dk�rxd|k�r>t j d|j|jd|j
df¡S d|k�rxd|k�s\d|k�rxt j d|j|jdddf¡S dS )Nr»   rG   r	   zyoutube.comz/watchÚvz https://www.youtube.com/watch?v=r   r   r˜   zhttps://youtu.be/r   r   Zhttpszxiaohongshu.comz	/explore/z/discovery/item/r   r   z
douyin.comz/video/z/note/)r)   r*   r½   rÄ   r¾   r+   r,   rW   Úpathr¼   r²   r‹   rP   r}   Z
urlunparse)r   r   r3   ZhostrÆ   r²   r%   r%   r&   Únormalize_platform_url•  s.    




rÇ   c                 C   sH   g }t jd| pdt jt jB d�D ]"\}}t|ƒ}|r | ||f¡ q |S )Nz0<a\b[^>]*href=["\']([^"\']+)["\'][^>]*>(.*?)</a>rG   rH   )rK   ÚfindallrM   ÚSrQ   r~   )Z	page_htmlZanchorsÚhrefr   Zcleanr%   r%   r&   Úparse_anchors¯  s    $rË   c                    sæ  t |  }g }tƒ }tD �]²}t|ƒ|kr. �qÌ|d d d… D �]ˆ}|d d }d|› d|› d|d › �}	dtj |	d	d
œ¡ }
zt|
ddd�}W nJ tk
rÜ } z,| 	| › dt
|ƒj› d|› �¡ W Y ¢q>W 5 d }~X Y nX t|ƒD ]Ð\}}t|| ƒ‰ ˆ ræˆ |k�rqæt‡ fdd„tD ƒƒ�r"qæt|d | ƒ�s6qæt|d | ƒ}t||ƒ}| 	| |ˆ d d d d d d d ||t||ƒd tƒ |	t||ƒt|ƒ| › d�dœ¡ | ˆ ¡ t|ƒ|kræ �q¸qæt|ƒ|kr> qq>q|�sâ| 	| › d�¡ |S )Nr   r   r   r   zsite:rJ   r   zhttps://www.bing.com/search?zzh-CN)ÚqZsetlangr6   r7   rˆ   u    æ�œç´¢å¤±è´¥ï¼šr”   c                 3   s   | ]}|ˆ   ¡ kV  qd S r]   r^   ©r`   r‚   ©Zreal_urlr%   r&   rc   Ì  s     z*collect_search_platform.<locals>.<genexpr>u?    å…¬å¼€æ�œç´¢æŠ“å�–ï¼›æŒ‡æ ‡æ— æ³•ç¨³å®šèŽ·å�–æ—¶ä¿�ç•™ nullã€‚rš   u;    å·²æ�œç´¢ä½†æœªæ‹¿åˆ°å�¯éªŒè¯�çœŸå®žè§†é¢‘/ç¬”è®°é“¾æŽ¥ã€‚)ÚPLATFORM_SPECSr¦   r§   r   r)   r*   rŠ   rB   rY   r~   r¨   r©   rË   rÇ   rd   ÚBLOCKED_URL_PARTSro   rk   r{   r„   r'   r…   r‡   r¬   )r   r   Úmax_resultsÚspecr®   r¯   r±   r²   ZsiteZsearch_queryr   r’   r³   rÊ   r   r   rz   r%   rÎ   r&   Úcollect_search_platform¸  sl    
 

í
rÓ   c                  C   sp   t ƒ } g }tD ]\}| |d d d d d d d t|d d | d¡p>g ¡ƒ| dt|d |d ƒt|d ƒdœ–¡ q|S )Nr   rJ   r   zverified learning fallbackr   )rw   r›   rx   rœ   r�   rž   rŸ   r    r¡   r¢   r£   r¤   )r'   ÚVERIFIED_FALLBACKSr~   r{   r­   r‹   r…   r‡   )ZcapturedÚoutrµ   r%   r%   r&   Úfallback_videosñ  s&    
órÖ   c                    sÄ   g }t ƒ }t ƒ }| D ]ª}| d¡}t| d¡p0dƒ‰ t| d¡ƒ}|tkrLqt‡ fdd„tD ƒƒrdqt dd| 	¡ ¡d d… }ˆ r|rˆ |ks||kr˜q||d< | 
|¡ | ˆ ¡ | |¡ q|S )	Nr   r   rG   r   c                 3   s   | ]}|ˆ   ¡ kV  qd S r]   r^   rÍ   ©r   r%   r&   rc     s     zdedupe.<locals>.<genexpr>z\W+é$   )r¦   r‹   rV   rQ   ÚALLOWED_PLATFORMSrd   rÐ   rK   rL   rW   r~   r¬   )ÚvideosÚoutputZ	seen_urlsZseen_titlesrŽ   r   r   Z	key_titler%   r×   r&   Údedupe  s&    


rÜ   c                 C   s^   |   d¡}|   d¡pd}t|ttfƒr8|tdt|ƒƒ7 }|t|   d¡ƒpJdt|   d¡ƒpZdfS )NrŸ   r    r   rt   rw   rx   )r‹   rT   r0   rU   rv   r\   )rŽ   ry   rz   r%   r%   r&   Úsort_key  s
    
rÝ   c                    s  t | tdd�} g ‰dd„ | D ƒ}dd„ | D ƒ}dD ],‰ t‡ ‡fdd„|D ƒd ƒ}|r2ˆ |¡ q2|D ]&}tˆƒtkrx qŒ|ˆkrdˆ |¡ qd|D ]0}td	d„ ˆD ƒƒtkr® qÂ|ˆkr�ˆ |¡ q�| D ]D}tˆƒtkrÜ �qtˆƒtkrø| 	d
¡t
krøqÆ|ˆkrÆˆ |¡ qÆˆd t… S )NT)rÃ   Úreversec                 S   s   g | ]}|  d ¡tkr|‘qS r†   ©r‹   ÚMAIN_CATEGORIES©r`   rÅ   r%   r%   r&   Ú
<listcomp>(  s      zselect_best.<locals>.<listcomp>c                 S   s   g | ]}|  d ¡tkr|‘qS r†   ©r‹   ÚSUPPLEMENT_CATEGORIESrá   r%   r%   r&   râ   )  s      )r   r
   r   c                 3   s(   | ] }|  d ¡ˆ kr|ˆkr|V  qdS )r   N)r‹   rá   ©r   Úselectedr%   r&   rc   +  s       zselect_best.<locals>.<genexpr>c                 S   s   g | ]}|  d ¡tkr|‘qS r†   rã   rá   r%   r%   r&   râ   4  s      r   )ÚsortedrÝ   Únextr~   r   ÚMAIN_DAILY_TARGETÚSUPPLEMENT_DAILY_TARGETÚTARGET_DAILY_VIDEOSÚMIN_DAILY_VIDEOSr‹   rä   )rÚ   Zmain_videosZsupplement_videosrµ   r%   rå   r&   Úselect_best%  s4    rí   c                  C   sÒ  g } g }z|  t| ƒ¡ W n> tk
rX } z |  dt|ƒj› d|› �¡ W 5 d }~X Y nX dD ]`}z|  t|| dd�¡ W q^ tk
r¼ } z$|  |› dt|ƒj› d|› �¡ W 5 d }~X Y q^X q^t|ƒ}tdd„ |D ƒƒ}t|ƒt	k sð|t
k �r|  d	¡ t|tƒ  ƒ}t|ƒ}t|ƒt	k �r4|  d
t|ƒ› d�¡ tƒ dtt	tt
› dt› �dt› �ddddgd|d t | ¡¡dœ}ttddd��}tj||ddd� W 5 Q R X ttjt|ƒt	kt|ƒt|d dœdd�ƒ d S )Nu   Bç«™æŠ“å�–å¤±è´¥ï¼šr”   r   r   )rÑ   u    æŠ“å�–å¤±è´¥ï¼šc                 S   s   g | ]}|  d ¡tkr|‘qS r†   rß   rá   r%   r%   r&   râ   O  s      zmain.<locals>.<listcomp>u—   ä¸»ä½“å­¦ä¹ è§†é¢‘ä¸�è¶³ 4 æ�¡æˆ–å…¨å¹³å�°å�¯éªŒè¯�å­¦ä¹ è§†é¢‘ä¸�è¶³ 5 æ�¡æ—¶ï¼Œè¡¥å…¥å·²éªŒè¯�çœŸå®ž AI å­¦ä¹ é“¾æŽ¥ï¼›ä¸�å†�ä¿�ç•™æ—§èµ›é�“ç»“æžœã€‚u   æœ€ç»ˆå�ªå¾—åˆ° u=    æ�¡çœŸå®žä¸”è´´å�ˆå­¦ä¹ æ–¹å�‘çš„è§†é¢‘ï¼Œæœªå¼ºè¡Œå‡‘æ•°ã€‚z1daily automation via public learning-video searchrR   z1-r   r	   r   r   uÍ   AIæŠ€èƒ½/å‰ªè¾‘æŠ€æœ¯/AI+å‰ªè¾‘ä¸ºä¸»ä½“æ¯�å¤©4-5æ�¡ï¼›è‹±è¯­å�£è¯­ã€�é˜…è¯»ã€�æˆ�é•¿ã€�è�Œåœºç­‰æ³›å­¦ä¹ æ¯�å¤©1-2æ�¡ï¼›å­¦ä¹ ä»·å€¼ä¼˜å…ˆï¼Œä½Žç²‰çˆ†æ¬¾ä½œä¸ºåŠ åˆ†é¡¹ï¼›å�ªå†™å…¥çœŸå®žå�¯è·³è½¬é“¾æŽ¥ã€‚r¥   )Z	updatedAtÚsourceZtrackZminDailyVideosZtargetDailyVideosZmainDailyTargetZsupplementDailyTargetZ	platformsZselectionRulerÚ   r   Úwr:   )ÚencodingF)Úensure_asciiÚindentr   )ÚokÚcountrÆ   r   )rñ   )Úextendr¶   rY   r~   r¨   r©   rÓ   rÜ   r   rì   ÚMAIN_DAILY_MINrÖ   rí   r'   ÚTRACKrë   ré   rê   r­   ÚdictÚfromkeysÚopenÚHOT_VIDEOS_PATHrD   ÚdumpÚprintÚdumps)r   rÚ   r³   r   Z
main_countræ   ZpayloadÚfr%   r%   r&   ÚmainB  sD    .4

õr   Ú__main__)r(   )r6   r7   )rC   r(   )rG   NNN)r   )@r¿   r"   rN   rD   ÚosrK   r1   r-   Zurllib.parser)   Zurllib.requestrÆ   ÚdirnameÚabspathÚ__file__Z	WORKSPACEr­   rû   r÷   rì   rë   rö   ré   rê   rÙ   rÐ   r§   rÏ   rÔ   rl   rm   rn   re   rf   rg   rh   rj   ri   rä   rà   r'   r5   rB   rF   rQ   r\   rk   ro   r{   r„   r…   r‡   r�   r¶   rÄ   rÇ   rË   rÓ   rÖ   rÜ   rÝ   rí   r   r©   r%   r%   r%   r&   Ú<module>   s  üþ
üþ
üþ
þý	þý	þý	þýÌ@þþþ÷
ú	
ú	
ú	
úç#





?	
9&
