U
    Q'h)_                     @   s  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 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Z)dZ*edgdd Z+edgdd Z,edgdd Z-edgdd Z.edgdd Z/edgdd Z0edgdd Z1edgdd  Z2edgd!d" Z3ed#geefd$d% Z4ed#geefd&d' Z5ed#geefd(d) Z6ed#geefd*d% Z4dS )+    )render)api_viewpermission_classes)AllowAny)Response)RegionKeywordLanguageGroupsCompetitors)Account)datetime)JsonResponseHttpResponse)PrefetchCountQIntegerField)CastN)settings)
safe_roundcapitalized_wordsearch_volume_labelssearch_volume_valuesrank_history_labelsrank_history_values z#https://api.scrapingdog.com/google/POSTc              
   C   s  | j dkr| jd}| jd}|rt|rttj dddd}t	jj
||dd	d
}t	jj
|dd	d
}| }| }|r|d
 d}|d	   d|d   d|d dd  }	nN|r|d
 d}|d	   d|d   d|d dd  }	nd}	| jddkrDtd||	dS | }
ttj dd}tjj
|d }tjj
||dd }|r|d nd }g }d||d|
||||	d	}t|S tdddS )Nr   useridgrpididregion_nameZregion_codeZregion_country
fk_user_idfk_group_idisocodelocationr#   (|r      )r   zus|google.com|United StatestypeZRGOLYtrue)statusrgDRlanguage_name)r#   r    domain_name0)	r.   ZdNZg_lZu_kwZk_lZo_tgZlnger/   r0   falseSomething went wrongr.   message)methoddatagetstrlistr   objectsallvaluesr   filterlastsplitlowerstripreplacer   countr	   r
   first)requestr   r   ZregionsZGrpKeywdInsZKeywdInsZGrplastKeywdZ	lastKeywdZlocation_partsZlastKeywdRegionZkeycountvalue	languagesZgroupcountvalueZ	groupdatar2   ZtaglistZresponse_data rJ   ;/home/richestsoft/Projects/NewRankTracker/api/serp/views.py
getsetting   s6    66rL   c              
      s4  zt d | jdd}| jdd | jdd }| jdd | jdd  | jd	d | jd
d| jdd |r|stddiddW S tjjt|d	 		stddiddW S t
jjd	 stddiddW S tjj	|t dd\}| jdg }t|trdttttj|dd d}|s|tddiddW S tjjd	 }d|rt|j 	f
dd|D }tj| td|jd d!dW S  tk
r. } z&t d"| tdt|id#d W Y S d }~X Y nX d S )$NzFunction calling here... r   r   languager   
group_nameregioncountrynameplatformr%   urlerrorInvalid userid or group name  r.   r    User not found  r1   zInvalid language)r2   Zproject_automation_time)fk_userrN   defaultskeyword
,zNo valid keywords providedr!     c                    s`   g | ]X}t 	|   d   dj dt dg dddt ddqS z (r+   F-r   )r[   fk_groupr]   site_urltargetr&   rO   location_coderM   language_coderQ   r%   exactdomainZlastranked_dateZstatus_from_startrankranknowZrank_sincestartZauto_refresh_countZmodified_dateZdayvalr   rC   rD   rh   r   now.0kw
rP   ZgetLanguagegroupr%   ZlanguageDatarg   rQ   rO   re   userrJ   rK   
<listcomp>r   s0   
zaddProject.<locals>.<listcomp>zKeywords successfully saved)r7   Zgroup_createdgroup_id   Error:   )printr9   r:   rD   r   r   r=   r@   intrG   r	   r
   get_or_creater   rm   
isinstancer;   r<   setmaprE   rC   rB   r   searchvolume_country_idr   bulk_creater    	Exception)rH   r   ZgrpNamecreateddataChecklistregion_datakeywordserJ   rq   rK   
addProjectF   sT     &
	
r   c              
   C   s  z| j dd}|s&tddiddW S tjjt|d }|sRtddid	dW S tt	jj|d

ddddddd}|D ]>}|d }tjj|ddd |d< tjj|dd |d< qztdt|iddW S  tk
r } z&td| tdt|idd W Y S d }~X Y nX d S )Nr   r   rS   rT   rU   rV   rW   rX   rY   r'   r    r#   rN   Zuptrend_cntZdowntrend_cntr2   Zcreated_date
   )rd   Zranknow__gtZranknow__lteZtop10_recordr*   )rd   rk   ZfirstPosition_recordZprojectsrv   rw   rx   )r9   r:   r   r   r=   r@   rz   rG   r<   r
   r?   r   rF   r   ry   r;   )rH   r   rs   ZprojectListZprojectZprj_idr   rJ   rJ   rK   getAllProjects   s     $
r   c           	         s|  z.| j dd}| j dd}| j dd}|r6|sHtddiddW S tjjt|d	 }|sttdd
iddW S i  |rtjjt|d	  ntjjt|d  g }i  rЈ j	rЈ j	}dd |D t
tjj||dddddddddddddddddd d!} fd"d#|D }td$|id%dW S  tk
rv } z&td&| tdt|id'd W Y S d }~X Y nX d S )(Nr   r   r   compidrS   zInvalid userid or group IDrU   rV   rW   rX   rY   r$   c                 S   s   i | ]}|d  |d qS r]   rj   rJ   ro   itemrJ   rJ   rK   
<dictcomp>   s      z"getAllKeywords.<locals>.<dictcomp>r"   r    r#   r$   re   rf   r]   rj   
ranked_urlrk   Zsearch_volumesearch_volume_datasearch_intenttraffickeyword_difficultycpctrack_statusmetric_statusrank_historyc                    s   g | ]}| r |d  dnd|d t|d t|d |d t|d t|d t|d t|d t|d |d	 |d
 dqS )r]   >100r   r   r   r   r   r   r   r   r   )Zmatched_rankr   Zsearch_volume_monthly_labelsZsearch_volume_monthly_valuesZrank_history_daily_labelsZrank_history_daily_valuesr   r   r   r   r   r   )r:   r   r   r   r   r   )ro   Zkw_entrycompetitorDataZrank_mappingrJ   rK   rt      s   






z"getAllKeywords.<locals>.<listcomp>r      rw   rx   )r9   r:   r   r   r=   r@   rz   rG   r   r   r<   r   r?   r   ry   r;   )	rH   r   r   r   rs   Z
rank_arrayZkeywordListZoptimized_keywordListr   rJ   r   rK   getAllKeywords   s4    
<
r   c              
      s  z| j d }| j d }| j d  tjjd | j d }| j dd | j dd  | j d	d | j d
d| j dd |r| j d  }n| j d   }|}tjjt	|d 		st
ddiddW S tjjt	|d st
ddiddW S |r|rjr| j d }t|ts| jd dd  }|d}tttd ttj|}t|dkrttjj|||g|| j d  | j d	 djddd}	g }
t|t|	 }t|}|dkrt
ddddW S tjjd }d|r(t	|j 	f
dd |D }
tj|
 tjjt	|djd!d!d" t
d#dd$t	|d%W S tdd&d'W S tdd(d'W S W nF tk
r } z&td)| t
dt|id*d W Y S d }~X Y nX d S )+Nr   r   rM   rZ   ri   rO   r   rP   rQ   r%   r   rR   rW   rS   rX   rY   rV   Project not foundr]   r^   r_   )keyword__inZsite_url__containsZexactdomain__inr$   rO   rQ   T)flatr4   warningz$Keywords already exists. Check once.)r.   r7   Zerrormsgr`   ra   c                    s`   g | ]X}t 	|   d   dj dt dg dddt ddqS rb   rl   rn   rq   rJ   rK   rt   $  s0   
zaddKeyword.<locals>.<listcomp>INIT)r   r   r-   zKeyword added)r.   ZEngmdr7   ZkwcntzAlready keywords are exitsr6   z*Oops! Sorry You've no active subscription.rw   rx   )r9   rD   r	   r=   r@   rG   r:   rC   r   rz   r   r
   rh   r|   r<   r   rE   rB   r}   r~   r;   lenr   values_listr   r   r   updater   r   ry   )rH   r   r   ri   rR   domainr   ZdataCheckKeywordsZkeywordArrayZexistsKWr   ZnewkeywordsZnewKeyCountr   r   rJ   rq   rK   
addKeyword   sb    




8


r   c           	   
   C   s   z| j d }| j d }| j d }tjjt|d }|sLtddiddW S tjjt|d }|sxtdd	iddW S tjj	|||d
\}}|rt
dddW S t
dddW S W nD tk
r } z&td| tdt|idd W Y S d }~X Y nX d S )Nr   r   rR   rW   rS   r   rY   rV   rX   )r[   rd   rR   r-   zCompetitor created successfullyr6   r4   r5   rw   rx   )r9   r
   r=   r@   rz   rG   r   r   r   r{   r   r   ry   r;   )	rH   r   r   rR   rr   rs   
competitorr   r   rJ   rJ   rK   addCompetitorK  s"    



r   c              
   C   s  zt | jdd}|s*tddiddW S ztjj|d}W n( tjk
rd   tddid	d Y W S X tjj|d
	t
dtj d}g }|D ]2}|j }||j|j|jdd |D d qtd|dW S  tk
r } z&td| tdt|idd W Y S d }~X Y nX d S )Nr   r   rS   User ID is requiredrU   rV   rW   rX   rY   r'   competitors_set)querysetc                 S   s"   g | ]}|j |j|j|jd qS )r    rR   r   r   r   )ro   comprJ   rJ   rK   rt   z  s   z!getCompetitor.<locals>.<listcomp>)ru   rN   r2   competitorsr-   r.   r9   Error:rx   )rz   r9   r:   r   r   r=   DoesNotExistr
   r@   prefetch_relatedr   r   r>   r   appendr    rN   r2   r   r   ry   r;   )rH   r   rs   groupsr9   rr   r   r   rJ   rJ   rK   getCompetitorc  s2    "

r   c              
   C   s   zt | jdd}t | jdd}|s<tddiddW S ztjj|d}W n( tjk
rv   tdd	id
d Y W S X ttjj	t |d
 }td|dW S  tk
r } z&td| tdt|idd W Y S d }~X Y nX d S )Nr   r   r   rS   r   rU   rV   rW   rX   rY   r   r-   r   r   rx   )rz   r9   r:   r   r   r=   r   r<   r   r@   r?   r   r   ry   r;   )rH   r   r   rs   r   r   rJ   rJ   rK   getProjectCompetitors  s    
r   c              
   C   s  z| j d }| j d }| j d }tjjt|d }|sLtddiddW S tjjt|d }|sxtdd	iddW S tjjt|t|d
 }|r|	  t
dddW S t
dddW S W nF tk
r } z&td| tdt|idd W Y S d }~X Y nX d S )Nr   r   r   rW   rS   r   rY   rV   rX   )r    r$   r-   zCompetitor deleted successfullyr6   r4   zCompetitor not foundrw   rx   )r9   r
   r=   r@   rz   rG   r   r   r   deleter   r   ry   r;   )rH   r   r   r   rr   rs   r   r   rJ   rJ   rK   deleteCompetitor  s$    



r   GETc              
   C   s  zt jjdd }|s*tdddW S |j}|j}|j}g }t|dkrZdd |D }g }t	jj|d	j
|d
}t|dkrl|D ]}d| d|j d}	tjtj|	}
zrt|
d}t|}W 5 Q R X |dg D ]@}||ddkr|dd}|d k	r||j|d  qqW q tk
rD   td|	  Y q tjk
rh   td|	  Y qX qt|dkrt jj||dj|dd}nt jj||djdd}|rtdddW S tdddW S W n@ tk
r } z td| tddd W Y S d }~X Y nX d S )Nr   r   r4   No Competitors foundr6   r   c                 S   s   g | ]}|d  qS r]   rJ   r   rJ   rJ   rK   rt     s     +competitorMatchKeywords.<locals>.<listcomp>r   r   	jsonData__.jsonrorganic_resultslinkr   rj   r   r   File not found: Invalid JSON in file: r$   rR   COMPr   r   r-   %Matched keywords updated successfullyUpdate failedr   Competitors Matching Failedr   r=   r@   rG   r   r$   rR   r   r   r   excluder    ospathjoinr   
MEDIA_ROOTopenjsonloadr:   r   r]   FileNotFoundErrorry   JSONDecodeErrorr   r   rH   r   r   rR   Zkeywords_listZcompetitor_keywordsZkeywordsDatar   ZkeywrdfileName	file_pathfr9   entrypositionZupdate_resultr   rJ   rJ   rK   competitorMatchKeywords  sL    
r   c                 C   sH   t j }|D ]*}tjj|jdjdd d|_|  qt	dddS )Nr   r   r   r-   'Daily rank tracker has been rescheduledr6   )
r
   r=   r>   r   r@   r    r   r   saver   rH   r   rr   rJ   rJ   rK   scheduleRankTracking  s    

r   c                 C   sH   t j }|D ]*}tjj|jdjdd d|_|  qt	dddS )Nr   r   )r   r-   r   r6   )
r
   r=   r>   r   r@   r    r   r   r   r   r   rJ   rJ   rK   scheduleMetricsTracking  s    

r   c              
   C   s  zt jjdd }|s*tdddW S |j}|j}|j}g }t|dkrZdd |D }g }t	jj|d	j
|d
}t|dkrl|D ]}d| d|j d}	tjtj|	}
zrt|
d}t|}W 5 Q R X |dg D ]@}||ddkr|dd}|d k	r||j|d  qqW q tk
rD   td|	  Y q tjk
rh   td|	  Y qX qt|dkrt jj||dj|dd}nt jj||djdd}|rtdddW S tdddW S W n@ tk
r } z td| tddd W Y S d }~X Y nX d S )Nr   r   r4   r   r6   r   c                 S   s   g | ]}|d  qS r   rJ   r   rJ   rJ   rK   rt   "  s     r   r   r   r   r   r   r   r   r   r   rj   r   r   r   r   r   r   r   r-   r   r   r   r   r   r   rJ   rJ   rK   r     sL    
)7Zdjango.shortcutsr   Zrest_framework.decoratorsr   r   Zrest_framework.permissionsr   Zrest_framework.responser   Zserp.modelsr   r   r	   r
   r   Zaccount.modelsr   r   django.httpr   r   django.db.modelsr   r   r   r   django.db.models.functionsr   ZnumpyZrequestsr   r   django.confr   Z
serp.utilsr   r   r   r   r   r   ZAPI_KEYURLrL   r   r   r   r   r   r   r   r   r   r   r   rJ   rJ   rJ   rK   <module>   s`    
.
U

;
V

)

7