o
    °hú  ã                   @   sf  d dl mZmZ d dlZd dlmZ d dlmZ d dlm	Z
 d dlZd dlZd dlmZ d dlZd dlZd dlZddlmZmZmZmZmZmZmZmZ ejejd	� e e¡Z d
e!dee!e!f fdd„Z"dee! fdd„Z#dee! fdd„Z$dee! fdd„Z%dee! fdd„Z&i Z'd a(dee! fdd„Z)dee! fdd„Z*dee! fdd„Z+dee! fdd„Z,dS )é    )ÚListÚTupleN)ÚBeautifulSoup)ÚDDGS)Úsearch)ÚValidationErroré   )ÚFetchNewsParamsÚFetchArxivParamsÚFetchDDGParamsÚFetchTorrentsParamsÚFetchWikiParamsÚFetchIMDBParamsÚFetchYouTubeParamsÚFetchFinanceParams)ÚlevelÚurlÚreturnc                 C   s¢   zCt j| ddidd�}| ¡  t|jdƒ}|jr|jj ¡ n| }| d¡}d 	dd	„ |D ƒ¡}d
t
› �}t
d7 a
| |dœt|< ||fW S  tyP   | df Y S w )Nz
User-AgentzMozilla/5.0é   )ÚheadersÚtimeoutzhtml.parserÚpÚ
c                 s   s   � | ]	}|  ¡  ¡ V  qd S )N)Úget_textÚstrip)Ú.0r   © r   ú7C:\Users\shubh\Videos\agent\agent\modules\search\web.pyÚ	<genexpr>$   s   € zscrape_page.<locals>.<genexpr>Úscrape_é   ©ÚhrefÚtextÚ )ÚrequestsÚgetÚraise_for_statusr   r#   ÚtitleÚstringr   Úfind_allÚjoinÚscrape_counterÚscraped_storeÚ	Exception)r   ÚrespÚsoupr(   Z
paragraphsÚsnippetÚ	scrape_idr   r   r   Úscrape_page   s   


ÿr3   c               
   K   s¦   z6t di | ¤Ž}g }t|j|jdd�D ] }t|ƒ\}}| |› d|› d|› �¡ t|ƒ|jkr3 |W S q|W S  tyR } zt 	d|› �¡ g W  Y d }~S d }~ww )NT)Únum_resultsÚuniquer   úInvalid parameters: r   )
r	   Úgoogle_searchÚqueryÚmax_resultsr3   ÚappendÚlenr   ÚloggerÚerror)ÚkwargsÚparamsÚresultsr   r(   r1   Úer   r   r   Ú
fetch_news-   s    þ€þrB   c               
   K   s¢   z4t di | ¤Ž}g }tj|j|jd�}| ¡ D ]}|j dd¡ ¡ }| 	|j
› d|› d|j› �¡ q|W S  tyP } zt d|› �¡ g W  Y d }~S d }~ww )N©r8   r9   r   Ú z
Abstract: z
PDF: r6   r   )r
   ÚarxivÚSearchr8   r9   r@   ÚsummaryÚreplacer   r:   r(   Úpdf_urlr   r<   r=   )r>   r?   Úpapersr   ÚrrG   rA   r   r   r   Úfetch_arxiv=   s    €þrL   c               
   K   sJ   zt di | ¤ŽW S  ty$ } zt d|› �¡ g W  Y d }~S d }~ww )Nr6   r   )rB   r   r<   r=   )r>   rA   r   r   r   Úsearch_googleK   s   €þrM   c               
   K   ó`   zt di | ¤Ž}t|j› d�|jd�W S  ty/ } zt d|› �¡ g W  Y d }~S d }~ww )Nz proxy "torrent" rC   r6   r   )r   rM   r8   r9   r   r<   r=   ©r>   r?   rA   r   r   r   Úfetch_torrentsS   ó   €þrP   c                  K   sþ   zbt di | ¤Ž}t d¡ g }tj|j|jd�D ]G}z+tj|dd�}dt› �}td7 a|j|j	dœt
|< | |j› d|j	› d|j› �¡ W q ty_ } zt d	|› �¡ W Y d }~qd }~ww |W S  ty~ } zt d
|› �¡ g W  Y d }~S d }~ww )NÚen)r@   F)Zauto_suggestr   r    r!   r   zWikipedia subpage error: zWikipedia fetch error: r   )r   Ú	wikipediaZset_langr   r8   r9   Úpager,   r   rG   r-   r:   r(   r.   r<   Úwarningr=   )r>   r?   r@   r(   rT   r2   rA   r   r   r   Úfetch_wikipedia_   s*   

$€ÿ€þrV   c               
   K   rN   )Nz site:imdb.comrC   zIMDB fetch error: r   )r   rM   r8   r9   r.   r<   r=   rO   r   r   r   Ú
fetch_imdbs   rQ   rW   c               
   K   rN   )Nz site:youtube.comrC   zYouTube fetch error: r   )r   rM   r8   r9   r.   r<   r=   rO   r   r   r   Úfetch_youtube{   rQ   rX   c               
   K   sÚ   zPt d
i | ¤Ž}g }|j ¡  ¡ }|D ]:}t |¡}|j}| d¡p(| d¡p(d}d|› �}dt› �}	td7 a||dœt	|	< | 
| ¡ › d|› d|› �¡ q|W S  tyl }
 zt d	|
› �¡ g W  Y d }
~
S d }
~
ww )NZlongBusinessSummaryrG   r$   z https://finance.yahoo.com/quote/r   r    r!   r   zFinance fetch error: r   )r   r8   r   ÚsplitÚyfZTickerÚinfor&   r,   r-   r:   Úupperr.   r<   r=   )r>   r?   r@   ZtickersÚsymbolZtickerr[   r#   r   r2   rA   r   r   r   Úfetch_financeƒ   s&   


 €þr^   )-Útypingr   r   r%   Úbs4r   Zduckduckgo_searchr   Zgooglesearchr   r7   rE   ÚloggingZpydanticr   ÚjsonrS   ZyfinancerZ   Ztools.schemasr	   r
   r   r   r   r   r   r   ÚbasicConfigÚINFOÚ	getLoggerÚ__name__r<   Ústrr3   rB   rL   rM   rP   r-   r,   rV   rW   rX   r^   r   r   r   r   Ú<module>   s2    (
	