
    hj                     n    d dl Z d dlZd dlZd dlZd dlZd dlmZ dZdZ	dZ
dZdZ G d d	      Z e       Zy)
    N)sync_playwrighti  .z./snapchat_sessionzdecrypted_messages.jsonTc                   $    e Zd Zd Zd Zd Zd Zy)ScraperServicec                 &    g g d| _         d| _        y )N)	chat_listmessagesF)latest_datarunningselfs    /root/rvsnapchat/backend.py__init__zScraperService.__init__   s    )+<    c                     | j                   S )N)r
   r   s    r   get_latest_datazScraperService.get_latest_data   s    r   c                     | j                   sHd| _         t        j                  | j                  d      | _        | j                  j                          y y )NT)targetdaemon)r   	threadingThread_run_scraper_loopthreadstartr   s    r   r   zScraperService.start   s@    ||DL#**$2H2HQUVDKKK r   c                 6   t        dt         d       t               5 }|j                  j	                  t        dg      }dd l}d}|j                  j                  |      r|j                  |ddd	d
      }n%t        d| d       |j                  ddd	d
      }|j                         }t        d       |j                  d       t        d       | j                  rd}	 |j                  |      }|J|| j                  k7  r;|| _        t        t        dd      5 }	t!        j"                  ||	dd       d d d        t'        j(                  d       | j                  rd d d        y # 1 sw Y   4xY w# t$        $ r
}
Y d }
~
Ed }
~
ww xY w# 1 sw Y   y xY w)Nu6   [*] Démarrage du scraper en arrière-plan (Headless: z)...z---disable-blink-features=AutomationControlled)headlessargsr   zsnapchat_state.jsoni   i  )widthheightzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36)storage_stateviewport
user_agentz[!] Fichier z8 introuvable ! Lancez 'python3 export_login.py' d'abord.)r!   r"   z#[*] Navigation vers Snapchat Web...zhttps://web.snapchat.com/z-[*] Scraper actif. En attente des messages...uH
  
                () => {
                    let chat_list = [];
                    let messages = [];
                    
                    let all_items = document.querySelectorAll('li, div[dir="ltr"]');
                    all_items.forEach(item => {
                        let text = item.innerText.trim();
                        let lines = text.split('\n');
                        
                        let media = [];
                        item.querySelectorAll('img, video, audio').forEach(el => {
                            if(el.src && !el.src.includes('avatar') && !el.src.includes('bitmoji')) {
                                media.push(el.src);
                            }
                        });
                        
                        let avatar = "";
                        let img = item.querySelector('img');
                        if(img && (img.src.includes('avatar') || img.src.includes('bitmoji') || img.src.includes('cf-st.sc-cdn.net') || img.src.includes('snapchat.com'))) {
                            avatar = img.src;
                        }
                        
                        if(text.length > 0 || media.length > 0) {
                            let isMessage = false;
                            if (lines.length >= 2 && lines[1].match(/^\d{2}:\d{2}$/)) {
                                isMessage = true;
                            } else if (lines[0] === 'MOI' || lines[0] === 'ME') {
                                isMessage = true;
                            } else if (lines.length === 1 && lines[0].match(/^[0-9]+ [A-ZÛ]+$/)) {
                                isMessage = true;
                            } else if (lines.length === 1 && !lines[0].includes('•') && !lines[0].toLowerCase().includes('nouveau') && !lines[0].toLowerCase().includes('ouvert') && !lines[0].toLowerCase().includes('envoyé')) {
                                isMessage = true;
                            }
                            
                            if (isMessage) {
                                messages.push({ text: text, media: media });
                            } else {
                                chat_list.push({ text: text, avatar: avatar });
                            }
                        }
                    });
                    
                    return {
                        chat_list: Array.from(new Set(chat_list.map(JSON.stringify))).map(JSON.parse),
                        messages: Array.from(new Set(messages.map(JSON.stringify))).map(JSON.parse)
                    };
                }
                wzutf-8)encoding   F)indentensure_ascii   )printIS_HEADLESSr   chromiumlaunchospathexistsnew_contextnew_pagegotor   evaluater
   openMESSAGES_FILEjsondump	Exceptiontimesleep)r   pbrowserr-   
state_filecontextpagejs_code	extractedfes              r   r   z ScraperService._run_scraper_loop   s   F{mSWXY X	!jj''$EF ( G
 .Jww~~j)!--",'+s;  Q .  ZL0hij!--'+s;  Q . 
 ##%D78II12AB,,0b $g 6I ,$(8(88/8D,!%mS7!K Vq $		)Qqu UV
 

1y ,,9X	 X	fV V  kX	 X	sH   CF%;E9 E-:E9!F-E6	2E99	FFFFFN)__name__
__module____qualname__r   r   r   r    r   r   r   r      s      Zr   r   )r   http.serverhttpsocketserverr6   r9   playwright.sync_apir   PORT	DIRECTORYSESSION_DIRr5   r*   r   scraper_servicerG   r   r   <module>rP      sG         /	")h hT !"r   