
    iU                        U d Z ddlZddlmZ ddlmZ ddlZddlZddlZddl	m
Z
 ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZ ddlmZmZmZ ej8                  rddlmZ ddlm Z  ddddddZ!ddgZ"dZ#dZ$dZ%dddddZ&ee'd<   dZ( ejR                  d      Z*de+e,ejZ                  f   de.fd Z/de,fd!Z0d"e,d#d$fd%Z1d&e,de,fd'Z2d(d)defd*Z3d+efd,Z4y)-zBoardreader (forum search)    N)datetime)	urlencode)language_tag)EngineCache)EngineTraits)safe_search_map)SearxEngineAPIException)getraise_for_httperror)EngineResults)extrjs_obj_str_to_pythonhtml_to_text)SXNG_Response)OnlineParamszhttps://boardreader.comFJSON)websiteofficial_api_documentationuse_official_apirequire_api_keyresultsgeneralzsocial mediaT1730365)dayweekmonthyearCACHEsession_id_keyz\[\/?Keyword\]engine_settingsreturnc                 "    t        | d         ay)Nname)engine_nameT)r   r!   )r#   s    */root/searxng/searx/engines/boardreader.pyinitr)   /   s    OF$;<E    c                     t         j                  t              } | r| S t        t              }|j                  dk7  rt        |       t        |j                  dd      }|st        d      t         j                  t        |       |S )N   z'currentSessionId', ''zfailed to obtain session id)
r!   r
   CACHE_SESSION_ID_KEYbase_urlstatus_coder   r   textr	   set)cachedresp
session_ids      r(   _get_session_idr6   5   so    #78Fx=D3D!dii!8#>J%&CDD	II"J/r*   queryparamsr   c                     t               }t        j                  |d   d      }| |d   ||d}|d   rt        |d      |d<   t         dt        |       |d	<   |S )
Nsearxng_localeAll)defaultpageno)r7   pagelanguager5   
time_rangeperiodz/return.php?url)r6   traitsget_languager   r/   r   )r7   r8   r5   r?   argss        r(   requestrF   F   s     "J'' % ( H x  	D l()=>XjYt_,=>F5MMr*   r1   c                 @    t        t        j                  d|             S )zB
    Convert text like "[Keyword]ABCDE[/Keyword]" to "ABCDE".
     )r   
KEYWORD_REsub)r1   s    r(   _remove_keyword_markerrK   Y   s     
r4011r*   r4   r   c                 X   t               }| j                         d   D ]  }|j                  |j                  j	                  t        |d         t        |d         |d   t        j                  |d   d      t        j                  d      j                  |d   	      
              |S )NSearchResultsSubjectTextUrl	Publishedz%Y-%m-%d %H:%M:%SzPosted by {author}Author)author)titlecontentrB   publishedDatemetadata)
r   jsonaddtypes
MainResultrK   r   strptimegettextformat)r4   resresults      r(   responsera   `   s    
/C ))+o. 	
II  ,VI->?.vf~>5M&//{0CEXY )=>EEVT\M]E^ ! 	
	
 Jr*   engine_traitsc                 4   t        t              }|j                  dk7  rt        |       dt	        |j
                  dd      z   dz   }t        t         d|       }|j                  dk7  rt        |       t	        |j
                  dd      dz   }t        |      }|D ]Z  }|d   }|d	   D ]K  }	 t        j                  j                  |      }	t        |	      }
|
| j                  vs=|| j                  |
<   M \ d
| _        y # t        j                  $ r Y mw xY w)Nr,   zmain.z.js/zlanguageValues=z}],z}]valuecodesr;   )r
   r/   r0   r   r   r1   r   babelLocaleparseUnknownLocaleErrorr   	languages
all_locale)rb   r4   script_namescript_respjs_object_stringrk   r?   search_valuecodelocale	sxng_langs              r(   fetch_traitsrt   r   s,   x=D3D! DGU;;eCK
!K=12K#%D! K,,.?G$N&:;K&LI  
B(W% 	BD++D1 %V,I 7 775A''	2	B
B  %M ++ s   -DDD)5__doc__rer   urllib.parser   typingtr]   rg   searx.localesr   searx.enginelibr   searx.enginelib.traitsr   searx.engines.json_enginer   searx.exceptionsr	   searx.networkr
   r   searx.result_typesr   searx.utilsr   r   r   TYPE_CHECKINGsearx.extended_typesr   searx.search.processorsr   about
categoriespagingtime_range_supportr/   time_range_map__annotations__r.   compilerI   dictstrAnyboolr)   r6   rF   rK   ra   rt    r*   r(   <module>r      s     	  "    & ' / 5 4 2 , @ @??24 )"&	 (
	 $cD%H ' RZZ)*
$sAEEz* t  "3  &2 2 2? } $% %r*   