a
     ld                     @   s   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
mZ d dlmZ d dlmZ d dlZd d	lmZ d d
lmZmZ d dlmZmZ e	eZG dd dZdS )    N)parser)parse_qsurlparse)SoftTimeLimitExceeded)get_task_logger)settings)Subquery)timezone)Review)ReviewSourcePlatform)WidgetReivewsWidgetc                   @   s"   e Zd Zdd ZedddZdS )FacebookCrawlerc              
   C   sr  z:t j|d}|d}d }|d D ]}|d |kr&|d }q&|d ur4t j|d}|j|dd}|d }	|d	 }
|d
 d }g }|D ]}d| v rd |d d t|d dt|d pd |d dkrdndd}n>d dt|d dt|d pd |d dkrdndd}|| q|	|
|fW S W d S W n0 t	yl } zt
| W Y d }~d S d }~0 0 d S )N)access_tokenz/me/accountsdataidr   z(rating_count,overall_star_rating,ratings)r   fieldsZrating_countZoverall_star_ratingZratingsZreviewernameZcreated_time Zreview_textZrecommendation_typeZpositive      )r   authordateheadlinebodyratingZReviewer)facebookZGraphAPI
get_objectkeysr   parsestrstripappend	Exceptionprint)selfr   page_idgraphZ
pages_dataZpermanent_page_tokenpageZ
page_graphobjecttotal_reviews
avg_ratingZrvsreviewsreviewre r1   H/var/www/html/Ranjet/backend/verify_trusted/crawlers/facebook/crawler.pyget_reviews   sH    




zFacebookCrawler.get_reviewsreview_sourcec              
      s  ||d}|  ||}|d u r4tjj _   d S |\}}}	 fdd|	D }	tjj j	ddj
ttjjddddd	  tjj|	dd
 ztjj j	ttjjdddddjddd}
tjj|
d}|D ]X}tjj j	|j|jdj
t|
d}	z|	d j}|j|d W n   Y n0 |	  qtjjttjj jdjdddddddd}t|}|dk rtjjttjj jdjddddddddd d|  }tjj|djdd n^|dkr*tjjttjj jdjdddddddddd  }tjj|djdd d |du rtjj jd }tjj|j	tjjdjddd}t|}g }|dk rtjjttjj jtjjdjdddddddd d|  }|D ]}|t||d  qtjj|dd
 n
|dkrtjj _tt j !  d!| d"|  | _"tt j !  d# | _#tt j !  d$ | _$d%|  _%   td& W n@ t&y } z&tjj _   t| W Y d }~n
d }~0 0 d S )'N)r   r'   c                    s@   g | ]8}t  |d  |d |d |d |d t |d dqS )r   r   r   r   r   r   )sourcer   r   r   r   r   
date_parseexternal_id)r
   r	   now).0r/   r4   r1   r2   
<listcomp>G   s   z0FacebookCrawler.sync_reviews.<locals>.<listcomp>T)	source_id	lock_edit	review_id)flatF)id__indisplay_order__isnull)ignore_conflicts)r<   r@   rA   r   )r@   )r<   r   r   r   )r8   )
company_id)source_id__in	is_activedisplay_orderz-date_modifyz-date   )pk__in)rE   )rE   rF   )company)widgetZ review__source__platform__statusr.   r   )rC   platform__status)rD   )rJ   r.   z - z : z - set total reviewsz - set avg ratingz(https://www.facebook.com/profile.php?id=done)'r3   r   
SyncStatusFALSEsync_statussaver
   objectsfilterr   excluder   r   values_listdeletebulk_creater   r   listr8   updaterC   order_bylenr   firstr   StatusACTIVEr#   SYNCEDr%   datetimer9   reviews_countaverage_ratingotherurlr   )r&   r5   r   r'   Zis_addinforesultr+   r,   r-   Zdup_reviews_idsZuncheck_reviewsrowr8   Zactive_reviewsZnum_active_reviewsZnested_qrJ   Zwidget_reviewsZnum_widget_reviewswsZnested_wwr0   r1   r4   r2   sync_reviews?   s    










 





zFacebookCrawler.sync_reviewsN)__name__
__module____qualname__r3   r   ri   r1   r1   r1   r2   r      s   +r   )r_   Zdateutilr   urllib.parser   r   Zbilliard.exceptionsr   Zcelery.utils.logr   django.confr   django.db.modelsr   django.utilsr	   r   verify_trusted.companies.modelsr
   verify_trusted.reviews.modelsr   r   Zverify_trusted.widgets.modelsr   r   rj   loggerr   r1   r1   r1   r2   <module>   s   