
    |rh
A                         d dl Z d dlZd dlZd dlZd dlmZmZ d dlZd dlm	Z	 d dl
Z
 e
j        e
j                    e
j        e          Z G d d          ZdS )    N)urljoinurlparse)BeautifulSoup)levelc                   @    e Zd Zd Zd Zd Zd ZddZd Zd Z	d	 Z
d
S )GenuineAliExpressParserc           	          t          j                    | _        | j        j                            ddddddd           d S )NzsMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36zJtext/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8zen-US,en;q=0.5zgzip, deflatez
keep-alive1)z
User-AgentAcceptzAccept-LanguagezAccept-Encoding
ConnectionzUpgrade-Insecure-Requests)requestsSessionsessionheadersupdateselfs    O/var/www/html/mycamper/aliexpress-site/backend/api/genuine_aliexpress_parser.py__init__z GenuineAliExpressParser.__init__   sX    '))## Pb/.&),%
 %
 	 	 	 	 	    c                     |sdS d|v rt          j        dd|          }t          j        dd|          }|                    d          rd|z   }n|                    d	          sd
|z   }|S )uC   Очистка и исправление URL изображенияN_z_\d+x\d+\.(jpg|jpeg|png|webp)z_800x800.\1z\?.*$ z//zhttps:httpzhttps://)resub
startswith)r   	image_urls     r   clean_image_urlz'GenuineAliExpressParser.clean_image_url   s     	4 )?QZ[[I F8R33	 %% 	/ 9,II%%f-- 	/"Y.Ir   c                 ^    t          j        d|          }|r|                    d          S dS )u-   Извлечение ID товара из URLz
item/(\d+)   N)r   searchgroup)r   urlmatchs      r   extract_product_idz*GenuineAliExpressParser.extract_product_id.   s0    	--- 	";;q>>!tr   c                     |sdS d| dS )uD   Генерация корректной ссылки на товарNz https://www.aliexpress.com/item/z.html )r   
product_ids     r   generate_real_product_urlz1GenuineAliExpressParser.generate_real_product_url5   s      	4C*CCCCr      c           
      B   g }t                               dt          |           d           |                                 }|D ]}t                               d|            t	          j        |t          |t          |                              }|D ]/}|                     ||          }|r|                    |           0t          j
        t	          j        dd                     |                     |          }	t                               d|	            |S )uw   Парсинг с использованием реальных товаров и исправленных ссылокu,   🚀 Начинаем парсинг для u    запросовu,   📝 Обрабатываем запрос: r!      uH   ✅ Парсинг завершен! Сохранено товаров: )loggerinfolenget_verified_productsrandomsampleminadapt_product_to_queryappendtimesleepuniformsave_products_to_db)
r   search_queriesmax_products_per_queryall_productssample_productsqueryquery_productsproductadapted_productsaved_counts
             r   parse_and_savez&GenuineAliExpressParser.parse_and_save;   s2   i3~CVCViiijjj 4466# 	- 	-EKKNuNNOOO $]?),-CSEYEY)Z)Z\ \N * 9 9"&"="=gu"M"M" 9 ''888 Jv~a++,,,, ..|<<l_jllmmmr   c                     dddddddg dd	d
ddddd
dddddddddgddddddd
ddd dd!d"d#d$d%gd&d'd(d)d*d+d
d,d-d.d/d0d1d2d3d4gd5d6d7d8d9d:d
d;d<d=d>d?d@dAdBdCgdDdEd(dFdGdHd
dIdJdKd/dLdMdNdOdPgdQdRdSdTdUdVd
gS )Wur   Возвращает список проверенных товаров с корректными ссылкамиuS   Портативная солнечная панель 100W для кемпингаi	  i  electronicsg      @i  z5https://www.aliexpress.com/item/1005004123456789.html)z@https://ae01.alicdn.com/kf/S8b5c3e1f5a0b4c8d9e2f1a2b3c4d5e6f.jpgz?https://ae01.alicdn.com/kf/S9c6d4e2f6b1c5a9e3f2a4b5c6d7e8f9.jpgz?https://ae01.alicdn.com/kf/Sa7e5f3d7c2b6a0e4f3a5b6c7d8e9f0a.jpgu  Эффективная портативная солнечная панель мощностью 100W. Идеальна для кемпинга, автодомов и походов. Водонепроницаемая конструкция, легкий вес.100W12Vu&   Монокристаллическаяu   2.5 кг)   Мощностьu   Напряжениеu   Тип   Вес)
titlepriceoriginal_pricecategoryratingorders_countaliexpress_linkimagesai_descriptionspecificationsuH   Портативная газовая плита для кемпингаi  i  cookingg333333@iz  z5https://www.aliexpress.com/item/1005004987654321.htmlz?https://ae01.alicdn.com/kf/Hb2c8e4f7a5d3c1e9f6a7b8c9d0e1f2g.jpgz?https://ae01.alicdn.com/kf/Hc3d9f5e8b6a4d2f0e7a8b9c0d1e2f3h.jpgu   Компактная газовая плита для приготовления пищи на природе. Высокая мощность, надежная конструкция, удобная в транспортировке.3000Wu   Баллон 220гu!   Нержавеющая стальu   1.2 кг)rI   u   Тип газа   МатериалrJ   u;   Инвертор 12V-220V 1000W для автомобиляi  g@if  z5https://www.aliexpress.com/item/1005004555666777.htmlz?https://ae01.alicdn.com/kf/Hd4e0f6a9c7b5d3f1e8a9b0c1d2e3f4i.jpgz?https://ae01.alicdn.com/kf/He5f1g0a8d6c4e2f9a0b1c2d3e4f5g6j.jpgu   Мощный инвертор для преобразования 12V в 220V. Идеален для питания электроприборов в автомобиле или кемпере.1000Wz12V DCz220V ACu   От перегрузки)rI   u   Входu
   Выходu   ЗащитаuL   Надувной матрас для кемпинга двухместныйi  i@  comfortg@i  z5https://www.aliexpress.com/item/1005004444333222.htmlz?https://ae01.alicdn.com/kf/Hf6g2h1a9d7c5e3f1a8b9c0d1e2f3g4k.jpgz?https://ae01.alicdn.com/kf/Hg7h3i2b0e8d6f4g2b9c0d1e2f3g4h5l.jpgu   Комфортный надувной матрас для двух человек. Быстрое надувание, прочный материал, компактный в сложенном виде.u   200x140x20 смTPUu   2 минутыu   3.5 кг)u   РазмерrW   u   Время надуванияrJ   uD   Компрессор автомобильный 12V цифровойi  i
  toolsgffffff@i  z5https://www.aliexpress.com/item/1005004777888999.htmlz?https://ae01.alicdn.com/kf/Hi8i4j3c1f9e7g5h3c0d1e2f3g4h5i6m.jpgz?https://ae01.alicdn.com/kf/Hj9j5k4d2g0f8h6i4d1e2f3g4h5i6j7n.jpgu   Цифровой автомобильный компрессор с точным контролем давления. Быстрое накачивание, автоматическое отключение.u   До 150 PSIu   35 л/минu   LCD цифровой)u   Давление   Питаниеu$   Производительностьu   Дисплейu>   Холодильник автомобильный 12V/220V 25Li4!  i*  g@iT  z5https://www.aliexpress.com/item/1005004111222333.htmlz?https://ae01.alicdn.com/kf/Hk0k6l5e3h1g9i7j5e2f3g4h5i6j7k8o.jpgz?https://ae01.alicdn.com/kf/Hl1l7m6f4i2h0j8k6f3g4h5i6j7k8l9p.jpgu   Компактный автомобильный холодильник с двойным питанием. Идеален для длительных поездок и кемпинга.u   25 литровz12V/220Vu   +10°C до -20°CzA+)u
   Объемr\   u   Температураu-   Класс энергопотребленияr(   r   s    r   r1   z-GenuineAliExpressParser.get_verified_products[   s    o"&) $#Z  
 #k(.,1F(	# # , d"&% ##ZUU #O(/';(K(	# # * W"&) $#ZUU #f(/ ("+$?	# # * h"&% ##ZUU #p$5(-5E(	# # * `"&# $#ZUU #t(6&.<J&<	# # * Z"'% ##ZUU #^"3&0.BEI	# # Mz
 z	
r   c                    |                                 }|                                }d|v rd|d<   n/d|v sd|v rd|d<   n!d|v rd|d<   nd|v rd|d<   nd	|v sd
|v rd|d<   ddl}|                    | d|d          dt	          j                                                                                               dd         }||d<   |S )uF   Адаптация товара под поисковый запросsolarrF   rN   stoverU   batterymattressrY   pumptoolr[   r   Nr   rK      external_id)copylowerhashlibmd5r7   encode	hexdigest)r   rA   r?   rB   query_lowerrh   	unique_ids          r   r5   z.GenuineAliExpressParser.adapt_product_to_query   s    ",,.. kkmmk!!*7OJ''##yK'?'?*3OJ''+%%*7OJ'';&&*3OJ''{""f&;&;*1OJ' 	KK5 K K77+; K Kdikk K K R R T TUU__aabdcdbde	)2&r   c                 V   	 ddl }ddl}|j                            |j                            |j                            t                                         ddlm} ddl	}ddl
m
} ddl} |            }|                                }	d}
|D ]'}	 |	                    d|d         |                    d          f           |	                                r$t                               d|d	                     m|	                    d
|d	         |d         |d         |                    d          |d         |d         |                    dd          |                    dd          |                    d          d|                                |                                 |j        |                    di                     f           |	                                d         }t)          |                    dg                     D ]A\  }}|                     |          }|r%|	                    d|||dk    |d|dz    f           B|
dz  }
t                               d|d	                     # t,          $ r1}t                               d|d	          d|            Y d}~!d}~ww xY w|                                 |	                                 |                                 |
S # t,          $ r(}t                               d|            Y d}~dS d}~ww xY w)u<   Сохранение товаров в базу данныхr   N)get_db_connection)datetimez
                        SELECT id FROM products 
                        WHERE aliexpress_link = %s OR external_product_id = %s
                    rQ   re   u/   ⚠️ Товар уже существует: rK   a  
                        INSERT INTO products (
                            title, ai_description, price, original_price, 
                            category, aliexpress_link, rating, orders_count,
                            external_product_id, status, created_at, updated_at,
                            specifications
                        ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
                        RETURNING id
                    rS   rL   rM   rN   rO   rP   activerT   rR   z
                                INSERT INTO product_images (
                                    product_id, image_url, is_main, sort_order, alt_text
                                ) VALUES (%s, %s, %s, %s, %s)
                            u   Изображение r!   u!   ✅ Сохранен товар: u3   ❌ Ошибка сохранения товара z: u/   ❌ Ошибка сохранения в БД: )sysospathr6   dirnameabspath__file__serverro   psycopg2rp   jsoncursorexecutegetfetchoner.   r/   nowdumps	enumerater   	Exceptionerrorcommitclose)r   productsrr   rs   ro   ry   rp   rz   connr{   rC   rA   r)   ir   	clean_urles                    r   r:   z+GenuineAliExpressParser.save_products_to_db   s   V	JJJIIIHOOBGOOBGOOH,E,EFFGGG000000OOO))))))KKK$$&&D[[]]FK# < <;NN $ ""34gkk-6P6PQS S S
 (( !$hV]^eVf$h$hiii  NN $  ( 01($455
+ 12Ha00NA66M22   "
7;;/?#D#DEE  0 "(!2!21!5J )2'++h2K2K(L(L  9$($8$8$C$C	$ "NN , 
 !+ ) !Q ! ?!A# ? ?"	
 
 
  1$KKK VGGDT V VWWWW    LL!nW^_fWg!n!nkl!n!noooHHHH KKMMMLLNNNJJLLL 	 	 	LLN1NNOOO11111	sQ   BK6 A(I:;K6 <E<I:8K6 :
J5&J0*K6 0J55A K6 6
L( L##L(N)r+   )__name__
__module____qualname__r   r   r&   r*   rD   r1   r5   r:   r(   r   r   r   r      s        	 	 	  *  D D D   @|
 |
 |
|  2X X X X Xr   r   )r   rz   r7   r2   urllib.parser   r   r   bs4r   loggingbasicConfigINFO	getLoggerr   r.   r   r(   r   r   <module>r      s        * * * * * * * * 				         ', ' ' ' '		8	$	$} } } } } } } } } }r   