
    UhR                     D   d dl mZ d dlmZmZ d dlmZ d dlmZ d dl	m
Z
mZmZmZmZ d dlmZ d dlmZmZ d dlZd d	lmZmZ d d
lmZmZmZmZ d dlm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Zd dl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* d dl+Z+d dlmZ d dl,m-Z- dZ.dZ/ edg      d        Z0 edg      d        Z1 edg      d        Z2 edg      d        Z3 edg      d        Z4 edg      d        Z5 edg      d        Z6 edg      d        Z7 edg      d        Z8 edg       eef      d               Z9 edg       eef      d               Z: edg       eef      d               Z; edg       eef      d                Z9 edg       eef      d!               Z<y)"    )render)api_viewpermission_classes)AllowAny)Response)RegionKeywordLanguageGroupsCompetitors)Account)datetimetimeN)JsonResponseHttpResponse)PrefetchCountQIntegerField)Cast)settings)
safe_roundcapitalized_wordsearch_volume_labelssearch_volume_valuesrank_history_labelsrank_history_values)r   )	Paginator z#https://api.scrapingdog.com/google/POSTc           
         | j                   dk(  r| j                  j                  d      }| j                  j                  d      }|rt        |      rt	        t
        j                  j                         j                  dddd            }t        j                  j                  ||      j                  d	d
      }t        j                  j                  |      j                  d	d
      }|j                         }|j                         }|rb|d
   j                  d      }|d	   j                          d|d   j                          d|d   j                  dd      j                          }	nf|rb|d
   j                  d      }|d	   j                          d|d   j                          d|d   j                  dd      j                          }	nd}	| j                  j                  d      dk(  rt!        d||	d      S |j#                         }
t	        t$        j                  j                         j                  dd            }t&        j                  j                  |      j#                         }t&        j                  j                  ||      j                  d      j)                         }|r|d   nd }g }d||d|
||||	d	}t!        |      S t!        ddd      S )Nr    useridgrpididregion_nameregion_coderegion_country
fk_user_idfk_group_idisocodelocationr)   (|r      )r   zus|google.com|United StatestypeRGOLYtrue)statusrgDRlanguage_name)r)   r$   domain_name0)	r5   dNg_lu_kwk_lo_tglnger6   r7   falseSomething went wrongr5   message)methoddatagetstrlistr   objectsallvaluesr	   filterlastsplitlowerstripreplacer   countr
   r   first)requestr"   r#   regionsGrpKeywdInsKeywdInsGrplastKeywd	lastKeywdlocation_partslastKeywdRegionkeycountvalue	languagesgroupcountvalue	groupdatar9   taglistresponse_datas                    /var/www/html/api/serp/views.py
getsettingrd      s   ~~!!(+  )c%j6>>--/66t]M[klmG "//00FPU0V]]^gistK---@GG	S]^H&++-L I!-j!9!?!?!D%1)%<%B%B%D$EQ~VWGXG^G^G`Faabcqrsctc|c|  ~A  BD  dE  dK  dK  dM  cN  #O!*:!6!<!<S!A%.y%9%?%?%A$B!NSTDUD[D[D]C^^_`nop`q`y`yz}  A  aB  aH  aH  aJ  `K  #L"?||'72#vWO$\]]'--/MX--113::4QRI$nn33v3FLLNO--E-JQQR_`ffhI6?)M2TK G'-[ben{  FM  W`  ho  wF  GM..77MNOO    c                 <   	 t        d       | j                  j                  dd      }| j                  j                  dd      j                         }| j                  j                  dd      j                         }| j                  j                  dd      j                         }| j                  j                  dd      j                         }| j                  j                  d	d      j                         }| j                  j                  d
d      }| j                  j                  dd      j                         }|r|st	        ddid      S t
        j                  j                  t        |            j                         }	|	st	        ddid      S t        j                  j                  |      j                         }
|
st	        ddid      S t        j                  j                  |	||t        j                         d      \  }}| j                  j                  dg       }t        |t               rYt#        t%        t'        t         j                  |j)                  dd      j+                         j-                  d                        }|st	        ddid      S t.        j                  j                  |      j                         }d}|rt        |j0                        }|D cg c]  }t3        d6i d|	d|d|j+                         j                         d|d |d!| d"| d#d|d$|d|d%|
j4                  j                         d	|d
|d&d'd(t        j                         d)d*d+g d,dd-dd.dd/t        j                         d0d }}t2        j                  j7                  |       t	        d1||j8                  d2d3      S c c}w # t:        $ r.}t        d4|       t	        dt!        |      id5      cY d }~S d }~ww xY w)7NzFunction calling here... r"   r   languager   
group_nameregioncountrynameplatformr+   urlerrorInvalid userid or group name  r5   r$   User not found  r8   zInvalid language)r9   project_automation_time)fk_userrh   defaultskeyword
,zNo valid keywords providedr%     rv   fk_groupsite_urltargetr,    (r1   location_codelanguage_codeexactdomainFlastranked_datestatus_from_start-rankranknowrank_sincestartauto_refresh_countmodified_datedayvalzKeywords successfully saved)rD   group_createdgroup_id   Error:    )printrF   rG   rQ   r   r   rJ   rM   intrT   r
   r   get_or_creater   now
isinstancerH   rI   setmaprR   rP   rO   r   searchvolume_country_idr	   r   bulk_creater$   	Exception)rU   r"   getLanguagegrpNameri   rj   rk   r+   r~   userlanguageDatagroupcreateddataChecklistregion_datar   kwkeywordses                      rc   
addProjectr   K   s   Q7)*!!(A.ll&&z26<<>,,""<4::<!!(B/557ll&&}b9??A<<##J399;,,""9a0<<##E2.446 WW&DEcRR %%V%5;;=W&67DD  ''..[.IOOQW&89#FF  55dwqy  W_  Wc  Wc  We  bf5  gw  ((B7mS) SM4I4I$PS4T4Z4Z4\4b4bcf4g%h!ijMW&BCCPPnn+++?EEG C CDM6 $1
0 /   
((* "	
   #82k]!4  , % +88>>@ "   " !) #&  !" #$ !"%& $%'( 'lln)* +
 
4 	##H-8!(!HH
 
 	
9
J  7i#a&)#667sL   EO$ AO$ >O$ CO$ +AO$ 6B-O#;O$ O$ $	P-#PPPc                    	 | j                   j                  dd      }|st        ddid      S t        j                  j                  t        |            j                         }|st        ddid	      S t        t        j                  j                  |
      j                  ddddddd            }|D ]l  }|d   }t        j                  j                  |dd      j                         |d<   t        j                  j                  |d      j                         |d<   n t        dt        |      id      S # t        $ r.}t        d|       t        dt        |      id      cY d }~S d }~ww xY w)Nr"   r   rm   rn   ro   rp   rq   rr   rs   r-   r$   r)   rh   uptrend_cntdowntrend_cntr9   created_date
   )r}   ranknow__gtranknow__ltetop10_recordr0   )r}   r   firstPosition_recordprojectsr   r   r   )rF   rG   r   r   rJ   rM   r   rT   rI   r   rL   r	   rS   r   r   rH   )rU   r"   r   projectListprojectprj_idr   s          rc   getAllProjectsr      sr   7!!(A. W&DEcRR %%V%5;;=W&67DD6>>00D0AHH|]ikx  {J  LY  [i  j  k" 	iGT]F&-oo&<&<fZ[jl&<&m&s&s&uGN#.5oo.D.Df^_.D.`.f.f.hG*+	i T+%67DD 7i#a&)#667s*   ,D> AD> 7CD> >	E5#E0*E50E5c                    	 | j                   j                  dd      }| j                   j                  dd      }| j                   j                  dd      }| j                   j                  d      }| j                   j                  d      }|r|st        ddid	
      S t        j                  j                  t        |            j                         }|st        ddid
      S t        j                  }|r&t        j                  |d      j                  |      nd }|r&t        j                  |d      j                  |      nd }	t        d| d|	        |	r|	j                  dddd      }	t        j                  j                  ||      }
|r|	r|
j                  ||	g      }
n)|r|
j                  |      }
n|	r|
j                  |	      }
d }|r8t        j                  j                  t        |            j                         }n7t        j                  j                  t        |            j                         }i }|r,|j                   r |j                   D ci c]  }|d   |d    }}t#        |
j%                  dddd d!ddd"d#d$d%d&d'd(d)d*d+d,d-            }|D cg c]  }i ||r|j                  |d   d.      nd.t'        |d%         t)        |d%         |d,   t+        |d,         t-        |d(         t/        |d&         t-        |d)         t-        |d'         d/	 }}t        d0|id1
      S c c}w c c}w # t0        $ r.}t        d2|       t        dt3        |      id3
      cY d }~S d }~ww xY w)4Nr"   r   r#   compid	from_dateto_daterm   zInvalid userid or group IDro   rp   rq   rr   rs   z%Y-%m-%d)tzinfozFrom Date: z, To Date:    ;   i?B )hourminutesecondmicrosecondr(   )created_date__range)created_date__gte)created_date__lter*   rx   r   r$   r)   r*   r~   r   
ranked_urlr   search_volumesearch_volume_datasearch_intenttraffickeyword_difficultycpctrack_statusmetric_statusrank_historyr   >100)	matched_ranksearch_volume_monthly_labelssearch_volume_monthly_valuesrank_history_daily_labelsrank_history_daily_valuesr   r   r   r   r      r   r   )rF   rG   r   r   rJ   rM   r   rT   pytzUTCr   strptimerR   r   r	   r   r   rI   rL   r   r   r   r   r   r   rH   )rU   r"   r#   r   from_date_strto_date_strr   utcr   r   keyword_querysetcompetitorDatarank_mappingitemkeywordListr   optimized_keywordListr   s                     rc   getAllKeywordsr   Q  s   N7!!(A.  !,!!(A.((5ll&&y1 UW&BCCPP%%V%5;;=W&67DD hhXeH%%mZ@HHPSHTko	T_(##K<DDCDPeiI;k';< ??2bf?U #??11Tu1U/66IW^K_6`/666S/666Q (00773v;7GMMON(0077CJ7OUUWNn55FTF]F]^dDOT&\9^L^ +22,z8YL)_>RY(<e^^^	
 * "!
 KY 0 0I G_e0DRH\E]0^0DRH\E]0^-/-?-@NAS-T&04H1I&J!1"_2E!F!"U),%bm4!
 !
  %:;CHH7 _!
$  7i#a&)#667sK   BM	 AM	 'F M	 'L?72M	 )BM.M	 ?
M	 		N #M;5N ;N c                 
   	 | j                   d   }| j                   d   }| j                   d   j                         }t        j                  j	                  |      j                         }| j                   d   }| j                   j                  dd      j                         }| j                   j                  dd      j                         }| j                   j                  d	d      j                         }| j                   j                  d
d      }	| j                   j                  dd      j                         }
|r| j                   d   j                         }n+| j                   d   j                         j                         }|}t        j                  j	                  t        |            j                         }|st        ddid      S t        j                  j	                  t        |            j                         }|st        ddid      S |r|r|j                  r| j                   d   }t        |t              s| j                  d   j!                  dd      j                         j                         }|j#                  d      }t        t%        t	        d t'        t(        j                  |                        }t+        |      dkD  rt        t,        j                  j	                  |||g|| j                   d   j                         | j                   d	         j/                  dd            }g }t%        |      t%        |      z
  }t+        |      }|dk(  rt        dddd      S t0        j                  j	                  |      j                         }d}|rt        |j2                        }|D cg c]  }t-        d<i d|d |d|j                         j                         d!|
d"|
d#| d$| d%d|d&|d|d'|j                  j                         d	|d
|	dd(d)t5        j6                         d*d+d,g d-dd.dd/dd0t5        j6                         d1d }}t,        j                  j9                  |       t        j                  j	                  t        |            j;                  d2d23       t        d4dd5t        |      d6      S t=        dd7d8      S t=        dd9d8      S c c}w # t>        $ r.}tA        d:|       t        dt)        |      id;      cY d }~S d }~ww xY w)=Nr"   r#   rg   rt   r   ri   r   rj   rk   r+   r   rl   rq   rm   rr   rs   rp   Project not foundrx   ry   rz   )keyword__insite_url__containsexactdomain__inr*   ri   rk   TflatrA   warningz$Keywords already exists. Check once.)r5   rD   errormsgr{   r|   rv   r}   r~   r   r,   r   r1   r   r   Fr   r   r   r   r   r   r   r   r   INIT)r   r   r4   zKeyword added)r5   EngmdrD   kwcntzAlready keywords are exitsrC   z*Oops! Sorry You've no active subscription.r   r   r   )!rF   rQ   r
   rJ   rM   rT   rG   rP   r   r   r   r   r   r   rI   r    rR   rO   r   r   rH   lenr	   values_listr   r   r   r   r   updater   r   r   )rU   r"   r#   r   r   r   ri   rj   rk   r+   r~   rl   domainr   r   r   dataCheckKeywordskeywordArrayexistsKWr   newkeywordsnewKeyCountr   r   r   r   s                             rc   
addKeywordr     s]   R7h'W%ll:.446''..[.IOOQll=1!!(B/557ll&&}b9??A<<##J399;,,""9a0<<##E2.446,,u%++-C,,u%++-335C%%V%5;;=W&67DD%%U%4::<W&9:3GGe : :#LL3MmT2$+LL$;$C$CD#$N$T$T$V$\$\$^!066s; $Sc#))\6R)S%T U=!A% 6 6=ek  J  ~K  Y^  gn  gs  gs  t|  g}  gC  gC  gE  PW  P\  P\  ]g  Ph 6  !i  !u  !u  v  FJ  !u  !K  L!-03x=@!+.!##w9  [A  %B  C  C$nn333GMMO $$'(K(K$LM4 *10 /   $!& !#
 0 0 2 "*	
  ( %+82k]!!<  & '4 "- '3&@&@&F&F&H "* !( %* )1 +.   !" !"#$ )*%& ,-'( '/lln)*  !+ 4 ++H5%%U%4;;_e;f6B?ehiteu vww7?[ \]]7?k lmmAD  7i#a&)#667sS   GT AT E"T >AT 	B-T6A3T *T 8T T 	U#T=7U=Uc                 x   	 | j                   d   }| j                   d   }| j                   d   }t        j                  j                  t	        |            j                         }|st        ddid      S t        j                  j                  t	        |            j                         }|st        dd	id      S t        j                  j                  |||
      \  }}|rt        ddd      S t        ddd      S # t        $ r.}t        d|       t        dt        |      id      cY d }~S d }~ww xY w)Nr"   r#   rl   rq   rm   r   rs   rp   rr   )rv   r}   rl   r4   zCompetitor created successfullyrC   rA   rB   r   r   )rF   r   rJ   rM   r   rT   r   r   r   r   r   r   r   rH   )	rU   r"   r#   rl   r   r   
competitorr   r   s	            rc   addCompetitorr     s   7h'W%ll5!%%U%4::<W&9:3GG%%V%5;;=W&67DD)11??W\be?f
G6>_ `aa7?U VWW 7i#a&)#667s1   A4D 7AD ?4D 4D 	D9#D4.D94D9c                 l   	 t        | j                  j                  dd            }|st        ddid      S 	 t        j
                  j                  |      }t        j
                  j                  |
      j                  t        dt        j
                  j                                     }g }|D ]  }|j                  j                         }|j                  |j                  |j                   |j"                  |D cg c]1  }|j                  |j$                  |j&                  |j(                  d3 c}d        t+        d|d      S # t        j                  $ r t        ddid	      cY S w xY wc c}w # t,        $ r.}t/        d|       t        dt1        |      id      cY d }~S d }~ww xY w)Nr"   r   rm   User ID is requiredro   rp   rq   rr   rs   r-   competitors_set)queryset)r$   rl   r   r   )r   rh   r9   competitorsr4   r5   rF   Error:r   )r   rF   rG   r   r   rJ   DoesNotExistr   rM   prefetch_relatedr   r   rK   r   appendr$   rh   r9   rl   r   r   r   r   r   rH   )	rU   r"   r   groupsrF   r   r  compr   s	            rc   getCompetitorr	    s   %7W\\%%h23W&;<SII	E??&&&&1D
 &&&&9JJ8Tep{  qD  qD  qH  qH  qJ  LK  L 	E//335KKK %"'"2"2#(#4#4 %0$ ! #'''#'88,0,=,=(,	$		& vt<==5 ## 	EW&67DD	E$  7h#a&)#667sM   5E<  E B'E<  6E76E< "E41E< 3E44E< <	F3#F.(F3.F3c                 \   	 t        | j                  j                  dd            }t        | j                  j                  dd            }|st        ddid      S 	 t        j
                  j                  |      }t        t        j
                  j                  t        |            j                               }t        d|d      S # t        j                  $ r t        dd	id
      cY S w xY w# t        $ r.}t        d|       t        dt        |      id      cY d }~S d }~ww xY w)Nr"   r   r#   rm   r   ro   rp   rq   rr   rs   r   r4   r  r  r   )r   rF   rG   r   r   rJ   r  rI   r   rM   rL   r   r   r   rH   )rU   r"   r#   r   r   r   s         rc   getProjectCompetitorsr  =  s
   7W\\%%h23GLL$$Wa01W&;<SII	E??&&&&1D k1188SZ8PWWYZv~FGG	 ## 	EW&67DD	E
  7h#a&)#667sC   AC4  C >AC4 "C1.C4 0C11C4 4	D+=#D& D+&D+c                    	 | j                   d   }| j                   d   }| j                   d   }t        j                  j                  t	        |            j                         }|st        ddid      S t        j                  j                  t	        |            j                         }|st        dd	id      S t        j                  j                  t	        |      t	        |      
      j                         }|r|j                          t        ddd      S t        ddd      S # t        $ r.}t        d|       t        dt        |      id      cY d }~S d }~ww xY w)Nr"   r#   r   rq   rm   r   rs   rp   rr   )r$   r*   r4   zCompetitor deleted successfullyrC   rA   zCompetitor not foundr   r   )rF   r   rJ   rM   r   rT   r   r   r   deleter   r   r   rH   )rU   r"   r#   r   r   r   r   r   s           rc   deleteCompetitorr  Q  s5   7h'W%h'%%U%4::<W&9:3GG%%V%5;;=W&67DD !((//3v;CPUJ/W]]_
6>_ `aa7?U VWW 7i#a&)#667s2   A4D. 7AD. ?A D.  D. .	E%7#E E% E%GETc                 X   	 t         j                  j                  d      j                         }|st	        ddd      S |j
                  }|j                  }|j                  }g }t        |      dkD  r|D cg c]  }|d   	 }}g }t        j                  j                  |      j                  |	      }t        |      dkD  r|D ]  }	d
| d|	j                   d}
t        j                  j                  t        j                   |
      }	 t#        |d      5 }t%        j&                  |      }d d d        j)                  dg       D ]K  }||j)                  dd      v s|j)                  dd      }|-|j+                  |	j,                  |d        n  t        |      dkD  r3t         j                  j                  ||      j5                  |d      }n1t         j                  j                  ||      j5                  d      }|rt	        ddd      S t	        ddd      S c c}w # 1 sw Y   xY w# t.        $ r t1        d|
        Y t$        j2                  $ r t1        d|
        Y w xY w# t6        $ r$}t1        d|       t	        ddd      cY d }~S d }~ww xY wNr   r   rA   zNo Competitors foundrC   r   rx   r   )r   	jsonData__z.jsonrorganic_resultslinkr   r   r   )rx   r   zFile not found: zInvalid JSON in file: )r*   rl   COMP)r   r   r4   z%Matched keywords updated successfullyzUpdate failedr  zCompetitors Matching Failedr   rJ   rM   rT   r   r*   rl   r   r   r	   excluder$   ospathjoinr   
MEDIA_ROOTopenjsonloadrG   r  rx   FileNotFoundErrorr   JSONDecodeErrorr   r   rU   r   r#   rl   keywords_listcompetitor_keywordsr   keywordsDatar   keywrdfileName	file_pathfrF   entrypositionupdate_resultr   s                     rc   competitorMatchKeywordsr/  k     3[ ((//V/DJJL
7?U VWW&&nn"++ }!?L"Mt4	?"M"M ??))e)<DDQdDex=1" ?&ugQvyyk?GGLL)<)<hG	?i- ,#yy|, "&*;R!@ &%))FB"77',yy'@H'3 , 3 3X`4a b %&?* |q '//665c6RYYco  EY  FM'//665c6RYYgmYnM6>e fgg7 OPPI #N, , ) 9,XJ78++ ?28*=>?  [hw;XYZZ[   =I<  8I< 8H)BI< H;H./1H;!H;6!H;BI< I< )I< .H8	3H;;I9I<  I95I< 8I99I< <	J)J$J)$J)c                 
   t         j                  j                         }|D ]S  }t        j                  j	                  |j
                        j                  d       d|_        |j                          U t        ddd      S )Nr   r   r  r4   'Daily rank tracker has been rescheduledrC   )
r   rJ   rK   r	   rM   r$   r   r   saver   rU   r  r   s      rc   scheduleRankTrackingr6    sr     ^^!F 5884;;;P $

 66_`aare   c                 
   t         j                  j                         }|D ]S  }t        j                  j	                  |j
                        j                  d       d|_        |j                          U t        ddd      S )Nr   r   )r   r4   r3  rC   )
r   rJ   rK   r	   rM   r$   r   r   r4  r   r5  s      rc   scheduleMetricsTrackingr8    sr     ^^!F 5884;;&;Q %

 66_`aare   c                 X   	 t         j                  j                  d      j                         }|st	        ddd      S |j
                  }|j                  }|j                  }g }t        |      dkD  r|D cg c]  }|d   	 }}g }t        j                  j                  |      j                  |	      }t        |      dkD  r|D ]  }	d
| d|	j                   d}
t        j                  j                  t        j                   |
      }	 t#        |d      5 }t%        j&                  |      }d d d        j)                  dg       D ]K  }||j)                  dd      v s|j)                  dd      }|-|j+                  |	j,                  |d        n  t        |      dkD  r3t         j                  j                  ||      j5                  |d      }n1t         j                  j                  ||      j5                  d      }|rt	        ddd      S t	        ddd      S c c}w # 1 sw Y   xY w# t.        $ r t1        d|
        Y t$        j2                  $ r t1        d|
        Y w xY w# t6        $ r$}t1        d|       t	        ddd      cY d }~S d }~ww xY wr  r  r$  s                     rc   r/  r/    r0  r1  c                    t        d       d}d}	 t        j                  j                  t	        d      t	        d      z        j                  d      d | }|sn|t        |j                  dd	            }t        j                  j                  |
      j                  d       |t        |      z  }t        dt        |       d|r|d   nd        t        d| d| dd      S )NzProcess of INIT started...d   r   Tr  r  SCHDr$   r   )id__inr   zUpdated batch of z starting with ID zN/Ar4   z  keywords updated in batches of .rC   )r   r	   rJ   rM   r   order_byrI   r   r   r   r   )rU   
batch_sizetotal_updatedbatchidss        rc   scheduleMetricsTrackingKeywordsrD    s     

&'JM
&&6"QF%;;

(4.*& 5$$T$56c*11v1FS!!#c(+=c!fQV=WXY  #_$DZLPQR  re   )=django.shortcutsr   rest_framework.decoratorsr   r   rest_framework.permissionsr   rest_framework.responser   serp.modelsr   r	   r
   r   r   account.modelsr   r   r   r   django.httpr   r   django.db.modelsr   r   r   r   django.db.models.functionsr   numpyrequestsr   r  django.confr   
serp.utilsr   r   r   r   r   r   	tracebackdjango.core.paginatorr   API_KEYURLrd   r   r   r   r   r   r	  r  r  r/  r6  r8  rD  r   re   rc   <module>rV     s:   # B / , F F " #  2 = = +    	    J  J   +
+ 
6(+P +P\ 
6(R7 R7j 
6(7 7^ 
6(O7 O7d 
6(S7 S7l 
6(7 7. 
6(&7 &7R 
6(7 7& 
6(7 72 
5'XK 4[ ! 4[n 
5'XK b ! b 
5'XK b ! b 
5'XK 4[ ! 4[L 
5'XK  ! re   