
    7|h:                     ^    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y)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y)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} |}||d<   |S # t        $ r t	        d      w xY w)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       j/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/utilities/google_trends.pyvalidate_environmentz+GoogleTrendsAPIWrapper.validate_environment$   sc     "7 9JK"
~	- +'9#$  	 	s   * ?queryc                    t        t        | j                        }d|j                         |d}g }| j	                  |      }|j                         }d|v r|d   d   nd}|sy|d   d   j                         }|d	   d   j                         }|D 	cg c]%  }	|	j                  d
      d   j                  d      ' }
}	t        |
      }t        |
      }t        |
      t        |
      z  }|
d	   |
d   z
  |
d   dk7  r|
d   ndz  |
d   dk7  rdndz  }d|j                         d|d}i }| j	                  |      }|j                         j                  di       }g }g }|j                  dg       D 	cg c]  }	|	j                  d       }}	|j                  dg       D 	cg c]  }	|	j                  d       }}	d| d|d    d|d    d|d	    d|d    d|d    d|d	    d| d| d| dt        |      dz    ddj                  |
D cg c]  }t        |       c}       d dj                  |       d!dj                  |       g}d"j                  |      S c c}	w c c}	w c c}	w c c}w )#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   dater   extracted_value   d   RELATED_QUERIES)r"   r#   	data_typer$   related_queriesrisingr   topzQuery: z
Date From:  z, z

Date To:    z
Min Value: z
Max Value: z
Average Value: z
Percent Change: %z
Trend values: z
Rising Related Queries: z
Top Related Queries: z

)r   r   r   get_secret_valuer   get_dictsplitgetminmaxsumlenstrjoin)selfr   serpapi_api_keyparamstotal_resultsclientclient_dict
start_dateend_dateresultsr   	min_value	max_value	avg_valuepercentage_changetotal_results2r/   r0   xdocs                       r   runzGoogleTrendsAPIWrapper.run:   s   y$*;*;<%&779
  ((0oo' ${2 ,-o> 	 3"1%f-335
 $V,224KX
@GGKK!!$(():;
 
 K	K	K#f+-	BZ&)#"1INvay3Qi1ns!- 	 &&779*	
 ((0*../@"E6D6H6HSU6VW7'++g&WW3A3E3EeR3PQw{{7#QQ eW $Q-*Q-:b>:J K }Ahqk]!HRL> B# %# %'[ )"#45;< =!YY'?1A'?@A B''+yy'8&9 :$$(IIcN#3	5
 {{3S
2 XQ (@s   *I4I!"I&I+6)__name__
__module____qualname____doc__r   r   __annotations__r   r   r   r
   model_configr   classmethodr   r   r<   rN        r   r   r   	   su    & #"(,L(9%,L (#$ 3   $(@  @  @ rW   r   N)rR   typingr   r   r   r   langchain_core.utilsr   r   pydanticr	   r
   r   r   r   rV   rW   r   <module>r[      s%    , , , L F Fq Y q rW   