U
    h                     @   sT   d Z ddlmZmZmZmZ ddlmZmZm	Z	 ddl
mZmZ G dd deZdS )z&Util that calls Google Scholar Search.    )AnyDictOptionalcast)	BaseModel	SecretStrroot_validator)convert_to_secret_strget_from_dict_or_envc                   @   sb   e Zd ZU dZeed< dZee ed< G dd dZ	e
ddeed	d
dZeedd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')
    serp_search_engineNserp_api_keyc                   @   s   e Zd ZdZdS )zGoogleTrendsAPIWrapper.ConfigZforbidN)__name__
__module____qualname__extra r   r   O/tmp/pip-unpacked-wheel-9gdii04g/langchain_community/utilities/google_trends.pyConfig    s   r   T)pre)valuesreturnc                 C   sR   t t|dd|d< zddlm} W n tk
r@   tdY nX |}||d< |S )z?Validate that api key and python package exists in environment.r   ZSERPAPI_API_KEYr   )SerpApiClientzigoogle-search-results is not installed. Please install it with `pip install google-search-results>=2.4.2`r   )r	   r
   Zserpapir   ImportError)clsr   r   r   r   r   r   validate_environment#   s    

z+GoogleTrendsAPIWrapper.validate_environment)queryr   c                 C   s  t t| j}d| |d}g }| |}| }d|krF|d d nd}|sRdS |d d  }|d	 d  }d
d |D }	t|	}
t|	}t	|	t
|	 }|	d	 |	d  |	d dkr|	d nd |	d dkrdnd }d| d|d}i }| |}| di }g }g }dd |dg D }dd |dg D }d| d|d  d|d  d|d	  d|d  d|d  d|d	  d|
 d| d| dt|d  d dd!d |	D  d"d| d#d| g}d$|S )%z,Run query through Google Trends with SerpapiZgoogle_trends)engineapi_keyqZinterest_over_timeZtimeline_dataNzNo good Trend Result was foundr   datec                 S   s    g | ]}| d d  dqS )r   r   Zextracted_valueget.0resultsr   r   r   
<listcomp>O   s    z.GoogleTrendsAPIWrapper.run.<locals>.<listcomp>   d   ZRELATED_QUERIES)r   r   Z	data_typer   Zrelated_queriesc                 S   s   g | ]}| d qS r   r"   r$   r   r   r   r'   h   s     risingc                 S   s   g | ]}| d qS r*   r"   r$   r   r   r   r'   i   s     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                 S   s   g | ]}t |qS r   )str)r%   xr   r   r   r'   l   s     z
Rising Related Queries: z
Top Related Queries: z

)r   r   r   Zget_secret_valuer   get_dictsplitminmaxsumlenr#   r0   join)selfr   Zserpapi_api_keyparamsZtotal_resultsclientZclient_dictZ
start_dateend_dater   Z	min_valueZ	max_valueZ	avg_valueZpercentage_changeZtotal_results2r+   r,   docr   r   r   run8   sV    

zGoogleTrendsAPIWrapper.run)r   r   r   __doc__r   __annotations__r   r   r   r   r   r   r   r0   r>   r   r   r   r   r   	   s   
r   N)r?   typingr   r   r   r   Zlangchain_core.pydantic_v1r   r   r   Zlangchain_core.utilsr	   r
   r   r   r   r   r   <module>   s   