o
    jhWO                     @   s.  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z
ee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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mZ d dl#m$Z$ edd Z%d dl&m'Z' edd Z(edd Z)dd Z*dS )    )shared_taskN)MadeInChinaScraper)crawl_products_new)h_to_x)async_to_sync)datetime)settings)File)get_channel_layer   )ProductScrapeTask)ProductScrapeTaskSerializer)timezone)extract_product_infoc              
   C   sN  t  }d| }	zCtd| d| d t jd d d }
t jd d d }td td	 tj	
tjd
}tj|dd tj	
||}tj	
||
}t| |
|| t|
|||||d t|dddf}tt|}t|dkrtd tjj|d }d| d}|rd|_||_t |_|  t | t | d|t!|j"d}t#|j$|	d||d dddW  d    W S W d    n1 sw   Y  td| d|  t|d'}tjj%|d}|j&|t'| d|_d|_t |_|  W d    n	1 sw   Y  t | t | td | d! d"}d|t!|j"d}t#|j$|	d||d dd#t(|j)d$W S  t*y } zMtj+d%| d&t(| dd' tjj|d }|d urd(|_t |_|  d)}d*|t!|j"d}t#|j$|	d||d d+t(|dW  Y d }~S d }~ww ),Nuser_zStarted scraping:  (Task ID: )   z.json.csv   zStarting async crawl...output_filesTexist_ok)	html_filecsv_filenamenum_productsscrape_task_iduser_idskip_in_pagerutf-8)encodingr   z"CSV is empty. No products matched.idz
                "Your search 'z' did not match any products. You may consider to:
                        - Check the spelling  
                        - Use fewer keywords  
                        - Use different keywords
                	COMPLETEDscrapper_completeeventmessagepayloadtyper(   data3No Products found with the given search parameters.successr(   zSaving files: HTML=z, CSV=rbzScrapping completed sucessfullyz!Files removed after saving. Task z
 complete.zTask Completed Successfully !Products Scrapped Successfullyr/   r(   r   zError in scraping task : exc_infoFAILEDScraping Failed!...scrapper_failedF),r
   loggerinfouuiduuid4hextimesleepospathjoinr   
MEDIA_ROOTmakedirsr   r   openlistcsvreaderlenwarningr   objectsfilterfirststatusr(   r   nowcompleted_atsaveremover   r,   r   
group_sendgetresult_filer	   strr#   	Exceptionerror)	final_urlsearch_namer   r   	num_pages
start_pager   r   channel_layer
group_namehtml_filenamer   
output_dircsv_file_pathhtml_file_pathfrH   scrape_taskr(   r,   e rf   $/var/www/Befach/backend/bot/tasks.pyrun_alibaba_scraper   s   






	$


	


rh   )save_images_to_uploadthingc           ,      C   s  t  }d| }ztd|  d| d t jd d d }tjt	j
d}	tj|	dd	 tj|	|}
t }t|j| d
|||d}|std tjj|d }d|  d}|rnd|_||_t |_|  d|t|jd}t|j|d||d dddW S g d}g }g }|d | D ]}zt jd d }|dg }| ||d |dd}|dd}|dd}|dd}|dd}|dd}|d d}|d!d}|d"d}|d#d}|d$i } |d d}!|d%d&}"|d'd(}#|d)i }$|d*i }%|d+i }&|d,g }'|d-i }(| ||||d|||||||t!j"|$d.d/t!j"|%d.d/t!j"|&d.d/t!j"|'d.d/t!j"|(d.d/|!|"|#g W q t#ys }) zt$d0t%|)  W Y d })~)qd })~)ww t&|
d1d(d2d3}*t'(|*}+|+)| |+*| W d    n	1 sw   Y  t&|
d4'}*tjj|d}|j+|t,|* d|_d5|_t |_|  W d    n	1 sw   Y  t	j-. d6v rt/0||| t1|
 d7}d|t|jd}t|j|d||d dd8t%|j2d9W S  t#y_ }) zMtj$d:| d;t%|) dd< tjj|d }|d urNd=|_t |_|  d>}d?|t|jd}t|j|d||d d.t%|)dW  Y d })~)S d })~)ww )@Nr   Started scraping MadeInChina: r   r   r   r   r   Tr   r   r\   r   r   filters No products found on MadeInChinar"   
            Your search '' or filters did not match any products on MadeInChina. You may consider to:
                    - Check the spelling  
                    - Use fewer keywords
                    - Use different keywords
            r$   r%   r&   r*   r-   r.   )IDSKUURLTitle	Image URLDescriptionPriceMOQCompanyRatingTypeCategory
AttributesFeaturesSample InfozRange PriceVariantsz
Brand NameUnitMXQimages
image_urls
product_idskuN/Alinknamedescriptionpricemoqcompanyry   r+   
categoriesvariantunitpiecemxq 
properties
basic_infor~   zprice rangesvariantsF)ensure_asciiError processing product: wr    newliner!   r0    Scrapping completed successfully)yestrue1Task Completed Successfully!r1   r2   #Error in MadeInChina scraping task r3   r4   r6   r7   r8   )3r
   r9   r:   r;   r<   r=   r@   rA   rB   r   rC   rD   r   asynciorunscrape_made_in_chinarJ   r   rK   rL   rM   rN   r(   r   rO   rP   rQ   r   r,   r   rS   rT   appendjsondumpsrW   rX   rV   rE   rG   writerwriterow	writerowsrU   r	   SCRAPE_IMAGElowerri   delayrR   r#   ),rZ   r   r   r   r   rl   r]   r^   r   r`   ra   scraperproductsrd   r(   r,   csv_headerscsv_dataimages_tasksproductr   r   r   urltitler   r   r   r   rating	prod_typecategoryr   brandr   r   
attributesfeaturessample_infoprice_rangesr   re   rc   r   rf   rf   rg   run_made_in_china_scraper   s.  


	




	
	

	r   c                 C   s  t  }d| }ztd|  d| d t jd d d }tjt	j
d}	tj|	dd	 tj|	|}
t }t|j| d
|||d}|std tjj|d }d|  d}|rnd|_||_t |_|  d|t|jd}t|j|d||d dddW S g d}g }g }|d | D ]}zgt jd d }|dg }| ||d |di }g }|r|!dd |" D  |dr| |d  |rd|nd}| ||dd|d d|d|d!d|d"d|d#dddg
 W q t#y } zt$d$t%|  W Y d }~qd }~ww t&|
d%d&d'd(}t'(|}|)| |*| W d    n	1 sAw   Y  t&|
d)'}tjj|d}|j+|t,| d|_d*|_t |_|  W d    n	1 svw   Y  t-.||| t/|
 d+}d|t|jd}t|j|d||d dd,t%|j0d-W S  t#y } zMtj$d.| d/t%| dd0 tjj|d }|d urd1|_t |_|  d2}d3|t|jd}t|j|d||d d4t%|dW  Y d }~S d }~ww )5Nr   rj   r   r   r   r   r   Tr   r   rk   rm   r"   rn   ro   r$   r%   r&   r*   r-   r.   )rp   rs   rr   ru   rt   zUploadThings URLrv   rw   rx   zSupplier Infory   r   r   r   c                 S   s   g | ]\}}| d | qS )r3   rf   ).0kvrf   rf   rg   
<listcomp>  s    z%run_1688_scrapper.<locals>.<listcomp>r   
r   r   r   r   r   r   r   r   r   r    r   r0   r   r   r1   r2   r   r3   r4   r6   r7   r8   F)1r
   r9   r:   r;   r<   r=   r@   rA   rB   r   rC   rD   r   r   r   r   rJ   r   rK   rL   rM   rN   r(   r   rO   rP   rQ   r   r,   r   rS   rT   r   extenditemsrW   rX   rV   rE   rG   r   r   r   rU   r	   ri   r   rR   r#   )rZ   r   r   r   r   rl   r]   r^   r   r`   ra   r   r   rd   r(   r,   r   r   r   r   r   r   r   description_partsr   re   rc   r   rf   rf   rg   run_1688_scrapper[  s   


	










	
	

	r   c                 C   s   t | | d S )N)ri   r   )task_idr   rf   rf   rg   scrape_images  s   r   )+celeryr   r;   r@   r   r>   loggingrG   r   pandaspd	getLogger__name__r9   bot.china.made_in_chinar   bot.utils.scraper_utilsr   !bot.alibaba.products_page_scraperr   asgiref.syncr   r   django.confr   django.core.filesr	   channels.layersr
   modelsr   serializersr   django.utilsr   bot.utils.scrape_detailsr   rh   bot.utils.scrape_imageri   r   r   r   rf   rf   rf   rg   <module>   s@    

t
 I
 0