
    i7              	           d Z ddlZddlZddlZddlZddlZddlmZ ddlm	Z	m
Z
mZmZ de	 dddZd	ed
ededee   fdZdededz  fdZdededefdZd Zedk(  r e        yy)u   
Prospecção ativa via Google Maps → CRM Linkia
Uso: python3 prospector.py --nicho "academia de ginástica" --cidade "São Paulo" --limite 50
    N)sync_playwright)LINKIA_TOKENLINKIA_LOCATION_IDLINKIA_PIPELINE_IDLINKIA_STAGE_IDzBearer zapplication/jsonz
2021-07-28)AuthorizationzContent-TypeVersionnichocidadelimitereturnc           	      *   g }|  d| }t               5 }|j                  j                  d      }|j                         }t	        d|        |j                  d|j                  dd              |j                  d       t        t        |d	z  d
            D ]@  }	 |j                  d      j                  }	|	j                  d       |j                  d       B |j                  d      j                         }
t	        dt        |
       d       |
d| D ]  }	 |j!                          |j                  d       i }	 |j                  d      j                  j#                  d      j%                         |d<   	 |j                  d      j                  }|j'                  dd      |d<   |d   j                  dd      j%                         |d<   	 |j                  d      j                  }|j'                  dd      xs d|d<   	 |j                  d      j                  }|j#                  d      j%                         |d<   	 |j                  d       j                  }|j#                  d!      j%                         |d"<   | |d#<   ||d$<   |j)                  d      r,|j+                  |       t	        d%|d    d&|d   xs d'         |j-                          ddd       |S # t        $ r Y  w xY w# t        $ r Y w xY w# t        $ r	 d|d<   Y Jw xY w# t        $ r	 d|d<   Y )w xY w# t        $ r d|d<   Y w xY w# t        $ r d|d"<   Y w xY w# t        $ r}t	        d(|        Y d}~ed}~ww xY w# 1 sw Y   |S xY w))z8Scrapa empresas do Google Maps e retorna lista de leads. em T)headlessu   🔍 Buscando: z#https://www.google.com/maps/search/ +i        zdiv[role="feed"]zel => el.scrollTop += 1500i  za[href*="/maps/place/"]z  Encontrados: z resultadosNi  h1)timeoutnomez[data-item-id^="phone"]zdata-item-idtelefonez
phone:tel: z[data-item-id="authority"]hrefsitez[data-item-id^="address"]enderecozspan[aria-hidden="true"]i  	avaliacaor
   r   u     ✅ z | zsem telu     ⚠️ Erro ao coletar lead: )r   chromiumlaunchnew_pageprintgotoreplacewait_for_timeoutrangeminlocatorfirstevaluate	Exceptionalllenclick
inner_textstripget_attributegetappendclose)r
   r   r   leadsquerypbrowserpage_panelcardscardleadtel_elsite_eladdr_el	rating_eles                     1/opt/mia/workspace/prospeccao_ativa/prospector.pyscrape_google_mapsrD      s   EgT&"E		 Ja**##T#2!w'(		7c38O7PQRd# s6Q;+, 	A%78>>;<%%d+		 67;;=E
|;78'6N 3	D2

%%d+#'<<#5#;#;#F#Ft#F#T#Z#Z#\DL
*!\\*CDJJF'-';';NTX';'YD$'+J'7'?'?b'Q'W'W'YD$
&"ll+GHNNG#*#8#8#8#N#TRTDL
*"ll+FGMMG'.'9'9$'9'G'M'M'OD$
+ $-G H N NI(1(<(<T(<(J(P(P(RD% !&W!'X88F#LL&F4<.D4D4Q	3RST_3	j 	UJX L}  " !  ! *')D$* ! &#%DL& ! *')D$* ! +(*D%+  7s;<MJX Ls   BN =K0AN #M#<LAL5L&>L;>MAM#N0	K>9N=K>>N	L
M#NLM#L#M#"L##M#&L84M#7L88M#;M	M#MM#M M#M  M##	N,N :N NNNr=   c                 "   | d   j                  dd      }|d   }t        |      dkD  r|d   nd}t        j                  dd| j	                  dd            }t
        ||| d   |xs d| j	                  d	      xs d| j	                  d
      xs dd| j	                  dd      | j	                  dd      gdd| j	                  dd      dgd
}|j                         D ci c]  \  }}|	|| }}}t        j                  dt        |      }|j                  dv rF|j                         j	                  di       j	                  d      }	t        d| d    d|	 d       |	S t        d|j                   d|j                  dd         yc c}}w )z2Cria contato no CRM Linkia e retorna o contact ID.r   r      r   r   z[^\d+]r   Nr   r   zprospeccao-ativar
   r   Google Mapsavaliacao_googler   )keyfield_value)

locationId	firstNamelastNamecompanyNamephonewebsiteaddress1tagssourcecustomFieldsz.https://services.leadconnectorhq.com/contacts/headersjson      contactidu     👤 Contato criado: z ()u     ❌ Erro ao criar contato:  - rY   )splitr,   resubr1   r   itemsrequestspostHEADERSstatus_coderW   r!   text)
r=   
nome_splitprimeiro	sobrenomer   payloadkvr
contact_ids
             rC   criar_contato_linkiarp   m   s   f##C+J!}H!$Z1!4
1"IvviTXXj"%=>H )F|!T88F#+tHHZ(0D#TXXgr%:DHHXr<RS&txxR7PQ
G !(A11=q!tAGA8	A 	}}
"VVX\\)R044T:
'V~R
|1EF-amm_Ct~NO Bs   
F*Fro   c                     t         t        | d   t        d|dd}t        j                  dt
        |      }|j                  dv rt        d       y	t        d
|j                   d|j                  dd         y)u1   Cria oportunidade no pipeline Prospecção Ativa.r   openrG   )
pipelineIdrK   namepipelineStageIdstatus	contactIdrS   z3https://services.leadconnectorhq.com/opportunities/rU   rX   u&     🎯 Oportunidade criada no pipelineTu     ❌ Erro na oportunidade: r^   NrY   F)	r   r   r   rc   rd   re   rf   r!   rg   )r=   ro   rk   rn   s       rC   criar_oportunidade_linkiarx      s~     )(V*G 	=	A 	}}
"68,Q]]O3qvvds|nMN    c            	         t        j                  d      } | j                  ddd       | j                  ddd       | j                  d	t        d
d       | j	                         }t        d|j                   d|j                   d|j                   d       t        |j                  |j                  |j                        }|st        d       y t        dt        |       d       d}|D ]5  }t        |      }|rt        ||       |dz  }t        j                  d       7 d|j                  j                  dd       d|j                  j                  dd       d}t!        |dd      5 }t#        j$                  ||dd        d d d        t        d!| d"t        |       d#       t        d$|        y # 1 sw Y   3xY w)%Nu'   Prospecção Google Maps → Linkia CRM)descriptionz--nichoTu   Ex: "clínica odontológica")requiredhelpz--cidadeu   Ex: "São Paulo"z--limiter   u   Máximo de leads (padrão: 20))typedefaultr}   u   
🚀 Iniciando prospecção: r   z
 (limite: z)
zNenhum lead encontrado.u   
📋 z+ leads encontrados. Enviando para o CRM...
r   rF   g      ?z*/opt/mia/workspace/prospeccao_ativa/leads_r   r9   z.jsonwzutf-8)encodingF   )ensure_asciiindentu   
✅ Concluído: /z leads enviados ao CRM Linkiau   📁 Relatório salvo em: )argparseArgumentParseradd_argumentint
parse_argsr!   r
   r   r   rD   r,   rp   rx   timesleepr#   rr   rW   dump)parserargsr4   okr=   ro   	relatoriofs           rC   mainr      s   $$1Z[F
	D7UV

T8JK

b?_`D	+DJJ<tDKK=
SWS^S^R__b
cdtzz4;;DE'(	GCJ<K
LM	
B )$/
%dJ7!GB

3 =T[[=P=PQTVY=Z<[[\]a]g]g]o]opsux]y\zz  AI	iw	/ :1		%q9: 
rd!CJ</L
MN	&yk
23	: :s   3F??G__main__)__doc__r   rW   r   r`   rc   playwright.sync_apir   configr   r   r   r   re   strr   listdictrD   rp   boolrx   r   __name__ ry   rC   <module>r      s   
    	  /  |n-&Qc Q3 Q QT
 Qh%t %d
 %PD c d 44D zF ry   