Ë
    j¦ziµ2  ã                   ó¬  — d dl Z d dlZd dlZd dlZd dlZej
                  d    dkD  rd dlmZ d dlm	Z	m
Z
 d dlmZmZmZ nd dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZmZ 	 d dlmZ d	Zg d¢ZdZdZdZdZdZdZ e j:                  d«      Zes e j:                  d«      ZesdZ ee j>                  jA                  ed«      «      Z!	 e!jE                  «        dZ$	 e j>                  jK                  e j>                  jM                  e'«      d    «      Z(	 e j>                  jA                  e(d«      Z)d dl*Z* e*jV                  e)d«      Z,	 e,j[                  «       D � cg c]  } | j]                  «       ‘Œ c} Z/e,ja                  «        [,	 d„ Z1d„ Z2d d„Z3d„ Z4	 	 	 d!d„Z5d„ Z6y# e$ r d dlmZ d
ZY �ŒBw xY w# e#$ r Y Œàw xY wc c} w # e,ja                  «        [,w xY w# e#$ ro e j>                  jA                  e(d«      Z) e+e)«      5 Z,e,j[                  «       D � cg c]  } | j]                  «       ‘Œ nc c} w c} Z/ddd«       n# 1 sw Y   nxY wY ŒÅw xY w# e#$ r e$gZ/Y ŒÓw xY w)"é    Né   )ÚLWPCookieJar)ÚRequestÚurlopen)Ú
quote_plusÚurlparseÚparse_qs)r   )r   r	   )ÚBeautifulSoupTF)ÚsearchÚluckyÚget_random_user_agentÚget_tbszhttps://www.google.%(tld)s/zuhttps://www.google.%(tld)s/search?hl=%(lang)s&q=%(query)s&btnG=Google+Search&tbs=%(tbs)s&safe=%(safe)s&cr=%(country)szrhttps://www.google.%(tld)s/search?hl=%(lang)s&q=%(query)s&start=%(start)d&tbs=%(tbs)s&safe=%(safe)s&cr=%(country)sz�https://www.google.%(tld)s/search?hl=%(lang)s&q=%(query)s&num=%(num)d&btnG=Google+Search&tbs=%(tbs)s&safe=%(safe)s&cr=%(country)sz~https://www.google.%(tld)s/search?hl=%(lang)s&q=%(query)s&num=%(num)d&start=%(start)d&tbs=%(tbs)s&safe=%(safe)s&cr=%(country)s)ÚhlÚqÚnumÚbtnGÚstartÚtbsÚsafeÚcrÚHOMEÚUSERHOMEú.z.google-cookiez2Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)zuser_agents.txt.gzÚrbzuser_agents.txtc                  ó4   — t        j                  t        «      S )za
    Get a random user agent string.

    :rtype: str
    :return: Random user agent string.
    )ÚrandomÚchoiceÚuser_agents_list© ó    úL/home/htdocs/ttos/venv/lib/python3.12/site-packages/googlesearch/__init__.pyr   r   {   s   € ô �=‰=Ô)Ó*Ð*r    c                 ó`   — | j                  d«      } |j                  d«      }dt        «       z  S )zà
    Helper function to format the tbs parameter.

    :param datetime.date from_date: Python date object.
    :param datetime.date to_date: Python date object.

    :rtype: str
    :return: Dates encoded in tbs format.
    z%m/%d/%Yz-cdr:1,cd_min:%(from_date)s,cd_max:%(to_date)s)ÚstrftimeÚvars)Ú	from_dateÚto_dates     r!   r   r   †   s1   € ð ×"Ñ" :Ó.€IØ×Ñ˜zÓ*€GØ:¼T»VÑCÐCr    c                 óŽ  — |€t         }t        | «      }|j                  d|«       t        j	                  |«       |rt        |«      }n!t        j                  «       }t        ||¬«      }t        j                  ||«       |j                  «       }|j                  «        	 t        j                  «        |S # t        $ r Y |S w xY w)aL  
    Request the given URL and return the response page, using the cookie jar.

    :param str url: URL to retrieve.
    :param str user_agent: User agent for the HTTP requests.
        Use None for the default.
    :param bool verify_ssl: Verify the SSL certificate to prevent
        traffic interception attacks. Defaults to True.

    :rtype: str
    :return: Web page retrieved for the given URL.

    :raises IOError: An exception is raised on error.
    :raises urllib2.URLError: An exception is raised on error.
    :raises urllib2.HTTPError: An exception is raised on error.
    z
User-Agent)Úcontext)Ú
USER_AGENTr   Ú
add_headerÚ
cookie_jarÚadd_cookie_headerr   ÚsslÚ_create_unverified_contextÚextract_cookiesÚreadÚcloseÚsaveÚ	Exception)ÚurlÚ
user_agentÚ
verify_sslÚrequestÚresponser(   Úhtmls          r!   Úget_pager:   —   s±   € ð" ÐÜˆ
Ü�c‹l€GØ×Ñ�| ZÔ0Ü× Ñ  Ô)ÙÜ˜7Ó#‰ä×0Ñ0Ó2ˆÜ˜7¨GÔ4ˆÜ×Ñ˜x¨Ô1Ø�=‰=‹?€DØ‡N�NÔðÜ�‰Ôð €Køô ò ØØ€Kðús   Â!B7 Â7	CÃCc                 óæ   — 	 | j                  d«      r't        | d«      }t        |j                  «      d   d   } t        | d«      }|j                  rd|j                  vr| S y y # t
        $ r Y y w xY w)Nz/url?Úhttpr   r   Úgoogle)Ú
startswithr   r	   ÚqueryÚnetlocr3   )ÚlinkÚos     r!   Úfilter_resultrC   ¾   sy   € ðð �?‰?˜7Ô#Ü˜˜vÓ&ˆAÜ˜AŸG™GÓ$ SÑ)¨!Ñ,ˆDô
 �T˜6Ó"ˆØ�8Š8˜¨¯©Ñ0ØˆKð 1ˆ8øô ò Ùðús   ‚AA$ Á$	A0Á/A0c              #   ó~  K  — t        «       }d}t        | «      } |
si }
t        D ]   }||
j                  «       v sŒt	        d|«      ‚ t        t        t        «       z  ||«       |r)|dk(  rt        t        «       z  }n:t        t        «       z  }n(|dk(  rt        t        «       z  }nt        t        «       z  }|r||k  �r+|}|
j                  «       D ]&  \  }}t        |«      }t        |«      }|d|›d|›�z   }Œ( t        j                  |«       t        |||«      }t        rt!        |d«      }nt!        |«      }	 |j#                  d¬«      j%                  d	«      }|D ]J  }	 |d   }t-        |«      }|sŒt/        |«      }||v rŒ'|j1                  |«       |–— |dz  }|sŒD||k\  sŒJ y ||k(  ry||z  }|dk(  rt        t        «       z  }nt        t        «       z  }|s�Œ#||k  r�Œ*yy# t&        $ r8 |j#                  d
¬«      }|r|j)                  «        |j%                  d	«      }Y ŒÏw xY w# t*        $ r Y ŒÜw xY w­w)a  
    Search the given query string using Google.

    :param str query: Query string. Must NOT be url-encoded.
    :param str tld: Top level domain.
    :param str lang: Language.
    :param str tbs: Time limits (i.e "qdr:h" => last hour,
        "qdr:d" => last 24 hours, "qdr:m" => last month).
    :param str safe: Safe search.
    :param int num: Number of results per page.
    :param int start: First result to retrieve.
    :param int stop: Last result to retrieve.
        Use None to keep searching forever.
    :param float pause: Lapse to wait between HTTP requests.
        A lapse too long will make the search slow, but a lapse too short may
        cause Google to block your IP. Your mileage may vary!
    :param str country: Country or region to focus the search on. Similar to
        changing the TLD, but does not yield exactly the same results.
        Only Google knows why...
    :param dict extra_params: A dictionary of extra HTTP GET
        parameters, which must be URL encoded. For example if you don't want
        Google to filter similar results you can set the extra_params to
        {'filter': '0'} which will append '&filter=0' to every query.
    :param str user_agent: User agent for the HTTP requests.
        Use None for the default.
    :param bool verify_ssl: Verify the SSL certificate to prevent
        traffic interception attacks. Defaults to True.

    :rtype: generator of str
    :return: Generator (iterator) that yields found URLs.
        If the stop parameter is None the iterator will loop forever.
    r   zQGET parameter "%s" is overlapping with                 the built-in GET parameteré
   ú&ú=zhtml.parserr   )ÚidÚaÚgbarÚhrefé   N)Úsetr   Úurl_parametersÚkeysÚ
ValueErrorr:   Úurl_homer$   Úurl_next_pageÚurl_next_page_numÚ
url_searchÚurl_search_numÚitemsÚtimeÚsleepÚis_bs4r
   ÚfindÚfindAllÚAttributeErrorÚclearÚKeyErrorrC   ÚhashÚadd)r?   ÚtldÚlangr   r   r   r   ÚstopÚpauseÚcountryÚextra_paramsr5   r6   ÚhashesÚcountÚbuiltin_paramr4   Ú
last_countÚkÚvr9   ÚsoupÚanchorsrJ   rI   rA   Úhs                              r!   r   r   Ó   se  è ø€ ôJ ‹U€Fð €Eô �uÓ€Eñ
 Øˆô (ò ˆØ˜L×-Ñ-Ó/Ò/Üð,àóð ðô ŒXœ›Ñ 
¨JÔ7ñ Ø�"Š9Ü¤$£&Ñ(‰Cä#¤d£fÑ,‰Cà�"Š9Üœt›vÑ%‰Cä ¤4£6Ñ)ˆCñ �e˜d“lð ˆ
ð
 !×&Ñ&Ó(ò 	,‰DˆAˆqÜ˜1“ˆAÜ˜1“ˆAÙ¢Q©Ð*Ñ+‰Cð	,ô 	�
‰
�5Ôô ˜˜Z¨Ó4ˆõ Ü   }Ó5‰Dä  Ó&ˆDð		(Ø—i‘i 8�iÓ,×4Ñ4°SÓ9ˆGð ò 	ˆAðØ˜‘y�ô
 ! Ó&ˆDÙØô �T“
ˆAØ�F‰{ØØ�J‰J�qŒMð ŠJð �Q‰JˆEÚ˜ ›Ùð5	ð< ˜ÒØð 	�‰ˆØ�"Š9Ü¤$£&Ñ(‰Cä#¤d£fÑ,ˆCóW �e˜d–løô: ò 	(à—9‘9 �9Ó'ˆDÙØ—
‘
”Ø—l‘l 3Ó'ŠGð	(ûô ò Ùðüsk   ‚7H=ºC?H=Ä:!G* ÅH=Å!H.Å&:H=Æ!H=Æ'8H=Ç!H=Ç(H=Ç*>H+È(H=È*H+È+H=È.	H:È7H=È9H:È:H=c                  ó*   — t        t        | i |¤Ž«      S )z«
    Shortcut to single-item search.

    Same arguments as the main search function, but the return value changes.

    :rtype: str
    :return: URL found by Google.
    )Únextr   )ÚargsÚkwargss     r!   r   r   o  s   € ô ”˜Ð' Ñ'Ó(Ð(r    )NT)ÚcomÚenÚ0ÚoffrE   r   Ng       @Ú NNT)7Úosr   ÚsysrW   r-   Úversion_infoÚhttp.cookiejarr   Úurllib.requestr   r   Úurllib.parser   r   r	   Ú	cookielibÚurllibÚurllib2Úbs4r
   rY   ÚImportErrorÚ__all__rQ   rT   rR   rU   rS   rN   ÚgetenvÚhome_folderÚpathÚjoinr+   Úloadr3   r)   ÚabspathÚsplitÚ__file__Úinstall_folderÚuser_agents_fileÚgzipÚopenÚfpÚ	readlinesÚstripr   r1   r   r   r:   rC   r   r   )Ú_s   0r!   ú<module>r•      sY  ðó< 
Û Û 
Û Û 
à×Ñ�AÑ˜ÒÝ+ß/ß;Ò;å&Ý!ß(ß+ðÝ!Ø€Fò

€ð )€ð€
ð!€ð"€ð3Ð ð<€ð
 ˆb�i‰i˜Ó€ÙØ�"—)‘)˜JÓ'€KÙØˆÙ˜"Ÿ'™'Ÿ,™, {Ð4DÓEÓF€
ð	Ø‡O�OÔð
 B€
ð$Ø—W‘W—_‘_ R§W¡W§]¡]°8Ó%<¸QÑ%?Ó@€NðCØŸ7™7Ÿ<™<¨Ð8LÓMÐÛØˆT�Y‰YÐ'¨Ó.ˆð	Ø35·<±<³>ÖB¨a §¡¥	ÒBÐà�H‰HŒJÙò+òDó""òNð* LMØ:>Ø'+óW-óx	)øð}	 ò Ý+ØƒFðûðV ò 	Ùð	üò$  Cøà�H‰HŒJÙûØò CØŸ7™7Ÿ<™<¨Ð8IÓJÐÙÐ"Ó#ð 	C rØ35·<±<³>ÖB¨a §¡¥	ÑBùÔBÐ÷	C÷ 	Cñ 	CüðCûð ò $Ø"�|Òð$ús¨   ÁF ÃF+ Ã7I Ä3G ÅF; ÅF6Å*F; Å-G Å>I ÆF(Æ'F(Æ+F3Æ2F3Æ6F; Æ;GÇG Ç)IÇ:H6ÈH%È$	H6È-	IÈ6H?	È;IÉI ÉIÉI ÉIÉI