
    i/                         d Z ddlmZ ddlmZ ddlZddlZddlmZ ddlm	Z	m
Z
 ddd	d	d
ddZg ZdZdZdZdZdddddZdZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd  Zd! Zd" Zd# Z d$ Z!d% Z"d& Z#d' Z$y)(z(Quark (Shenma) search engine for searxng    )	urlencode)datetimeN)html_to_text)SearxEngineAPIExceptionSearxEngineCaptchaExceptionzhttps://quark.sm.cn/	Q48816502FHTMLzh)websitewikidata_iduse_official_apirequire_api_keyresultslanguageT
   general4321)dayweekmonthyearzD\{[^{]*?"action"\s*:\s*"captcha"\s*,\s*"url"\s*:\s*"([^"]+)"[^{]*?\}c                 H    t        t        j                  t        |             S )z
    Detects if the response contains an Alibaba X5SEC CAPTCHA page.

    Quark may return a CAPTCHA challenge after 9 requests in a short period.

    Typically, the ban duration is around 15 minutes.
    )boolresearchCAPTCHA_PATTERN)htmls    $/root/searxng/searx/engines/quark.pyis_alibaba_captchar"   #   s     		/4011    c                 8    t         dvrt        dt                y )Nr   imageszUnsupported category: )quark_categoryr   )_s    r!   initr)   .   s$    22%(>~>N&OPP 3r#   c                     |d   }d| d|ddd| t         |dz
  t         z  ddd	}|t           d
   }|t           d   }t        j                  |d         r$t        dk(  rt        j                  |d         |d<   | dt	        |       |d<   |S )Npagenozhttps://quark.sm.cn/sr    )qlayoutpage)endpointparamszhttps://vt.sm.cn/api/pic/list   )querylimitstartr%   r0   r/   
time_ranger   
tl_request?url)results_per_pager'   time_range_dictgetr   )r2   r0   page_numcategory_configquery_params	query_urls         r!   requestr@   3   s    hH 0  
 8)"Q,*::
O& #>28<L/
;I6,/0^y5P%4%8%89M%N\" k9\#:";<F5MMr#   c                 `   g }| j                   }t        |      rt        dd      t        dk(  rt	        j
                  |      }|j                  di       j                  di       j                  di       j                  dg       D ]  }	 t        j                  t        |j                  d	                  }|j                  d
|j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |d    d|d    |d        t        dk(  rbi dt        dt        dt        dt         dt"        dt$        dt&        dt(        dt*        dt,        dt.        d t0        d!t0        d"t0        d#t0        d$t0        d%t0        t0        t2        t4        d&}d'}t7        j8                  ||t6        j:                        }|D ]  }	t	        j
                  |	      }|j                  di       j                  d(i       }
|j                  d)i       }|j                  d*      }|j                  |      }|sq ||
      }t=        |t>              r|jA                  |       |j                  |        |S # t        t        f$ r d }Y w xY w)+Ni  z1Alibaba CAPTCHA detected. Please try again later.)suspended_timemessager&   datahitimgInfoitempublish_timeimages.htmlimgUrlimg	bigPicUrltitlesitewidth x heighttemplater8   thumbnail_srcimg_srcrM   source
resolutionpublishedDater   additionai_pagebaike_scfinance_shuidikk_yidian_alllife_show_general_image
med_structmusic_new_songnature_result	news_uchqss_notess_docss_kvss_picss_textss_videobaike)structure_web_noveltravel_dest_overviewtravel_ranking_listz]<script\s+type="application/json"\s+id="s-data-[^"]+"\s+data-used-by="hydrate">(.*?)</script>initialData	extraDatasc)!textr"   r   r'   jsonloadsr;   r   fromtimestampint
ValueError	TypeErrorappendparse_additionparse_ai_pageparse_baike_scparse_finance_shuidiparse_kk_yidian_allparse_life_show_general_imageparse_med_structparse_music_new_songparse_nature_resultparse_news_uchqparse_ss_noteparse_ss_docparse_travel_dest_overviewparse_travel_ranking_listr   findallDOTALL
isinstancelistextend)respr   rp   rD   rG   published_datesource_category_parserspatternmatchesmatchinitial_data
extra_datasource_categoryparsersparsed_resultss                  r!   responser   S   s   G99D$)([
 	
 !zz$HHVR(,,UB7;;IrJNNvWYZ 	D&!)!7!7DHH^<T8U!V NN -88H-%)XXe_#xx4!XXg."hhv.%)']O3tH~6F"G%3		& "#
#
}#
 #
 2	#

 0#
 &'D#
 *#
 2#
 0#
 #
 }#
 l#
 \#
 l#
  |!#
" ##
$ \%#
& $0$>#<+#
0 s**WdBII6 	3E::e$D88FB/33M2FL+r2J(nnT2O-11/BG!(!6nd3NN>2 NN>2	3" N} 	* &!%&s   -JJ-,J-c                     t        | j                  di       j                  d            | j                  di       j                  d      t        | j                  di       j                  d            dS )NrM   contentrV   r8   summaryrM   r8   r   r   r;   rD   s    r!   rx   rx      sa    dhhw377	BCxx"%))%0B 7 ; ;I FG r#   c           
      >   g }| j                  dg       D ]  }t        |j                  d      t              r/dj                  t	        t
        |j                  dg                   nt        |j                  d            }	 t        j                  t        |j                  di       j                  d                  }|j                  t        |j                  d            |j                  d      t        |      |d        |S # t        t        f$ r d }Y ]w xY w)	Nr   r    | rV   timerM   r8   rM   r8   r   rX   )r;   r   r   joinmapstrr   rs   rt   ru   rv   rw   r   )rD   r   rG   r   r   s        r!   ry   ry      s    G$ 
 $((9-t4 JJs3B 789TXXi() 		"%33C28N8R8RSY8Z4[\N 	%dhhw&78xx'0!/		

( N I& 	"!N	"s   =DDDc                 L   t        | j                  di       j                  d            | j                  di       j                  d      t        | j                  di       j                  d            | j                  di       j                  d      j                  dd      dS )	NrD   rM   r8   abstractrK   http://https://rM   r8   r   	thumbnailr   r;   replacer   s    r!   rz   rz      s    dhhvr266w?@xx#''. 4 8 8 DEXXfb)--e4<<Y
S	 r#   c                 ~   dj                  d | j                  d      | j                  d      | j                  d      | j                  d      | j                  d      | j                  d      | j                  d	      fD              }t        | j                  d
            | j                  d      t        |      dS )Nr   c              3   $   K   | ]  }|r| 
 y w)N ).0infos     r!   	<genexpr>z'parse_finance_shuidi.<locals>.<genexpr>   s      	
  	
s   establish_timecompany_statuscontroled_typecompany_typecapitaladdressbusiness_scopecompany_name	title_urlr   )r   r;   r   )rD   r   s     r!   r{   r{      s    jj	
 )*)*)*(##)*	
G  dhh~67xx$( r#   c                    g }| j                  dg       D ]2  }|j                  dg       D ]  }d|v s|j                  |d           4 t        | j                  d            | j                  d      t        dj                  |            dS )Nlist_containerdot_textrM   r    r   )r;   rw   r   r   )rD   content_listsectionrG   s       r!   r|   r|      s    L88,b1 6KK 0"5 	6DT!##D$45	66 dhhw/0xx$ 67 r#   c                    g }| j                  dg       D ]  }	 t        j                  t        |j                  d                  }|j                  d|j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |d	    d
|d    |d        |S # t        t
        f$ r d }Y w xY w)NimagerH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   )r;   r   rs   rt   ru   rv   rw   rD   r   rG   r   s       r!   r}   r}      s    G"% 
	"%33C8P4QRN 	)xx)!%%88K0'*((6*!%gs4>2BC!/		

$ N I& 	"!N	"s   -B::CCc                 L   t        | j                  d            | j                  di       j                  di       j                  d      t        | j                  di       j                  d            | j                  di       j                  d      j                  dd      d	S )
NrM   rC   
statisticsnucontent_text	video_imgr   r   r   r   r   s    r!   r~   r~     s    dhhw/0xx	2&**<<@@FB 7 ; ;N KLXXi,00=EEiQ[\	 r#   c           
         g }| j                  dg       D ]i  }|j                  |d    d|d    |j                  d      t        |j                  d            |j                  d      j                  dd	      d
       k |S )Nhit3	song_namer   song_singerplay_urllyrics	image_urlr   r   r   )r;   rw   r   r   )rD   r   rG   s      r!   r   r     s    G$ 
 -.c$}2E1FGxx
+'(:;!XXk2::9jQ		

 Nr#   c                     t        | j                  d            | j                  d      t        | j                  d            dS )NrM   r8   descr   r   r   s    r!   r   r     s8    !$((7"34TXXe_YefjfnfnoufvYwxxr#   c           
         g }| j                  dg       D ]  }	 t        j                  |j                  d      d      }|j                  t        |j                  d            |j                  d      t        |j                  d            |j                  d      j                  dd	      |d
        |S # t        t        f$ r d }Y w xY w)Nfeedr   z%Y-%m-%drM   r8   r   r   r   r   )rM   r8   r   r   rX   )r;   r   strptimeru   rv   rw   r   r   r   s       r!   r   r   #  s    G$ 
	"%..txx/?LN
 	%dhhw&78xx'(;<!XXg.66y*M!/	

  N I& 	"!N	"s   %B77C
Cc                 R   d }	 t        | j                  di       j                  d            }|dk7  rt        j                  |      }	 | j                  dg       d   j                  d      j                  dd      }t        | j                  di       j                  d	      xs | j                  d
            | j                  di       j                  d      xs$ | j                  d      xs | j                  d      t        | j                  di       j                  d	      xsG | j                  di       j                  d      xs$ | j                  d      xs | j                  d            ||dS # t        t
        f$ r Y @w xY w# t        t
        t        f$ r d }Y (w xY w)NsourcePropsr   r   picListPropssrcr   r   
titlePropsr   rM   dest_url
normal_urlr8   summaryPropsrC   replyContent	show_bodyr   )rM   r8   r   rX   r   )	rt   r;   r   rs   ru   rv   r   
IndexErrorr   )rD   r   	timestampr   s       r!   r   r   8  s   N377?@	 >%33I>NHH^R0377>FFyR\]	
 HH\2&**95 !xx 

 xxr*..z: 88L! 88E?HH^R(,,Y7  xx	2&**>:  xx$	  xx
 (+  	" 
 	:. 	s$   AE6 	4F 6F	F	F&%F&c                    	 t        j                  t        | j                  di       j                  d                  }t        | j                  di       j                  d            | j                  di       j                  d      t        | j                  di       j                  d            |dS # t        t
        f$ r d }Y w xY w)NrV   r   rM   r   r   r   r   )r   rs   rt   r;   ru   rv   r   )rD   r   s     r!   r   r   a  s    !//DHHXr4J4N4Nv4V0WX
 dhhw377	BCxx"%))*5B 7 ; ;I FG'	  	" s   =B5 5C	C	c                     t        | j                  di       j                  d            | j                  di       j                  d      t        | j                  di       j                  d            dS )NstrongrM   	baike_url
baike_textr   r   r   s    r!   r   r   o  sa    dhhx488ABxx"%))+62 6 : :< HI r#   c                     t        | j                  di       j                  d            | j                  di       j                  d      t        | j                  di       j                  d            dS )NrM   rp   r8   	title_tagr   r   r   s    r!   r   r   w  sa    dhhw377?@xx$((/" 5 9 9+ FG r#   )%__doc__urllib.parser   r   r   rq   searx.utilsr   searx.exceptionsr   r   about
categoriespagingr9   r'   time_range_supportr:   r   r"   r)   r@   r   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   r   r   r   r#   r!   <module>r      s    . "  	  $ Q &	 
	  sS#FY2Q
@L^2..y*&Rr#   