Ë
    cQêj•_  ã            ?       ór  — 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mZmZ ddl	m	Z	m
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 dd
lmZ  ej.                  «       dz  dz  dz  Z ej2                  e«      Zi dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“d d!“d"d#“d$d%“d&d'“d(d)“d*d+“Zd,ej:                  d-ej<                  d.ee    dz  d/e fd0„Z!d1e d2e"e#e e f      d3e d4e dz  d/df
d5„Z$d6e ez  d2e"e#e e f      d/dfd7„Z%d8e ez  d2e"e#e e f      d/dfd9„Z&d:d;œd2e"e#e e f      d<e'd/dfd=„Z(d1e d/e fd>„Z)d?e d@e d4e dAe dz  dBe'd/dfdC„Z*	 	 	 dådDdEœd1e dFe"e#e e f      d3e dAe dz  dGe+dz  dHe dz  dBe'd/dfdI„Z, ejZ                  dD¬J«      dædK„«       Z.dædL„Z/e.ja                  «       d/e fdM„«       Z1e.ja                  «        ejd                  dNdOdP¬Q«       ejd                  dRdSdT¬Q«       ejd                  dUdVdWdX¬Y«       ejd                  dZd[d\ ejf                  g d]¢«      ¬^«       ejd                  d_d` ejf                  g da¢«      db¬c«       ejd                  ddded e+df¬g«       ejd                  dhdide+dj¬g«       ejd                  dkdldmg ejf                  g dn¢«      dDe!¬o«       ejd                  dpdqdr¬Q«       ejd                  dsdtdDd:du¬v«       ejd                  dwdxdy¬Q«       ejd                  dzd{d d|¬Y«       ejd                  d}d~d¬Q«       ejd                  d€d�dDd‚¬Y«       ejd                  dƒd„dDd:d…¬v«      d1e d†e dz  d‡e dˆe d‰e dz  dŠe+dz  d‹e+dŒe d�e dz  dŽe dz  dGe+dAe dz  d�e'dBe'd<e'd/df d�„«       «       «       «       «       «       «       «       «       «       «       «       «       «       «       «       Z4e.ja                  «        ejd                  dNdOd‘¬Q«       ejd                  dRdSd’¬Q«       ejd                  dUdVdWdX¬Y«       ejd                  dZd[d\ ejf                  g d]¢«      ¬^«       ejd                  d_d` ejf                  g da¢«      ¬“«       ejd                  ddded e+df¬g«       ejd                  dhdide+dj¬g«       ejd                  dkdldmg ejf                  g d”¢«      dDe!¬o«       ejd                  d•d– ejf                  g d—¢«      ¬“«       ejd                  d˜d™ ejf                  g dš¢«      ¬“«       ejd                  d›dœ ejf                  g d�¢«      ¬“«       ejd                  dždŸ ejf                  g d ¢«      ¬“«       ejd                  d¡d¢ ejf                  g d£¢«      ¬“«       ejd                  dpdqdr¬Q«       ejd                  dsdtdDd:du¬v«       ejd                  dwdxdy¬Q«       ejd                  dzd{d d|¬Y«       ejd                  d}d~d¬Q«       ejd                  d€d�dDd‚¬Y«       ejd                  dƒd„dDd:d…¬v«      d1e d†e dz  d‡e dˆe d‰e dz  dŠe+dz  d‹e+dŒe d¤e dz  d¥e dz  d¦e dz  d§e dz  d¨e dz  dŽe dz  dGe+d�e dz  dAe dz  d�e'dBe'd<e'd/df*d©„«       «       «       «       «       «       «       «       «       «       «       «       «       «       «       «       «       «       «       «       «       Z5e.ja                  «        ejd                  dNdOdª¬Q«       ejd                  dRdSd«¬Q«       ejd                  dUdVdWdX¬Y«       ejd                  dZd[d\ ejf                  g d]¢«      ¬^«       ejd                  d_d` ejf                  g d¬¢«      d­¬c«       ejd                  ddded e+df¬g«       ejd                  dhdide+dj¬g«       ejd                  dkdldmg ejf                  g d®¢«      dDe!¬o«       ejd                  d¯d° ejf                  d±d²g«      ¬“«       ejd                  dsd³ ejf                  g d´¢«      ¬“«       ejd                  d¡dµ ejf                  d¶d·g«      ¬“«       ejd                  dpdqdr¬Q«       ejd                  d}d~d¬Q«       ejd                  d€d�dDd‚¬Y«       ejd                  dƒd„dDd:d…¬v«      d1e d†e dz  d‡e dˆe d‰e dz  dŠe+dz  d‹e+dŒe d¸e dz  d¹e dz  dºe dz  d�e dz  dAe dz  dBe'd<e'd/df d»„«       «       «       «       «       «       «       «       «       «       «       «       «       «       «       «       Z6e.ja                  «        ejd                  dNdOd¼¬Q«       ejd                  dRdSd½¬Q«       ejd                  dUdVdWdX¬Y«       ejd                  dZd[d\ ejf                  g d]¢«      ¬^«       ejd                  d_d` ejf                  g da¢«      db¬c«       ejd                  ddded e+df¬g«       ejd                  dhdide+dj¬g«       ejd                  dkdldmg ejf                  g d¾¢«      dDe!¬o«       ejd                  dpdqdr¬Q«       ejd                  d}d~d¬Q«       ejd                  d€d�dDd‚¬Y«       ejd                  dƒd„dDd:d…¬v«      d1e d†e dz  d‡e dˆe d‰e dz  dŠe+dz  d‹e+dŒe d�e dz  dAe dz  dBe'd<e'd/dfd¿„«       «       «       «       «       «       «       «       «       «       «       «       «       Z7e.ja                  «        ejd                  dNdOdÀ¬Q«       ejd                  dRdSdÁ¬Q«       ejd                  ddded e+df¬g«       ejd                  dhdide+dj¬g«       ejd                  dkdldmg ejf                  g dÂ¢«      dDe!¬o«       ejd                  dpdqdr¬Q«       ejd                  d}d~d¬Q«       ejd                  d€d�dDd‚¬Y«       ejd                  dƒd„dDd:d…¬v«      d1e d†e dz  dŠe+dz  d‹e+dŒe d�e dz  dAe dz  dBe'd<e'd/dfdÃ„«       «       «       «       «       «       «       «       «       «       Z8e.ja                  «        ejd                  dÄdÅdDdÆ¬Ç«       ejd                  dÈdÉdÊdË ejf                  g dÌ¢«      dÍ¬g«       ejd                  dpdqdÎ¬Q«       ejd                  d}d~d¬Q«       ejd                  d€d�dDd‚¬Y«      d?e dÊe d�e dz  dAe dz  dBe'd/dfdÏ„«       «       «       «       «       «       Z9e.ja                  «        ejd                  d}d~d¬Q«      dAe dz  d/dfdÐ„«       «       Z:e.ja                  «        ejd                  dsdÑdDdÒ¬Ó«       ejd                  dZdÔdDdÕ¬Ó«       ejd                  dÖd×dØ¬Y«       ejd                  dÙdÚe+dÛ¬g«       ejd                  dÜdDdÝ¬Ó«       ejd                  d}d~d¬Q«      dÞe'dße'dàe dáe+dâe'dAe dz  d/dfdã„«       «       «       «       «       «       «       Z;edäk(  r e/«        yy)çzCLI tool for DDGS.é    N)ÚThreadPoolExecutorÚas_completed)ÚdatetimeÚtimezone)ÚPath)Úunquoteé   )Ú__version__)ÚDDGS)Ú_expand_proxy_tb_aliasz.cacheÚddgszapi.pidÚblackÚredé   Úgreené   Úyellowé   Úblueé   Úmagentaé   Úcyané   Úbright_blacké   Ú
bright_redé	   Úbright_greené
   Úbright_yellowé   Úbright_blueé   Úbright_magentaé   Úbright_cyané   Úwhiteé   Úbright_whiteÚ_ctxÚ_paramÚvalueÚreturnc                 óJ   — |�!t        |t        «      rdj                  |«      S y)Nú,Ú )Ú
isinstanceÚtupleÚjoin)r,   r-   r.   s      úM/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/ddgs/cli.pyÚ_convert_tuple_to_csvr7   -   s"   € ØÐœZ¨¬uÔ5Ø�x‰x˜‹ÐØó    ÚqueryÚdataÚfunction_nameÚfilenamec                 ó  — |r#|j                  d«      r|j                  dd«      nd |f\  }}|xs- |› d| › dt        j                  t        j
                  ¬«      d›�}|dk(  rt        |› d|› �|«       y |dk(  rt        |› d|› �|«       y y )	N)z.csvz.jsonú.r	   Ú_©Útzú%Y%m%d_%H%M%SÚcsvÚjson)ÚendswithÚrsplitr   Únowr   ÚutcÚ	_save_csvÚ
_save_json)r9   r:   r;   r<   Úexts        r6   Ú
_save_datarL   3   s˜   € Ù/7¸H×<MÑ<MÐN_Ô<`�H—O‘O C¨Ô+ÐgkÐmuÐfv�M€HˆcØÒc˜m˜_¨A¨e¨W°A´h·l±lÄhÇlÁlÔ6SÐTaÐ5bÐc€HØ
ˆe‚|Ü�X�J˜a ˜uÐ% tÕ,Ø	�ŠÜ�h�Z˜q  Ð&¨Õ-ð 
r8   Újsonfilec                 ó´   — t        | «      j                  dd¬«      5 }|j                  t        j                  |dd¬«      «       d d d «       y # 1 sw Y   y xY w)NÚwúutf-8)ÚencodingFr   )Úensure_asciiÚindent)r   ÚopenÚwriterD   Údumps)rM   r:   Úfiles      r6   rJ   rJ   <   sM   € Ü	ˆh‹×	Ñ	˜S¨7Ð	Ó	3ð C°tØ�
‰
”4—:‘:˜d°¸qÔAÔB÷C÷ Cñ Cús   �(AÁAÚcsvfilec                 ó   — t        | «      j                  ddd¬«      5 }|rZ|d   j                  «       }t        j                  ||t        j
                  ¬«      }|j                  «        |j                  |«       d d d «       y # 1 sw Y   y xY w)NrO   r2   rP   )ÚnewlinerQ   r   )Ú
fieldnamesÚquoting)r   rT   ÚkeysrC   Ú
DictWriterÚQUOTE_MINIMALÚwriteheaderÚ	writerows)rX   r:   rW   ÚheadersÚwriters        r6   rI   rI   A   sv   € Ü	ˆg‹×	Ñ	˜C¨°gÐ	Ó	>ð #À$ÙØ˜1‘g—l‘l“nˆGÜ—^‘^ D°WÄc×FWÑFWÔXˆFØ×ÑÔ Ø×Ñ˜TÔ"÷#÷ #ñ #ús   žABÂBF©Úno_colorre   c          	      óâ  — t         j                  j                  «       }|sd}| rËt        | d¬«      D ]º  \  }}|r|› dd› �n|› d�}t	        j
                  |dd¬	«       t        |j                  «       d¬«      D ]d  \  }\  }}|r-|d
v rdnd}	|dk(  rdn|}
t	        j                  |› |	ddd¬«      }n|}
|}t	        j
                  |
d›|› �d|s	t        |   ndd¬«       Œf |sŒ±t        «        Œ¼ y y )NTr	   ©Ústartz.	    zN==============================================================================r>   r   r)   )ÚbgÚfg)ÚcontentÚhrefÚimageÚsourceÚ	thumbnailÚurli,  éN   Údetected_languageÚlanguager2   z            )ÚwidthÚinitial_indentÚsubsequent_indentÚpreserve_paragraphsz<12)ri   rj   Úoverline)
ÚsysÚstdoutÚisattyÚ	enumerateÚclickÚsechoÚitemsÚ	wrap_textÚCOLORSÚinput)r:   re   Úis_ttyÚiÚeÚsepÚjÚkÚvrt   ÚtitleÚtexts               r6   Ú_print_datarŒ   J   s  € Ü�Z‰Z×ÑÓ €FÙØˆÙÜ˜d¨!Ô,ò 	‰DˆAˆqÙ-3�Q�C�w˜x˜jÑ)¸A¸3¸a¸ˆCÜ�K‰K˜ ¨GÕ4Ü& q§w¡w£y¸Ô:ò x‘	�‘6�A�qÙØ#$Ð(bÑ#b™CÐhj�EØ*+Ð/BÒ*B™JÈ�EÜ Ÿ?™?Ø˜#Ø#Ø')Ø*2Ø,0ô‘Dð �EØ�DÜ—‘˜u S˜k¨$¨Ð0°WÑRZÄÈÂÐ`gÐrvÖwðxò Ü•ñ'	ð r8   c                 ó  — | j                  dd«      j                  dd«      j                  dd«      j                  dd«      j                  dd«      j                  d	d«      j                  d
d«      j                  dd«      S )NÚfiletyper2   ú:ú"ú'Úsiteú r?   ú/ú\)Úreplace)r9   s    r6   Ú_sanitize_queryr—   e   si   € à�‰�j "Ó%ß	‰��bÓ	ß	‰��cÓ	ß	‰�˜Ó	ß	‰��cÓ	ß	‰��cÓ	ß	‰��sÓ	ß	‰��bÓ	ð	r8   rp   Údir_pathÚproxyÚverifyc                óv  — 	 t        j                  |ddd|¬«      j                  | «      }|j                  dk(  rGt	        |«      |d d z  }|j                  d«      5 }|j                  |j                  «       d d d «       y y # 1 sw Y   y xY w# t        $ r!}t        j                  d| |«       Y d }~y d }~ww xY w)NÚrandomr    )r™   ÚimpersonateÚimpersonate_osÚtimeoutrš   éÈ   ÚwbzError download_file url=%s: %r)ÚprimpÚClientÚgetÚstatus_coder   rT   rU   rk   Ú	ExceptionÚloggerÚdebug)	rp   r˜   r<   r™   rš   ÚrespÚfrW   Úexs	            r6   Ú_download_filer¬   r   s³   € ð	@Ü�|‰| %°XÈhÐ`bÐkqÔr×vÑvØó
ˆð ×Ñ˜sÒ"Ü�X“ ¨$¨3 Ñ/ˆAØ—‘˜“ð ) Ø—
‘
˜4Ÿ<™<Ô(÷)ð )ð #÷)ð )ûäò @Ü�‰Ð5°s¸B×?Ñ?ûð@ús6   ‚AB ÁBÁ8B ÂBÂB ÂB Â	B8ÂB3Â3B8T©rš   ÚresultsÚthreadsÚpathnamec          
      óÌ  — |xs- |› d| › dt        j                  t        j                  ¬«      d›�}t	        |«      j                  dd¬«       |€dn|}t        |¬«      5 }g }	t        |d¬	«      D ]t  \  }
}|d
k(  r|d   n|d   }t        |j                  d«      d   j                  d«      d   «      }|j                  t        |||
› d|› �||¬«      }|	j                  |«       Œv t        j                  t        |	«      dddd¬«      5 }t!        |	«      D ]#  }|j#                  «        |j%                  d«       Œ% 	 d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)Nr?   r@   rB   T©ÚparentsÚexist_okr    )Úmax_workersr	   rg   Úimagesrm   rl   r”   éÿÿÿÿú?r   r­   ÚDownloadingé2   )ÚlengthÚlabelÚshow_percentÚshow_posrt   )r   rG   r   rH   r   Úmkdirr   r|   r   ÚsplitÚsubmitr¬   Úappendr}   ÚprogressbarÚlenr   ÚresultÚupdate)r9   r®   r;   r™   r¯   r°   rš   ÚpathÚexecutorÚfuturesr„   Úresrp   r<   rª   ÚbarÚfutures                    r6   Ú_download_resultsrÍ      si  € ð Ò_˜-˜¨¨%¨°´(·,±,Ä(Ç,Á,Ô2OÐP]Ð1^Ð_€DÜˆƒJ×Ñ˜T¨DÐÔ1à�O‰b¨€GÜ	¨Ô	0ð °HØˆÜ ¨qÔ1ò 	‰FˆAˆsØ"/°8Ò";�#�g’,ÀÀVÁˆCÜ˜sŸy™y¨›~¨bÑ1×7Ñ7¸Ó<¸QÑ?Ó@ˆHØ—‘¤°°T¸a¸SÀÀ(ÀÐ;LÈeÐ\b�ÓcˆAØ�N‰N˜1Õð		ô ×ÑÜ�w“<ØØØØô
ð 		ð Ü& wÓ/ò �Ø—‘”Ø—
‘
˜1•ñ÷		÷ð ÷		ð 		ú÷ð ús%   Á B*EÄ
2EÄ=EÅE	ÅEÅE#)Úchainc                   ó   — y)zDDGS CLI tool.N© rÐ   r8   r6   ÚclirÑ   ¡   s   � r8   c                  óè   — t        j                  t         j                  ¬«       	 t        «        y# t        $ r7} t        j                  t        | «      j                  › d| ›�«       Y d} ~ yd} ~ ww xY w)z=Run the CLI tool in try-except block to catch all exceptions.)Úlevelz: N)	ÚloggingÚbasicConfigÚWARNINGrÑ   r¦   r}   ÚechoÚtypeÚ__name__)r«   s    r6   Úsafe_entry_pointrÚ   ¦   sS   € ä×ÑœgŸo™oÕ.ð3Ü�øÜò 3Ü�
‰
”d˜2“h×'Ñ'Ð(¨¨2¨&Ð1×2Ñ2ûð3ús   ¦
1 ±	A1º-A,Á,A1c                  ó,   — t        t        «       t        S )zPrint and return version.)Úprintr
   rÐ   r8   r6   ÚversionrÝ   ¯   s   € ô 
Œ+ÔÜÐr8   z-qz--queryztext search query)Úhelpz-kz
--keywordsz(Deprecated) text search queryz-rz--regionzus-enzus-en, ru-ru, etc.)ÚdefaultrÞ   z-sz--safesearchÚmoderate)Úonrà   Úoff)rß   rØ   z-tz--timelimit)ÚdrO   ÚmÚyzday, week, month, year)rØ   rÞ   ú-mz--max_resultszmaximum number of results)rß   rØ   rÞ   z-pz--pagezpage number of resultsz-bz	--backendÚauto)rç   ÚallÚbingÚbraveÚ
duckduckgoÚgoogleÚ
grokipediaÚmojeekÚ	startpageÚyandexÚyahooÚ	wikipedia)rß   rØ   ÚmultipleÚcallbackz-oz--outputzGcsv, json or filename.csv|json (save the results to a csv or json file)z-dz
--downloadz-download results. -dd to set custom directory)Úis_flagrß   rÞ   z-ddz--download-directoryz!Specify custom download directoryz-thz	--threadszdownload threads, default=10z-prz--proxyz=the proxy to send requests, example: socks5h://127.0.0.1:9150z-vz--verifyz"verify SSL when making the requestz-ncz
--no-colorzdisable color outputÚkeywordsÚregionÚ
safesearchÚ	timelimitÚmax_resultsÚpageÚbackendÚoutputÚdownload_directoryÚdownloadc          
      óì   — t        t        |«      |¬«      j                  | |||||||¬«      }t        |xs | «      } |rt	        | |d|¬«       |rt        | |d||
||	¬«       |s|st        ||¬«       yyy)z/CLI function to perform a DDGS text metasearch.©r™   rš   ©r9   rö   r÷   rø   rù   rú   rû   rü   r‹   ©r<   ©r;   r™   r¯   rš   r°   rd   N)r   r   r‹   r—   rL   rÍ   rŒ   )r9   rö   r÷   rø   rù   rú   rû   rü   rý   rþ   r¯   r™   rÿ   rš   re   r:   s                   r6   r‹   r‹   ¶   sš   € ôr Ô,¨UÓ3¸FÔC×HÑHØØØØØØØØð Ió 	€Dô ˜HÒ-¨Ó.€EÙÜ�5˜$ °Õ8ÙÜØØØ ØØØØ'õ	
ñ ™(Ü�D 8Ö,ð #ˆ6r8   zimages search queryz (Deprecated) images search query)rØ   )rç   rè   ré   rë   z-sizez--size)ÚSmallÚMediumÚLargeÚ	Wallpaperz-cz--color)ÚcolorÚ
MonochromeÚRedÚOrangeÚYellowÚGreenÚBlueÚPurpleÚPinkÚBrownÚBlackÚGrayÚTealÚWhitez-typez--type_image)ÚphotoÚclipartÚgifÚtransparentÚlinez-lz--layout)ÚSquareÚTallÚWidez-licz--license_image)ÚanyÚPublicÚShareÚShareCommerciallyÚModifyÚModifyCommerciallyÚsizer	  Ú
type_imageÚlayoutÚlicense_imagec                óö   — t        t        |«      |¬«      j                  | |||||||||	|
||¬«      }t        |xs | «      } |rt	        | |d|¬«       |rt        | |d||||¬«       |s|st        ||¬«       yyy)z1CLI function to perform a DDGS images metasearch.r  )r9   rö   r÷   rø   rù   rú   rû   rü   r%  r	  r&  r'  r(  r¶   ©r;   r<   r  rd   N)r   r   r¶   r—   rL   rÍ   rŒ   )r9   rö   r÷   rø   rù   rú   rû   rü   r%  r	  r&  r'  r(  rþ   r¯   rý   r™   rÿ   rš   re   r:   s                        r6   r¶   r¶   
  s©   € ôZ Ô,¨UÓ3¸FÔC×JÑJØØØØØØØØØØØØØ#ð Kó €Dô ˜HÒ-¨Ó.€EÙÜ�5˜$¨hÀÕHÙÜØØØ"ØØØØ'õ	
ñ ™(Ü�D 8Ö,ð #ˆ6r8   zvideos search queryz (Deprecated) videos search query)rã   rO   rä   zday, week, month)rç   rè   rë   z-resz--resolutionÚhighÚstandartz
--duration)ÚshortÚmediumÚlongz--license_videosÚcreativeCommonÚyoutubeÚ
resolutionÚdurationÚlicense_videosc                óÀ   — t        t        |«      |¬«      j                  | |||||||||	|
¬«      }t        |xs | «      } |rt	        | |d|¬«       yt        ||¬«       y)z1CLI function to perform a DDGS videos metasearch.r  )r9   rö   r÷   rø   rù   rú   rû   rü   r2  r3  r4  Úvideosr*  rd   N)r   r   r6  r—   rL   rŒ   )r9   rö   r÷   rø   rù   rú   rû   rü   r2  r3  r4  rý   r™   rš   re   r:   s                   r6   r6  r6  w  su   € ôT Ô,¨UÓ3¸FÔC×JÑJØØØØØØØØØØØ%ð Kó €Dô ˜HÒ-¨Ó.€EÙÜ�5˜$¨hÀÖHä�D 8Ö,r8   znews search queryz(Deprecated) news search query)rç   rè   ré   rë   rñ   c
          
      óº   — t        t        |	«      |
¬«      j                  | |||||||¬«      }t        |xs | «      } |rt	        | |d|¬«       yt        ||¬«       y)z/CLI function to perform a DDGS news metasearch.r  r  Únewsr*  rd   N)r   r   r8  r—   rL   rŒ   )r9   rö   r÷   rø   rù   rú   rû   rü   rý   r™   rš   re   r:   s                r6   r8  r8  µ  sl   € ôH Ô,¨UÓ3¸FÔC×HÑHØØØØØØØØð Ió 	€Dô ˜HÒ-¨Ó.€EÙÜ�5˜$¨f¸vÖFä�D 8Ö,r8   zbooks search queryz(Deprecated) books search query)rç   rè   Úannasarchivec                ó–   — t        t        |«      |¬«      j                  | ||||¬«      }	|rt        | |	d|¬«       yt	        |	|¬«       y)z0CLI function to perform a DDGS books metasearch.r  )r9   rö   rú   rû   rü   Úbooksr*  rd   N)r   r   r;  rL   rŒ   )
r9   rö   rú   rû   rü   rý   r™   rš   re   r:   s
             r6   r;  r;  ê  sS   € ô< Ô,¨UÓ3¸FÔC×IÑIØØØØØð Jó €Dñ Ü�5˜$¨gÀÖGä�D 8Ö,r8   z-uz--urlzURL to extract content from)ÚrequiredrÞ   z-fz--formatÚfmtÚtext_markdown)r>  Ú
text_plainÚ	text_richr‹   rk   zOutput formatz2json or filename.json (save the results to a file)c          	      óÂ  — t        t        |«      |¬«      j                  | |¬«      }|r]|j                  «       D ��ci c](  \  }}|t	        |t
        «      r|j                  «       n|“Œ* }}}t        t        | «      |gd|¬«       yt        j                  d| › d�«       |d   }	t        j                  t	        |	t
        «      r|	j                  «       n|	«       yc c}}w )	z+CLI function to extract content from a URL.r  )rp   r=  Úextractr  zURL: ú
rk   N)r   r   rB  r   r3   ÚbytesÚdecoderL   r—   r}   r×   )
rp   r=  rý   r™   rš   r:   rˆ   r‰   Ústr_datark   s
             r6   rB  rB    sº   € ô, Ô,¨UÓ3¸FÔC×KÑKÐPSÐY\ÐKÓ]€DÙØ]a×]gÑ]gÓ]i×#jÑUYÐUVÐXY A´ZÀÄ5Ô5I q§x¡x¤zÈqÑ$PÐ#jˆÑ#jÜ”? 3Ó'¨(¨°YÈÖPä�
‰
�U˜3˜%˜r�?Ô#Ø�y‘/ˆÜ�
‰
¤z°'¼5Ô'A�7—>‘>Ô#ÀwÕOùó $ks   ½-Cc                 óè   — 	 ddl m} | r t        | «      xs | t        j                  d<   ddl}|j                  |j                  «       «       y# t        $ r t        j                  dd¬«       Y yw xY w)a™  Start DDGS MCP server over stdio for local MCP clients.

    Examples:
        ddgs mcp                            # Start MCP server using stdio transport
        ddgs mcp -pr socks5h://127.0.0.1:9150  # With proxy

    MCP client configuration:
        {
          "mcpServers": {
            "ddgs": {
              "command": "ddgs",
              "args": ["mcp"]
            }
          }
        }

    r   )ÚmcpzCError: MCP dependencies not installed. Run: pip install 'ddgs[mcp]'T©ÚerrNÚ
DDGS_PROXY)Úddgs.api_server.mcprH  ÚImportErrorr}   r×   r   ÚosÚenvironÚasyncioÚrunÚrun_stdio_async)r™   Ú
mcp_serverrP  s      r6   rH  rH  5  sc   € ð(Ý9ñ
 Ü#9¸%Ó#@Ò#IÀEŒ�
‰
�<Ñ ãà‡K�K�
×*Ñ*Ó,Õ-øô ò Ü�
‰
ÐXÐ^bÕcÙðús   ‚A Á A1Á0A1z--detachz,Run the server in detached mode (background))rõ   rÞ   z--stopzStop the detached serverú--hostz0.0.0.0zHost to bind the server toú--porti  zPort to bind the server toz--reloadz"Enable auto-reload on code changesÚdetachÚstopÚhostÚportÚreloadc           
      ó,  — t         j                  j                  dd¬«       |ržt         j                  «       st	        j
                  dd¬«       yt        t         j                  «       j                  «       «      }	 t        j                  |d«       t	        j
                  d|› d�«       t         j                  d¬«       y	 ddl}ddl}	t        j"                  j%                  «       }
|rt'        |«      xs ||
d<   | �rddl}t*        j,                  dddd|dt/        |«      g}|j1                  ||j2                  |j2                  |
¬«      }|j5                  d«       |j7                  «       �%t	        j
                  d|j8                  › �d¬«       yt         j;                  t/        |j<                  «      «       t	        j
                  d|› d|› d|j<                  › d�«       |rt	        j
                  d|
d   › �«       yyt	        j
                  d|› d|› �«       |rt	        j
                  d|
d   › �«       t	        j
                  d«       |r|
d   t        j"                  d<   |	j?                  d||d|¬«       y# t        $ r t	        j
                  d	|› d
�«       Y �Œút        $ r%}t	        j
                  d|› �d¬«       Y d}~�Œ"d}~ww xY w# t         j                  d¬«       w xY w# t         $ r t	        j
                  dd¬«       Y yw xY w) aè  Start/stop the DDGS API server.

    Starts a FastAPI server with REST endpoints for search tools.
    Supports text, image, news, video, and book search.

    Examples:
        ddgs api              # Start server in foreground
        ddgs api -d           # Start server in detached mode
        ddgs api -s           # Stop the detached server
        ddgs api --host 127.0.0.1 --port 9000  # Bind to specific host/port
        ddgs api -pr socks5h://127.0.0.1:9150  # Use proxy

    Tr²   z2No detached server is running (PID file not found)rI  Nr*   zDDGS API server stopped (PID: ú)zServer process (PID: z') was not running, cleaning up PID filezFailed to stop server: )Ú
missing_okr   zCError: API dependencies not installed. Run: pip install 'ddgs[api]'rK  ræ   Úuvicornzddgs.api_server:fastapi_apprT  rU  )rz   ÚstderrÚenvg      à?z1Failed to start server: process exited with code z3DDGS API server started in detached mode on http://r�   z (PID: zUsing proxy: z#Starting DDGS API server on http://zPress Ctrl+C to stopÚinfo)rX  rY  Ú	log_levelrZ  ) Ú	_PID_FILEÚparentr¿   Úexistsr}   r×   ÚintÚ	read_textÚstriprN  ÚkillÚProcessLookupErrorÚOSErrorÚunlinkÚ
subprocessr^  rM  rO  Úcopyr   Útimery   Ú
executableÚstrÚPopenÚDEVNULLÚsleepÚpollÚ
returncodeÚ
write_textÚpidrQ  )rV  rW  rX  rY  rZ  r™   rx  r…   rm  r^  Ú	proxy_envro  ÚcmdÚprocesss                 r6   Úapir|  W  sË  € ô, ×Ñ×Ñ 4°$ÐÔ7áÜ×ÑÔ!Ü�J‰JÐKÐQUÕVØÜ”)×%Ñ%Ó'×-Ñ-Ó/Ó0ˆð	.Ü�G‰G�C˜ÔÜ�J‰JÐ7¸°u¸AÐ>Ô?ô ×Ñ¨ÐÔ-ØðÛãô —
‘
—‘Ó!€IÙÜ"8¸Ó"?Ò"HÀ5ˆ	�,ÑâÛô �N‰NØØØ)ØØØÜ�‹Ið	
ˆð ×"Ñ"ØØ×%Ñ%Ø×%Ñ%Øð	 #ó 
ˆð 	�
‰
�3ŒØ�<‰<‹>Ð%Ü�J‰JÐJÈ7×K]ÑK]ÐJ^Ð_ÐeiÕjØä×ÑœS §¡Ó-Ô.Ü�
‰
ÐHÈÈÈaÐPTÈvÐU\Ð]d×]hÑ]hÐ\iÐijÐkÔlÙÜ�J‰J˜ y°Ñ'>Ð&?Ð@ÕAð ô 	�
‰
Ð8¸¸¸aÀ¸vÐFÔGÙÜ�J‰J˜ y°Ñ'>Ð&?Ð@ÔAÜ�
‰
Ð)Ô*áØ'0°Ñ'>ŒB�J‰J�|Ñ$Ø�‰Ø)ØØØØð 	õ 	
øôw "ò 	]Ü�J‰JÐ.¨s¨eÐ3ZÐ[×\Üò 	@Ü�J‰JÐ0°°Ð4¸$×?Ó?ûð	@ûô ×Ñ¨ÐÕ-ûô ò Ü�
‰
ÐXÐ^bÕcÙðúsH   Á</J  ÃK0 Ê "KÊ"K Ê%KÊ-KËK ËKËK ËK-Ë0 LÌLÚ__main__)NNN)r/   N)<Ú__doc__rC   rD   rÔ   rN  ry   Úconcurrent.futuresr   r   r   r   Úpathlibr   Úurllib.parser   r}   r¢   r2   r
   r   r   Úutilsr   Úhomerc  Ú	getLoggerrÙ   r§   r�   ÚContextÚ	Parameterr4   rq  r7   ÚlistÚdictrL   rJ   rI   ÚboolrŒ   r—   r¬   rf  rÍ   ÚgrouprÑ   rÚ   ÚcommandrÝ   ÚoptionÚChoicer‹   r¶   r6  r8  r;  rB  rH  r|  rÐ   r8   r6   ú<module>rŽ     s)  ðÙ ã 
Û Û Û 	Û 
ß ?ß 'Ý Ý  ã Û å Ý Ý )ð ˆD�I‰I‹K˜(Ñ" VÑ+¨iÑ7€	à	ˆ×	Ñ	˜8Ó	$€ð
Ø€wð
à€uð
ð €wð
ð €xð	
ð
 €vð
ð €yð
ð €vð
ð €~ð
ð €|ð
ð €~ð
ð ˆð
ð ˆð
ð Ðð
ð ˆð
ð ˆð
ð  ˆð!
€ð( §¡ð °u·±ð ÈuÐUXÉzÐ\`ÑO`ð Ðehó ð.�cð .  d¨3°¨8¡nÑ!5ð .Àcð .ÐUXÐ[_ÑU_ð .Ðdhó .ðC˜˜t™ð C¨4°°S¸#°X±Ñ+?ð CÀDó Cð
#�s˜T‘zð #¨¨d°3¸°8©nÑ)=ð #À$ó #ð AFò �d˜4  S ™>Ñ*ð ¸ð È$ó ð6
˜3ð 
 3ó 
ð
@˜ð 
@ sð 
@°cð 
@À#ÈÁ*ð 
@ÐY]ð 
@Ðbfó 
@ð" ØØðð òØðà�$�s˜C�x‘.Ñ!ðð ðð �‰:ð	ð
 �4‰Zðð �D‰jðð ðð 
óðD €‡��4Ôòó ðó3ð ‡�ƒð�ò ó ðð ‡�ƒØ€‡�ˆd�IÐ$7Ô8Ø€‡�ˆd�LÐ'GÔHØ€‡�ˆd�J¨Ð6JÔKØ€‡�ˆd�N¨J¸\¸U¿\¹\ÒJcÓ=dÔeØ€‡�ˆd�M¨¨¯©Ò5IÓ(JÐQiÔjØ€‡�ˆd�O¨R°cÐ@[Ô\Ø€‡�ˆd�H a¨cÐ8PÔQØ€‡�ØØØˆHØ	ˆ�‰ò	
ó
ð  Ø"ô+ð. €‡�ˆd�JÐ%nÔoØ€‡�ˆd�L¨$¸ÐDsÔtØ€‡�ˆeÐ+Ð2UÔVØ€‡�ˆe�[¨"Ð3QÔRØ€‡�ˆe�YÐ%dÔeØ€‡�ˆd�J¨Ð3WÔXØ€‡�ˆe�\¨4¸ÐE[Ô\ð+-Øð+-à�D‰jð+-ð ð+-ð ð	+-ð
 �T‰zð+-ð �t‘ð+-ð ð+-ð ð+-ð �$‰Jð+-ð ˜d™
ð+-ð ð+-ð �‰:ð+-ð ð+-ð ð+-ð  ð!+-ð" 
ò#+-ó ]ó Yó fó Só Wó uó pó/ó Ró ]ó kó fó Ló Ió 9ó ðL+-ð\ ‡�ƒØ€‡�ˆd�IÐ$9Ô:Ø€‡�ˆd�LÐ'IÔJØ€‡�ˆd�J¨Ð6JÔKØ€‡�ˆd�N¨J¸\¸U¿\¹\ÒJcÓ=dÔeØ€‡�ˆd�M¨¨¯©Ò5IÓ(JÔKØ€‡�ˆd�O¨R°cÐ@[Ô\Ø€‡�ˆd�H a¨cÐ8PÔQØ€‡�ØØØˆHØ	ˆ�‰Ò;Ó	<ØØ"ôð €‡�ˆg�x l e§l¡lÒ3\Ó&]Ô^Ø€‡�ØØØ	ˆ�‰ò	
ó
ôð, €‡�ˆg�~¨L¨E¯L©LÒ9kÓ,lÔmØ€‡�ˆd�J \ U§\¡\Ò2LÓ%MÔNØ€‡�Ø
ØØ	ˆ�‰ÒeÓ	fôð
 €‡�ˆd�JÐ%nÔoØ€‡�ˆd�L¨$¸ÐDsÔtØ€‡�ˆeÐ+Ð2UÔVØ€‡�ˆe�[¨"Ð3QÔRØ€‡�ˆe�YÐ%dÔeØ€‡�ˆd�J¨Ð3WÔXØ€‡�ˆe�\¨4¸ÐE[Ô\ð5-Øð5-à�D‰jð5-ð ð5-ð ð	5-ð
 �T‰zð5-ð �t‘ð5-ð ð5-ð ð5-ð �‰*ð5-ð �‰:ð5-ð �d‘
ð5-ð �$‰Jð5-ð ˜‘:ð5-ð ˜d™
ð5-ð ð5-ð  �$‰Jð!5-ð" �‰:ð#5-ð& ð'5-ð( ð)5-ð* ð+5-ð, 
ò-5-ó ]ó Yó fó Só Wó uó póó Oó nó-ó _óó Ró ]ó Ló fó Ló Kó ;ó ðj5-ðp ‡�ƒØ€‡�ˆd�IÐ$9Ô:Ø€‡�ˆd�LÐ'IÔJØ€‡�ˆd�J¨Ð6JÔKØ€‡�ˆd�N¨J¸\¸U¿\¹\ÒJcÓ=dÔeØ€‡�ˆd�M¨¨¯©²_Ó(EÐL^Ô_Ø€‡�ˆd�O¨R°cÐ@[Ô\Ø€‡�ˆd�H a¨cÐ8PÔQØ€‡�ØØØˆHØ	ˆ�‰Ò3Ó	4ØØ"ôð €‡�ˆf�n¨<¨5¯<©<¸ÀÐ8LÓ+MÔNØ€‡�ˆd�L | u§|¡|Ò4OÓ'PÔQØ€‡�ˆfÐ(¨|¨u¯|©|Ð=MÈyÐ<YÓ/ZÔ[Ø€‡�ˆd�JÐ%nÔoØ€‡�ˆe�YÐ%dÔeØ€‡�ˆd�J¨Ð3WÔXØ€‡�ˆe�\¨4¸ÐE[Ô\ð$-Øð$-à�D‰jð$-ð ð$-ð ð	$-ð
 �T‰zð$-ð �t‘ð$-ð ð$-ð ð$-ð �d‘
ð$-ð �D‰jð$-ð ˜$‘Jð$-ð �$‰Jð$-ð �‰:ð$-ð ð$-ð  ð!$-ð" 
ò#$-ó ]ó Yó fó pó \ó Ró Oóó Ró ]ó `ó fó Ló Kó ;ó ð.$-ðN ‡�ƒØ€‡�ˆd�IÐ$7Ô8Ø€‡�ˆd�LÐ'GÔHØ€‡�ˆd�J¨Ð6JÔKØ€‡�ˆd�N¨J¸\¸U¿\¹\ÒJcÓ=dÔeØ€‡�ˆd�M¨¨¯©Ò5IÓ(JÐQiÔjØ€‡�ˆd�O¨R°cÐ@[Ô\Ø€‡�ˆd�H a¨cÐ8PÔQØ€‡�ØØØˆHØ	ˆ�‰ÒDÓ	EØØ"ôð €‡�ˆd�JÐ%nÔoØ€‡�ˆe�YÐ%dÔeØ€‡�ˆd�J¨Ð3WÔXØ€‡�ˆe�\¨4¸ÐE[Ô\ð-Øð-à�D‰jð-ð ð-ð ð	-ð
 �T‰zð-ð �t‘ð-ð ð-ð ð-ð �$‰Jð-ð �‰:ð-ð ð-ð ð-ð 
ò-ó ]ó Yó fó póó Ró ]ó kó fó Ló Ió 9ó ð(-ðB ‡�ƒØ€‡�ˆd�IÐ$8Ô9Ø€‡�ˆd�LÐ'HÔIØ€‡�ˆd�O¨R°cÐ@[Ô\Ø€‡�ˆd�H a¨cÐ8PÔQØ€‡�ØØØˆHØ	ˆ�‰Ò5Ó	6ØØ"ôð €‡�ˆd�JÐ%nÔoØ€‡�ˆe�YÐ%dÔeØ€‡�ˆd�J¨Ð3WÔXØ€‡�ˆe�\¨4¸ÐE[Ô\ð-Øð-à�D‰jð-ð �t‘ð-ð ð	-ð
 ð-ð �$‰Jð-ð �‰:ð-ð ð-ð ð-ð 
ò-ó ]ó Yó fó póó Ró ]ó Jó :ó ð"-ð4 ‡�ƒØ€‡�ˆd�G dÐ1NÔOØ€‡�ØØØ	ØØ	ˆ�‰ÒUÓ	VØ	ôð €‡�ˆd�JÐ%YÔZØ€‡�ˆe�YÐ%dÔeØ€‡�ˆd�J¨Ð3WÔXðPØ	ðPà	ðPð �$‰JðPð �‰:ð	Pð ðPð 
òPó Yó fó [óó Pó ðPð& ‡�ƒØ€‡�ˆe�YÐ%dÔeð.ˆs�T‰zð .˜dò .ó fó ð.ð@ ‡�ƒØ€‡�ˆd�J¨Ð3aÔbØ€‡�ˆd�H dÐ1KÔLØ€‡�ˆh 	Ð0LÔMØ€‡�ˆh ¨3Ð5QÔRØ€‡�ˆj $Ð-QÔRØ€‡�ˆe�YÐ%dÔeðZ
�ð Z
˜Dð Z
¨ð Z
°3ð Z
Àð Z
ÈSÐSWÉZð Z
Ð\`ò Z
ó fó Só Só Nó Mó có ðZ
ðz ˆzÒÙÕð r8   