
    |>Th                     
   d dl mZmZ d dlmZ d dl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mZmZ d dlmZ d d	lmZ d dlZd dlZd
ZdZdZdZd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Competitors)JsonResponseN)settings)ThreadPoolExecutoras_completed)datetime)date67d1a58f740bc0b8bfd018acz#https://api.scrapingdog.com/google/   
   c                 B   t         j                  j                  t        j                  |      }t        j
                  t         j                  j                  |      d       t        |dd      5 }t        j                  | |d       d d d        |S # 1 sw Y   |S xY w)NT)exist_okwzutf-8)encoding   )indent)
ospathjoinr
   
MEDIA_ROOTmakedirsdirnameopenjsondump)datafilename	file_path	json_files       ./var/www/html/api/serp/keyword_rank_tracker.pysave_json_filer&      sy    X00(;I KK	*T: 
iw	/ -9		$	!,- - s   1BBc                     	 	 t        | t              rt        |       dk  ryt        | d       }|dd  }|d   d   }|d   d   }||k  ry	||kD  ry
y# t        $ r}t        t        |             Y d }~yd }~ww xY w)N   NAc                     | d   | d   | d   fS Nyearmonthr    )xs    r%   <lambda>z'get_latest_rank_trend.<locals>.<lambda>1   s    QvY'
TUV\T]<^     )key   rankr   updownsame)
isinstancelistlensorted	Exceptionprintstr)rank_historysorted_history
latest_twocurrentpreviouses         r%   get_latest_rank_trendrF   &   s    	
 ,-\1BQ1F  2^_ $BC(
Q-'a=(Xx c!fs"   A (A A 	A9A44A9c                 l    i }| D ]  }|d   |d   |d   f}|||<    t        |j                               S r+   )r:   values)r@   uniqueentryr2   s       r%   remove_duplicate_ranks_by_daterK   D   sJ    F V}eGneFm<s   r1   c                    	 | j                   dk7  ry d| _         | j                          t        d| j                          t	        j
                  d       d| _         | j                          t        d| j                          y # t        $ r<}t        d| j                   d|        d	| _         | j                          Y d }~y d }~ww xY w)
NINITSCHDzProcessing keyword: r4   COMPzCompleted keyword: zFailed to process keyword z: FAIL)track_statussaver>   keywordtimesleepr=   )rS   rE   s     r%   process_keywordrV   l   s    6)%$W__$567

1%#GOO#456 *7??*;2aSAB%s   B A3B 	C2CCc                     t        d       	 	 t        t        j                  j	                  d      d t
               } | st        d       nR| D ]"  }t        |       t        j                  d       $ ~ t        j                          t        j                  d       	 t        d       y # t        $ r}t        d|        Y d }~(d }~ww xY w)Nz0Background thread started for keyword processingrM   )rQ   z0No more INIT keywords. Background thread ending.r(   z Exception in background thread: z2Background thread finished processing all keywords)r>   r:   r   objectsfilter
BATCH_SIZErV   rT   rU   gccollectr=   )keywordsrS   rE   s      r%   background_keyword_processorr^      s    	
<=6GOO222GTUHHI# (

1 JJLJJqM   

>?  604556s   BB+ +	C4CCGETc                     t        j                  t              }d|_        |j	                          t        ddd      S )N)targetTstartedz0Keyword processing started in background thread.)statusmessage)	threadingThreadr^   daemonstartr	   )request
sort_orderthreads      r%   keywordRankerrl      s6     %ABFFM
LLN99klmmr1   )z	data.json)"rest_framework.decoratorsr   r   rest_framework.permissionsr   serp.modelsr   r   r   django.httpr	   requestsre   r   r   django.confr
   concurrent.futuresr   r   r   r   rT   r[   API_KEYURLKEYWORD_THREAD_LIMITrZ   r&   rF   rK   rV   r^   rl   r.   r1   r%   <module>rw      s    B / 4 4 $    	   ?    	
$+  
<!P*@( 
5'XK n ! nr1   