
    {h3                         d Z ddl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Z G d d          Z	d Z
edk    r ej         e
                       dS dS )zo
eBay Research Data Getter
Loads saved session and fetches research data using fetch_ebay_research_data method
    N)async_playwrightc                   0    e Zd Zd Zd ZddZdd	Zd
 ZdS )EbayDataGetterc                     d | _         d | _        d | _        d| _        | j         d| _        | j         d| _        | j         d| _        d S )Nz./browser-dataz/cookies.jsonz/session.jsonz/ebay_state.json)browsercontextpageuser_data_dircookies_filesession_filestorage_state_file)selfs    I/mnt/lnkx/var/www/html/shopify-api/resources/py/ebay_research/get_data.py__init__zEbayDataGetter.__init__   sa    	-#1@@@#1@@@%)%7"I"I"I    c                 \   g d}|}|D ]}t          j        ||t           j        t           j        z            }|r<t	          |                                          dk    r|                    d          } n0t          j        |d|t           j        t           j        z            }t          j	        |          }d
                    d |                                D                       }d
                    |                                dd                   }|                                S )	zDRemove HTML wrapper tags from response content to extract clean JSON)z<html><head><link rel="stylesheet" href="resource://content-accessible/plaintext\.css"></head><body><pre>(.*?)</pre></body></html>zE<html[^>]*>.*?<body[^>]*>.*?<pre[^>]*>(.*?)</pre>.*?</body>.*?</html>z<pre[^>]*>(.*?)</pre>z<html[^>]*>|</html>z<head[^>]*>.*?</head>z<body[^>]*>|</body>z<link[^>]*>r       )flags
c                 B    g | ]}|                                 d k    |S )r   )strip).0lines     r   
<listcomp>z5EbayDataGetter.clean_html_wrapper.<locals>.<listcomp>9   s0    $i$i$idVZV`V`VbVbfhVhVhTVhVhVhr   N)researchDOTALL
IGNORECASElengroupsgroupsubhtmlunescapejoin
splitlinesr   )r   contentpatternscleaned_contentpatternmatchs         r   clean_html_wrapperz!EbayDataGetter.clean_html_wrapper   s   
 
 
 " 	h 	hGIg	BM8QRRE hU\\^^,,q00"'++a.. #%&"oRYY[YfMf"g"g"g -88 ))$i$io6P6P6R6R$i$i$ijj))O$>$>$@$@$DEE$$&&&r   Tc                 <	  K   	 t          d           t          d           | j        | j        | j        d}g }|                                D ]\  }}t
          j                            |          r6t
          j                            |          }t          d| d| d           Z|	                    |           t          d| d           t
          j                            | j                  s(t          d	| j                    t          d
           dS |r4t          dd
                    |                      t          d           t          d           t                                                       d{V }|j                            |d           d{V | _        t          d| j                    | j                            | j        dddd           d{V | _        | j                                         d{V | _        t
          j                            | j                  rt          d| j                    	 t)          | j        d          5 }t+          j        |          }	ddd           n# 1 swxY w Y   |	rA| j                            |	           d{V  t          dt1          |	           d           nt          d           n6# t2          $ r)}
t          dt5          |
                      Y d}
~
nd}
~
ww xY wt
          j                            | j                  r	 t)          | j        d          5 }t+          j        |          }ddd           n# 1 swxY w Y   t          d           t          d |                    d!d"                      t          d#|                    d$d"          dd%          d&           t          d'|                    d(d"                      n6# t2          $ r)}
t          d)t5          |
                      Y d}
~
nd}
~
ww xY wt          d*           t          d+           d,S # t2          $ r*}
t          d-t5          |
                      Y d}
~
dS d}
~
ww xY w).z1Start Firefox browser and load saved session datau+   🚀 Starting browser with saved session...2==================================================)zStorage StateCookieszSession Infou   ✅ z	: Found (z bytes)u   ❌ z: Not foundu-   
❌ Critical: Storage state file not found: z.Please run login.py first to create a session.Fu!   
⚠️  Warning: Missing files: z, z)Continuing with available session data...u2   
🌐 Starting Firefox with session restoration...Nd   )headlessslow_mou!   📁 Loading storage state from: ip  i  )widthheightzFMozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0)storage_stateviewport
user_agentu&   🍪 Loading additional cookies from: ru
   ✅ Added z additional cookiesu   ⚠️  Cookies file is emptyu   ⚠️  Error loading cookies: u   📊 Session metadata loaded:z   - Timestamp: 	timestampUnknownz   - User Agent: r8   2   ...z   - Last URL: urlu(   ⚠️  Error reading session metadata: u-   
✅ Browser started with saved session data!uD   🔐 Session should include: cookies, local storage, session storageTu)   ❌ Error starting browser with session: )printr   r   r   itemsospathexistsgetsizeappendr&   r   startfirefoxlaunchr   new_contextr   new_pager	   openjsonloadadd_cookiesr    	Exceptionstrget)r   r2   session_filesmissing_filesnamefilepathsize
playwrightfcookiesesession_infos               r   start_browser_with_sessionz)EbayDataGetter.start_browser_with_session>   s     Q	?@@@(OOO "&!8, $ 1 M M"/"5"5"7"7 4 4h7>>(++ 47??844D======>>>>!((...22223333 7>>$"9:: `tG^``aaaFGGGu CU499];S;SUUVVVABBBHIII/117799999999J ",!3!:!:! "; " "      DL Od6MOOPPP!%!9!9"5#'377c ": " "      DL #l3355555555DI w~~d/00 FRt?PRRSSS	Fd/55 /"&)A,,/ / / / / / / / / / / / / / / ?"l66w?????????L3w<<LLLMMMM=>>>  F F FDCFFDDEEEEEEEEF w~~d/00 	OOd/55 4'+y||4 4 4 4 4 4 4 4 4 4 4 4 4 4 4:;;;W\-=-=k9-U-UWWXXXal.>.>|Y.W.WX[Y[X[.\aaabbbPL,<,<UI,N,NPPQQQQ  O O OMSVVMMNNNNNNNNO BCCCXYYY4 	 	 	Fc!ffFFGGG55555	s   DQ' D8Q' K) *J?K) JK) JAK) (Q' )
L3LQ' L(Q' P M;/P ;M??P M?BP Q' 
QP?:Q' ?Q!Q' '
R1RRiphone caseZ   r   r<   c                   K   	 ddl }t          |                                 dz            }||dz  dz  dz  dz  z
  }d|                    dd           d	| d
| d| d| d| d| d}	t          d|            t          d| d| d|            t          d|	            | j                            |	d           d{V }
| j                            d           d{V  	 | j                            d           d{V }|                     |          }t          dt          |           d           t          j        |          }g }|                    dg           D ]H}|                    d          s	 |                    di                               di                               d          }||                    di                               d i                               d!          pd|                    di                               d"i                               d#          rW|                    di                               d"i                               d#g           d                             d$          nd|                    d%i                               d%i                               d#          rW|                    d%i                               d%i                               d#g           d                             d$          nd|                    d&i                               d#          rX|                    d&i                               d#g           d                             d$d'                              d(d'          nd|                    d)i                               d#          rX|                    d)i                               d#g           d                             d$d'                              d(d'          nd|                    d*i                               d#          rC|                    d*i                               d#g           d                             d$          ndd+}|                    |           Jt          |                                           }|                    dd,                              dd,          }d-| d,| d.}| j         d/| }t          |d0d12          5 }t          j        ||d3d45           ddd           n# 1 swxY w Y   t          d6|            t          d7t          |           d8           |||d9S # t          j        $ r}t          d:t%          |                      t          |                                           }|                    dd,                              dd,          }d-| d,| d;}| j         d/| }t          |d0d12          5 }|                    |           ddd           n# 1 swxY w Y   t          d<|            t%          |          |d=cY d}~S d}~ww xY w# t(          $ r*}t          d>t%          |                      Y d}~dS d}~ww xY w)?zJFetch data from eBay research API and save response (copied from login.py)r   Ni     <   zIhttps://www.ebay.com/sh/research/api/search?marketplace=EBAY-US&keywords= +z
&dayRange=z	&endDate=z&startDate=z&categoryId=z&offset=z&limit=z5&tabName=SOLD&tz=Africa%2FCairo&modules=searchResultsu&   🔍 Fetching eBay research data for: u   📊 Parameters: z days, offset: z	, limit: u   🔗 API URL: networkidle)
wait_untili  zdocument.body.textContentu   🧹 Cleaned response length: z charsresultsdsaNotificationlistingimageURLitemIdvaluetitle	textSpanstextavgsalesprice	itemssoldr   ,
totalsalesdatelastsold)ri   rk   rm   price	itemsSoldrs   rt   _ebay_research_z.json/wzutf-8)encoding   F)indentensure_asciiu   ✅ Research data saved to: u   📈 Found and processed  items)processed_itemsraw_data	file_pathu   ❌ JSON parsing failed: z
_error.txtu   💾 Error response saved to: )errorr   u'   ❌ Error fetching eBay research data: )timeintreplacer?   r	   gotowait_for_timeoutevaluater-   r    rL   loadsrQ   rE   r
   rK   dumpJSONDecodeErrorrP   writerO   )r   keywords	day_rangeoffsetlimitcategory_idr   end_timestampstart_timestampapi_urlresponse	page_textcleaned_textdataaritemri   tmpr:   safe_keywordsfilenamerU   rX   rZ   s                           r   fetch_ebay_research_dataz'EbayDataGetter.fetch_ebay_research_data   s.	     Z	KKK		d 233M+y2~/BR/G$/NOO)$,,S#66) ) &) ) )	) )
 -) ) *) ) !) ) ) ) )  E8EEFFFXiXXXXQVXXYYY,7,,--- "Y^^G^NNNNNNNNH),,T2222222227@"&)"4"45P"Q"QQQQQQQ	  $66yAAPs<7H7HPPPQQQ z,//  HHY33 # #D88$566  HHY3377DDHHOOE!&"&((9b"9"9"="=h"K"K"O"OPW"X"X"`\`quqyqy  {D  FH  rI  rI  rM  rM  NU  WY  rZ  rZ  r^  r^  _j  rk  rk  "u)R!8!8!<!<Wb!I!I!M!Mk[]!^!^_`!a!e!efl!m!m!m  qu @D  @H  @H  IX  Z\  @]  @]  @a  @a  bq  su  @v  @v  @z  @z  {F  @G  @G  "Q/2!>!>!B!B?TV!W!W![![\gik!l!lmn!o!s!stz!{!{!{  MQ{  |D  |D  EP  RT  |U  |U  |Y  |Y  Ze  |f  |f  &pTXXk2%>%>%B%B;PR%S%STU%V%Z%Z[ace%f%f%n%nortv%w%w%w  lp ~B  ~F  ~F  GS  UW  ~X  ~X  ~\  ~\  ]h  ~i  ~i  'sdhh|R&@&@&D&D[RT&U&UVW&X&\&\]ceg&h&h&p&pqtvx&y&y&y  oslpltlt  vD  FH  mI  mI  mM  mM  NY  mZ  mZ  )d(D(D(H(HVX(Y(YZ[(\(`(`ag(h(h(h  `d C IIcNNNN  		,,	 ( 0 0c : : B B3 L LLMLLILLL"0==8== (C'::: CaIb!AEBBBBC C C C C C C C C C C C C C C ?X??@@@A#b''AAABBB+-4hWWW' @ @ @:#a&&::;;;		,,	 ( 0 0c : : B B3 L LQMQQIQQQ"0==8==(C'::: *aGGL)))* * * * * * * * * * * * * * * AxAABBB!$Qh????????@  	 	 	DCFFDDEEE44444	s   C#Z (P=V %U
>V 
UV U:V ZBZ-YZY	ZY	&Z=Z>Z ZZ 
Z?Z::Z?c                 |  K   	 | j         r| j                                          d{V  | j        r| j                                         d{V  | j        r| j                                         d{V  t	          d           dS # t
          $ r*}t	          dt          |                      Y d}~dS d}~ww xY w)zClose the browser and cleanupNu    🔒 Browser closed successfullyu.   ⚠️ Warning: Error during browser cleanup: )r	   closer   r   r?   rO   rP   )r   rZ   s     r   close_browserzEbayDataGetter.close_browser   s     		My (ioo'''''''''| +l((*********| +l((*********455555 	M 	M 	MK3q66KKLLLLLLLLL	Ms   BB 
B;B66B;N)T)r]   r^   r   r<   r   )__name__
__module____qualname__r   r-   r\   r   r    r   r   r   r      s|        J J J#' #' #'JS S S Sj\ \ \ \|M M M M Mr   r   c            
      `  K   t                      } 	 t          d           t          d           |                     d           d{V s	 |                                  d{V  dS t          d           |                     ddd	d
           d{V }|rd|v rt          dt          |d                    d           t          d|d                     |d         rt          d           t          |d         dd         d          D ]t\  }}t          d| d|                    dd          dd
          d           t          d|                    dd           d|                    dd                      unt          d           t          d           t          j	        d            d{V  n6# t          $ r)}t          d!t          |                      Y d}~nd}~ww xY w|                                  d{V  dS # |                                  d{V  w xY w)"z=Main function to fetch eBay research data using saved sessionu   🎯 eBay Research Data Getterr/   F)r2   Nu-   
🔬 Fetching eBay research data directly...r]   r^   r   r<   )r   r   r   r   r   u   
🎉 Success! Fetched r   u   📁 Data saved to: r   u   
📋 Sample items:   r   z  z. rm   zNo titler=   z     Price: ru   zN/Az, Items Sold: rv   u!   ❌ Failed to fetch research datau+   
⏳ Keeping browser open for 10 seconds...
   u   ❌ Error: )r   r?   r\   r   r   r    	enumeraterQ   asynciosleeprO   rP   )getterresultir   rZ   s        r   mainr      s     F%%.///h 666FFFFFFFF 	> ""$$$$$$$$$$$9 	>???66"	 7 
 
 
 
 
 
 
 
  	7'611SS8I1J-K-KSSSTTT>)<>>??? '( q,---(0A)B2A2)FJJ q qGAtKqKKDHHWj$A$A#2#$FKKKLLLo'5)A)AooQUQYQYZeglQmQmoopppp5666 	<===mB & & &$CFF$$%%%%%%%%& ""$$$$$$$$$$$f""$$$$$$$$$$s6   :F? )EF? >H ?
G2	G-(H -G22H H-__main__)__doc__r   playwright.async_apir   rA   rL   configparserr   r$   r   r   r   runr   r   r   <module>r      s      1 1 1 1 1 1 				      				 mM mM mM mM mM mM mM mM`)% )% )%X zGK r   