
    hg                        d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlmZ  e j        e          Z	 e j
        d          Z e j                    Ze                    e           e	                    e            G d d          ZdS )    N)datetime)	timedelta)Byz4%(asctime)s - %(name)s - %(levelname)s - %(message)sc                       e Zd Zed             Zed             Zed             Zed             Zed             Zed             Z	ed             Z
ed             Zed	             Zd
S )Scraping_utilitiesc                 \    	 t          j        d|           d         S # t          $ r Y dS w xY w)zexpects string and returns numbers from them as integer type,
        e.g => input = '54454 comment', than output => 54454
        z\d+r   )refindall
IndexError)strings    a/var/www/fb-scrape/myenv/lib/python3.11/site-packages/facebook_page_scraper/scraping_utilities.py__extract_numbersz$Scraping_utilities.__extract_numbers   s@    
	:eV,,Q// 	 	 	11	s    
++c                      fd| D             S )zexpects list and a element, returns all the occurence of element in the list.
        e.g input => li = ['sajid','sajid','sajid','d','s'] with given word = 'sajid',
        output => ['sajid','sajid','sajid'] c                     g | ]}|v |	S  r   ).0	substringwords     r   
<listcomp>z7Scraping_utilities.__exists_in_list.<locals>.<listcomp>"   s#    CCCi1B1B	1B1B1B    r   )lir   s    `r   __exists_in_listz#Scraping_utilities.__exists_in_list   s     
 DCCC2CCCCr   c                     	 t          j        t          |                                                     S # t          $ r8}t
                              d                    |                     Y d }~d S d }~ww xY w)NzError at convert_time : {})dtutcfromtimestampfloat	isoformat	Exceptionlogger	exceptionformat)unix_timestampexs     r   __convert_timez!Scraping_utilities.__convert_time$   s    	F&u^'<'<==GGIII 	F 	F 	F9@@DDEEEEEEEEE	Fs   25 
A7-A22A7c                     t          |           t          urB|                     t          j        d          }d}|D ]}||                    d          z  }|} nd} | S )zcreturns the text content of selenium element, else if content is string than returns a empty stringp textContent)typestrfind_elementsr   TAG_NAMEget_attribute)contentall_para	paragraphparas       r   __extract_contentz$Scraping_utilities.__extract_content+   sp     ==##,,R[#>>HI  $ $T//>>>	#$ Gr   c                 D    t          |                                           S )zexpects a dictionary and returns sum of all values of dictionary.
        e.g =>
        input dictionary = {"s":1,"d":34},
        output=> 35)sumvalues)
dictionarys    r   __count_reactionz#Scraping_utilities.__count_reaction8   s     :$$&&'''r   c                    	 d}d| v r5|                      d          d                              d          d         }nd| v r|                      d          d         }d	| v r|                      d          d         }nd
| v r|                      d          d         }nxd| v r|                      d          d         }nXd| v r5|                      d          d                              d          d         }nd| v r|                      d          d         }|S # t          $ r Y dS t          $ r8}t                              d                    |                     Y d}~dS d}~ww xY w)zLexpects the post's URL as a argument, and extracts out post_id from that URLNAzposts//   ?r   zphotos/z/videos/z/reel/   z/events/zfbid==   &group   z"Error at extract_id_from_link : {}N)splitr   r   r   r    r!   )linkstatusr#   s      r   __extract_id_from_linkz)Scraping_utilities.__extract_id_from_link@   s   	AF4C+11#66q9d""C,T!!C+T!!C+t##C+DC+11#66q9DC+M 	 	 	DD 	A 	A 	A4;;B??A A A A A A A A A	As   DD 
E$#	E$,-EE$c                    	 t          |           } | S #  Y nxY w|                                 } d| v r;t          |           dk    r&t          |                     dd                    dz  S dS d| v r;t          |           dk    r&t          |                     dd                    dz  S dS d| v r&t          |                     dd                    dz  S dS )	Nkr@   r'   i  mi@B i ʚ;r   )r   lowerlenreplace)xs    r   __value_to_floatz#Scraping_utilities.__value_to_float]   s    	aAH	DGGII!881vvzzQYYsB//004774!881vvzzQYYsB//007::7!883++,,z99qs    c                     fd| D             }t          |          dk    rdS t          j        d|d                   }t          |          dk    rd                    |d                   S dS )Nc                     g | ]}|v |	S r   r   )r   r   r   s     r   r   z>Scraping_utilities.__find_reaction_by_text.<locals>.<listcomp>s   s#    HHH)Fi4G4GI4G4G4Gr   r   0z(\d+(?:\.\d+)?)([MmBbKk])?r'   )rL   r	   r
   join)lr   reactions    ` r   __find_reaction_by_textz*Scraping_utilities.__find_reaction_by_textq   sx    HHHHqHHHx==A3:)8A;8 8x==1778A;'''sr   c                 n   d}d|                                  v s,d|                                  v sd|                                  v r[t          j        dd|           }t          j                    t          t          |                    z
  }|                                S d|                                  v s,d	|                                  v sd
|                                  v r[t          j        dd|           }t          j                    t          t          |                    z
  }|                                S d|                                  v r[t          j        dd|           }t          j                    t          t          |                    z
  }|                                S d|                                  v sd|                                  v r[t          j        dd|           }t          j                    t          t          |                    z
  }|                                S |S )NzFailed to fetch!hhrhrsz\Dr'   )hoursrJ   minmins)minutess)secondsdds)days)	rK   r	   subr   todayr   intr   now)t	past_datehours_to_subractminutes_to_subtractseconds_to_subtractdays_to_subtracts         r   __convert_to_isoz#Scraping_utilities.__convert_to_iso|   s   &	!''))tqwwyy00EQWWYY4F4F!vdB22 ((93?O;P;P+Q+Q+QQI&&(((!''))u		11Vqwwyy5H5H"$&r1"5"5 3?R;S;S)T)T)TTI&&(((!''))"$&r1"5"5 3?R;S;S)T)T)TTI&&(((AGGII!2!2!vdB22 ((9#>N:O:O+P+P+PPI&&(((r   N)__name__
__module____qualname__staticmethod$_Scraping_utilities__extract_numbers#_Scraping_utilities__exists_in_list!_Scraping_utilities__convert_time$_Scraping_utilities__extract_content#_Scraping_utilities__count_reaction)_Scraping_utilities__extract_id_from_link#_Scraping_utilities__value_to_float*_Scraping_utilities__find_reaction_by_text#_Scraping_utilities__convert_to_isor   r   r   r   r      s         \ D D \D F F \F 
 
 \
 ( ( \( A A \A8   \&   \   \  r   r   )loggingr	   r   r   r   selenium.webdriver.common.byr   	getLoggerro   r   	Formatterr!   StreamHandlerchsetFormatter
addHandlerr   r   r   r   <module>r      s     				       # # # # # #       + + + + + +		8	$	$		:
< 
<W       "   F F F F F F F F F Fr   