
    Ng:                     f    d Z ddlmZmZmZmZ ddlmZmZ ddl	m
Z
mZmZmZ  G d de
          ZdS )z&Util that calls Google Scholar Search.    )AnyDictOptionalcast)convert_to_secret_strget_from_dict_or_env)	BaseModel
ConfigDict	SecretStrmodel_validatorc                       e Zd ZU dZdZeed<   dZee	         ed<    e
d          Z ed          ed	ed
efd                        Zded
efdZdS )GoogleTrendsAPIWrapperaa  Wrapper for SerpApi's Google Scholar API

    You can create SerpApi.com key by signing up at: https://serpapi.com/users/sign_up.

    The wrapper uses the SerpApi.com python package:
    https://serpapi.com/integrations/python

    To use, you should have the environment variable ``SERPAPI_API_KEY``
    set with your API key, or pass `serp_api_key` as a named parameter
    to the constructor.

     Example:
        .. code-block:: python

        from langchain_community.utilities import GoogleTrendsAPIWrapper
        google_trends = GoogleTrendsAPIWrapper()
        google_trends.run('langchain')
    Nserp_search_engineserp_api_keyforbid)extrabefore)modevaluesreturnc                     t          t          |dd                    |d<   	 ddlm} n# t          $ r t	          d          w xY w|}||d<   |S )z?Validate that api key and python package exists in environment.r   SERPAPI_API_KEYr   )SerpApiClientzigoogle-search-results is not installed. Please install it with `pip install google-search-results>=2.4.2`r   )r   r   serpapir   ImportError)clsr   r   r   s       g/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/utilities/google_trends.pyvalidate_environmentz+GoogleTrendsAPIWrapper.validate_environment$   s     "7 9JKK"
 "
~	------- 	 	 	  	 +'9#$s	   * Aqueryc                    t          t          | j                  }d|                                |d}g }|                     |          }|                                }d|v r|d         d         nd}|sdS |d         d                                         }|d	         d                                         }d
 |D             }	t          |	          }
t          |	          }t          |	          t          |	          z  }|	d	         |	d         z
  |	d         dk    r|	d         ndz  |	d         dk    rdndz  }d|                                d|d}i }|                     |          }|                                                    di           }g }g }d |                    dg           D             }d |                    dg           D             }d| d|d          d|d          d|d	          d|d          d|d          d|d	          d|
 d| d| dt          |          dz    dd                    d  |	D                        d!d                    |           d"d                    |           g}d#                    |          S )$z,Run query through Google Trends with Serpapigoogle_trends)engineapi_keyqinterest_over_timetimeline_dataNzNo good Trend Result was foundr   datec                 j    g | ]0}|                     d           d                              d          1S )r   r   extracted_valueget.0resultss     r   
<listcomp>z.GoogleTrendsAPIWrapper.run.<locals>.<listcomp>Q   sE     
 
 
@GGKK!!!$(():;;
 
 
       d   RELATED_QUERIES)r"   r#   	data_typer$   related_queriesc                 8    g | ]}|                     d           S r   r+   r-   s     r   r0   z.GoogleTrendsAPIWrapper.run.<locals>.<listcomp>j   s$    WWW7'++g&&WWWr1   risingc                 8    g | ]}|                     d           S r8   r+   r-   s     r   r0   z.GoogleTrendsAPIWrapper.run.<locals>.<listcomp>k   s$    QQQw{{7##QQQr1   topzQuery: z
Date From:  z, z

Date To:    z
Min Value: z
Max Value: z
Average Value: z
Percent Change: %z
Trend values: c                 ,    g | ]}t          |          S  )str)r.   xs     r   r0   z.GoogleTrendsAPIWrapper.run.<locals>.<listcomp>u   s    '?'?'?1A'?'?'?r1   z
Rising Related Queries: z
Top Related Queries: z

)r   r   r   get_secret_valuer   get_dictsplitminmaxsumlenr,   rA   join)selfr   serpapi_api_keyparamstotal_resultsclientclient_dict
start_dateend_dater   	min_value	max_value	avg_valuepercentage_changetotal_results2r9   r;   docs                     r   runzGoogleTrendsAPIWrapper.run:   sL   y$*;<<%&7799
 
  ((00oo'' ${22 ,-o>> 	  	433"1%f-3355
 $V,2244
 
KX
 
 
 KK	KK	KK#f++-	BZ&)#"1INNvayy3Qi1nnss!- 	 &&7799*	
 
 ((00**../@"EEWWn6H6HSU6V6VWWWQQ>3E3EeR3P3PQQQ	5e 	5 	5$Q-	5 	5*4Q-	5 	5;Eb>	5 	5 	5 	5&.qk	5 	54<RL	5 	5 $	5 	5 $		5 	5
 (	5 	5  ##455;	5 	5 "YY'?'?'?'?'?@@	5 	5 (,yy'8'8	5 	5 %)IIcNN	5 	5
 {{3r1   )__name__
__module____qualname____doc__r   r   __annotations__r   r   r   r
   model_configr   classmethodr   r   rA   rY   r@   r1   r   r   r   	   s          & #"""(,L(9%,,,:  L _(###$ 3    [ $#(@  @  @  @  @  @  @  @ r1   r   N)r]   typingr   r   r   r   langchain_core.utilsr   r   pydanticr	   r
   r   r   r   r@   r1   r   <module>rd      s    , , , , , , , , , , , , , , L L L L L L L L F F F F F F F F F F F Fq  q  q  q  q Y q  q  q  q  q r1   