
    dh                     b    S r SSKJrJrJr  SSKrSSKJr  SSKJ	r	J
r
JrJr  Sr " S S\	5      rg)	zUtil that calls Bing Search.    )AnyDictListN)get_from_dict_or_env)	BaseModel
ConfigDictFieldmodel_validatorz*https://api.bing.microsoft.com/v7.0/searchc                       \ rS rSr% Sr\\S'   \\S'   Sr\\S'   \	" \
S9r\
\S'    \" S	S
9rS\S\S\\
   4S jr\" SS9\S\S\4S j5       5       rS\S\4S jrS\S\S\\   4S jrSrg)BingSearchAPIWrapper   z Wrapper for Bing Web Search API.bing_subscription_keybing_search_url
   k)default_factorysearch_kwargsforbid)extrasearch_termcountreturnc                     SU R                   0nUUSSS.U R                  En[        R                  " U R                  UUS9nUR                  5         UR                  5       nSU;   a  US   S   $ / $ )NzOcp-Apim-Subscription-KeyTHTML)qr   textDecorations
textFormat)headersparamswebPagesvalue)r   r   requestsgetr   raise_for_statusjson)selfr   r   r   r   responsesearch_resultss          a/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/utilities/bing_search.py_bing_search_results)BingSearchAPIWrapper._bing_search_results)   s    .0J0JK# 	

   
 <<  

 	!!#!'!*-g66	    before)modevaluesc                 P    [        USS5      nX!S'   [        USS[        S9nX1S'   U$ )z9Validate that api key and endpoint exists in environment.r   BING_SUBSCRIPTION_KEYr   BING_SEARCH_URL)default)r   DEFAULT_BING_SEARCH_ENDPOINT)clsr/   r   r   s       r)   validate_environment)BingSearchAPIWrapper.validate_environment=   sJ     !5+-D!
 +@&'.0	
 %4 !r,   queryc                     / nU R                  XR                  S9n[        U5      S:X  a  gU H  nUR                  US   5        M     SR	                  U5      $ )z.Run query through BingSearch and parse result.r   r   $No good Bing Search Result was foundsnippet )r*   r   lenappendjoin)r&   r8   snippetsresultsresults        r)   runBingSearchAPIWrapper.runQ   sY    ++E+@w<19FOOF9-.  xx!!r,   num_resultsc                     / nU R                  XS9n[        U5      S:X  a  SS0/$ U H#  nUS   US   US   S.nUR                  U5        M%     U$ )	aN  Run query through BingSearch and return metadata.

Args:
    query: The query to search for.
    num_results: The number of results to return.

Returns:
    A list of dictionaries with the following keys:
        snippet - The description of the result.
        title - The title of the result.
        link - The link to the result.
r:   r   Resultr;   r<   nameurl)r<   titlelink)r*   r>   r?   )r&   r8   rF   metadata_resultsrB   rC   metadata_results          r)   rB   BingSearchAPIWrapper.results\   sw     ++E+Ew<1EFGGF!),uO
 ##O4   r,    N)__name__
__module____qualname____firstlineno____doc__str__annotations__r   intr	   dictr   r   model_configr   r*   r
   classmethodr   r   r6   rD   rB   __static_attributes__rP   r,   r)   r   r      s    *AsK5M45EL C DJ ( (#$ 3   $$	" 	" 	" S  s  tDz  r,   r   )rU   typingr   r   r   r"   langchain_core.utilsr   pydanticr   r   r	   r
   r4   r   rP   r,   r)   <module>r`      s1    " " "  5 B B$  L Y 9 Y r,   