
    	Ih                         d dl mZmZ d dlmZ d dlmZm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 d dlmZ d dlZd Zd	 Zd
 Zd Zd Z edg       eef      d               Zy)    )api_viewpermission_classes)AllowAny)KeywordGroups)JsonResponseN)ThreadPoolExecutoras_completed)datetimec                 f    t        j                  |       }|j                   d|j                   }|S )N.)
tldextractextractdomainsuffix)site_urlextdomain_names      1/var/www/html/api/serp/keyword_insight_tracker.pyparse_domainr      s0    


X
&CZZL#**.K    c                 Z    	 t        d | D        d      }|S # t        $ r
}Y d }~yd }~ww xY w)Nc              3   J   K   | ]  }|j                  d       |d      yw)search_volumeN)get).0items     r   	<genexpr>z)get_last_search_volume.<locals>.<genexpr>   s1       #BT[_[c[cds[t  \A4#8  #Bs   #
#r   NA)next	Exception)search_volume_datalast_search_volumees      r   get_last_search_volumer%      sB    !  #BEW  #B  DE  F!! s    	**c                 V   | D cg c]  }|j                    }}| D cg c]  }|j                   }}| D cg c]  }|j                   }}d}d}| d| }t        j                  |j                  d            j                  d      }d}	d| dd}
|d	   d
|ddg}t        j                  |	|
t        j                  |            }|j                         }t        |       |j                  d      dk7  r1t        d|j                  d       d|j                  d              g S |d d |d	   d
dg}d}t        j                  ||
t        j                  |            }|j                         }|j                  d      dk7  r/t        d|j                  d       d|j                  d              i }|j                  dg       D ][  }|j                  dg       D ]D  }|j                  dg       D ]-  }|j                  d      }|j                  dd      }|s)|||<   / F ] |d d d
dg}d}t        j                  ||
t        j                  |            }|j                         }i }|j                  dg       D ]k  }|j                  dg       D ]T  }|j                  dg       D ]=  }|j                  d      }|j                  di       }|s)|j                  d d      ||<   ? V m g }|j                  dg       D ]  }|j                  dg       D ]  }|j                  d      xs d!}t        |j                  d"            }|j                  d#      |j                  d#      nd$} |j                  d"      xs g }!|j                  |d	      }"|j                  |d	      }#|!L|!D $cg c]A  }$|$j                  d%      xs d	|$j                  d&      xs d	|$j                  d      xs d	d'C }%}$|j                  ||| |"|#%d(         |S c c}w c c}w c c}w c c}$w ))Nzranjit.singh@richestsoft.com38ea7274bacf72f0:zutf-8zIhttps://api.dataforseo.com/v3/keywords_data/google_ads/search_volume/livezBasic zapplication/json)AuthorizationzContent-Typer   enr   )location_codelanguage_codekeywordssort_by)headersdatastatus_codei N  zError:  - status_messagei  )r-   r+   r,   zQhttps://api.dataforseo.com/v3/dataforseo_labs/google/bulk_keyword_difficulty/livezDifficulty API Error: tasksresultitemskeywordkeyword_difficultyr   )r-   r,   zGhttps://api.dataforseo.com/v3/dataforseo_labs/google/search_intent/livekeyword_intentlabel monthly_searchescpcg        yearmonth)r>   r?   r   )r7   r   r=   r8   search_intentr<   )r7   r+   r   base64	b64encodeencodedecoderequestspostjsondumpsprintr   r%   append)&keyword_objskkeyword_listlocation_listsite_url_listdataseo_usernamedataseo_passwordauth_stringauth_base64urlr/   payloadresponse	json_datadifficulty_payloaddifficulty_urldifficulty_responsedifficulty_datadifficulty_maptaskr5   r   r7   
difficultysearch_intent_payloadsearch_intent_urlsearch_intent_responsesearch_intent_datasearch_intent_mapintentextracted_datar   r=   r<   r8   r@   mcleaned_monthly_searchess&                                         r   ranked_keywordsrh      s   '34!AII4L4.:;Q__;M;)56AQZZ6M65)%&a(8'9:K"";#5#5g#>?FFwOK
UC"( 6HZ[G!.q!1DVbo~  AG}}S'

78KLHI	)}}]#u,	m45SGW9X8YZ[	'3ET':][\M]ptuvhN"--djjYkNlm)..0O=)U2&':':='I&J#oNaNabrNsMtuvN##GR0 9hhx, 	9F

7B/ 9((9-!XX&:DA
.8N7+	9	99 +7u*=PTUVa%]]+<gTXT^T^_tTuv/446"&&w3 Khhx, 	KF

7B/ K((9-"2B717GT1J%g.	K	KK Ngr* \HHXr* 	\Dhhy)/RG2488<N3OPM%)XXe_%@$((5/cC#xx(:;Ar!/!3!3GQ!?-11'1=M+ _o  ,p  Z[QUU6]5GaRSRWRWX_R`Redexyx}x}  N  yO  yT  ST  -U  ,p(  ,p!!g^a  zL  _l  BZ  #[  \	\\ W 5;6J ,ps   PPP!0AP&c                 4   	 t        |       }|D ci c]  }|j                  d      s|d   | }}| D ]  }|j                  |j                        }t        d|       |ro|j                  d      |_        |j                  d      |_        |j                  d      |_        |j                  d      |_        |j                  d      |_	        d	|_        d	|_        d	|_        d	|_	         | S # t        $ r}t        d|        g cY d }~S d }~ww xY wc c}w )
Nz[Search Volume Metrics Error] r7   z	Keyword: r@   r   r<   r=   r8   r   )
rh   r!   rI   r   r7   r@   r   r"   r=   r8   )rK   resultsr$   r   
result_mapr7   r0   s          r   process_keyword_batchrl   k   s   !,/
 5<SDtxx	?R$y/4'SJS .~~goo.k$ $(HH_$=G!$(HH_$=G!)-2D)EG&((5/GK)-2F)GG&$(G!$(G!GK)-G&%.( 5  .qc23	 Ts'   C/ DD/	D8DDDc           	         | j                   }t        j                  j                  |      j	                  d       t        |      dz  dk(  rdnd}t        t        j                  j                  |d	      j                  |            }|d d }t        |       |s1t        j                  j                  |      j	                  d
       y d}t        dt        |      |      D cg c]
  }||||z     }}g }t        d      5 }	|D 
cg c]  }
|	j                  t        |
       }}
t        |      D ]&  }|j!                         }|s|j#                  |       ( 	 d d d        |r|D ]  }|j$                  }||d d d   |_        t        j                  j                  |j                         j	                  |j&                  |j(                  |j*                  |j,                  |j$                  d
        t        j                  j                  |      j	                  d
       y c c}w c c}
w # 1 sw Y   xY w)NidSCHDmetric_status      created_datez-created_dateINIT)fk_group_idrr   COMPd   r      )max_workers)r=   r8   r@   r   r"   rr   )ro   r   objectsfilterupdateintlistr   order_byrI   rangelenr	   submitrl   r
   r5   extendr"   r=   r8   r@   r   )group
sort_ordergroup_id
sort_fieldr-   
batch_sizeibatchesupdated_keywordsexecutorbatchfuturesfuturer5   r7   r"   s                   r   process_groupr      s7   xxH
NNX&--F-C#&z?Q#6!#;JGOO**xv*V__`jklHbq\H	(O*111GJ5:1c(mZ5XYxA
N+YGY 
	* 0hNUVU8??#8%@VV"7+ 	0F]]_F ''/	00 ' 	HG!(!;!;!--?"-E*OO""gjj"188W[[]d]w]w  HO  H]  H]  mt  mB  mB  W^  Wq  Wq  AG8  H	H NNX&--F-C) Z W0 0s*   (H.H8H3)"H8H83H88IGETc           	      t   t         j                  j                  d      j                         }|sjt         j                  j                  d      j                         }|r:t         j                  j                  |j                        j                  d       |st        ddd      S 	 t        ||       t        ddd      S # t        $ rh}t        d|j                   d	t        |              t         j                  j                  |j                        j                  d
       Y d}~zd}~ww xY w)z<Cron job to process one group at a time using metric_status.rp   rq   rv   rn   truezNo groups to process)statusmessagez[Group Error] r2   FAILNzGroup processing completed)r   r}   r~   firstro   r   r   r   r!   rI   str)requestr   r   r$   s       r   insightTrackerr      s   
 NN!!!7==?E%%F%;AACNN!!UXX!.55F5Kv:PQRRHeZ(
 66RSTT	  HuxxjCF845*111GGHs   ,C 	D7AD22D7)rest_framework.decoratorsr   r   rest_framework.permissionsr   serp.modelsr   r   django.httpr   rE   rG   rA   concurrent.futuresr	   r
   r   r   r   r%   rh   rl   r   r    r   r   <module>r      sm    B / ' $    ?  M`B!DH 
5'XK U ! Ur   