o
    Bi                     @  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m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 d dlmZ G d	d
 d
ZdS )    )annotationsN)Any)BeautifulSoup)settings)TTLCache)AsyncRateLimiter)async_retryc                   @  s   e Zd Zd%ddZd&ddZd&d	d
Zd&ddZd'ddZd(ddZd)ddZ	d*ddZ
eddd+d d!Zeddd,d"d#Zd$S )-FlashscoreParserreturnNonec                 C  s    t tjd| _ttjd| _d S )N)ttl_s)min_delay_s)r   r   PARSER_CACHE_TTL_Scacher   PARSER_MIN_DELAY_Slimiter)self r   =/var/www/www-root/data/www/77.83.87.30/agents/parser_agent.py__init__   s   zFlashscoreParser.__init__urlstrc              
     s   | j  I d H  tjdd}tj|ddid4 I d H @}||4 I d H  }|  | I d H W  d   I d H  W  d   I d H  S 1 I d H sLw   Y  W d   I d H  d S 1 I d H sbw   Y  d S )N#   )totalz
User-AgentzMozilla/5.0)timeoutheaders)r   waitaiohttpClientTimeoutClientSessiongetraise_for_statustext)r   r   r   srr   r   r   _fetch_aiohttp   s   .zFlashscoreParser._fetch_aiohttpc              	     s   | j  I d H  ddlm} | 4 I d H @}|jjtjdI d H }| I d H }|j	|dddI d H  t
dI d H  | I d H }| I d H  |W  d   I d H  S 1 I d H s\w   Y  d S )Nr   )async_playwright)headlessdomcontentloadediȯ  )
wait_untilr   g333333?)r   r   playwright.async_apir&   chromiumlaunchr   PARSER_HEADLESSnew_pagegotoasynciosleepcontentclose)r   r   r&   pbrowserpagehtmlr   r   r   _fetch_playwright   s   0z"FlashscoreParser._fetch_playwrightc                   sP   | j |}|r|S tjr| |I d H }n| |I d H }| j || |S N)r   r    r   PARSER_USE_PLAYWRIGHTr8   r%   set)r   r   cachedr7   r   r   r   
fetch_html$   s   zFlashscoreParser.fetch_htmlr#   c                 C  s   t dd| }|d d S )Nz\s+    )resubstrip)r   r#   r   r   r   _normalize_team/   s   z FlashscoreParser._normalize_teamcompetition_urlhomeawayhrefc                 C  s6   | d| d| d| }t |d d d S )N|zutf-8   )hashlibsha1encode	hexdigest)r   rD   rE   rF   rG   baser   r   r   _make_id3   s   zFlashscoreParser._make_idr7   list[dict[str, Any]]c                 C  s   t |d}g }|jdddD ]H}|jddd}d|vrq|dd\}}| |}| |}|d	 }	|	}
|	d
r=d|	 }
| ||||
}||d||
d d||d d d d qi }|D ]}|||d < q[t|	 S )NlxmlaT)rG   r>   rB   z -    rG   /zhttps://www.flashscore.com
flashscore	scheduled)idsourcerD   	match_url
kickoff_tsstatus	home_team	away_teamminute
home_score
away_scorerX   )
r   find_allget_textsplitrC   
startswithrO   appendlistvalues)r   rD   r7   soupmatchesrR   trE   rF   rG   rZ   miduniqmr   r   r   parse_match_cards7   s>   




z"FlashscoreParser.parse_match_cardsrZ   dict[str, Any]c                 C  s   t |d}|jddd}d }td|}|r$t|dt|df}d }td|}|r5t|d}d	}	d
|v sCd|v sCd|v rFd}	n	|d urMd}	nd}	||	|d}
|r_|\|
d< |
d< |
S )NrQ   r>   TrS   z(\d+)\s*[:\-]\s*(\d+)rT      z(\d{1,3})\s*'unknownFinishedFTzMatch finishedfinishedliverW   )rZ   r\   r_   r`   ra   )r   rc   r@   searchintgroup)r   rZ   r7   ri   r"   scorern   r_   mmr\   outr   r   r   parse_score_from_detail\   s(   
z(FlashscoreParser.parse_score_from_detail   )attemptsc                      |  |I d H }| ||S r9   )r=   ro   )r   rD   r7   r   r   r   fetch_competition_matchesy      z*FlashscoreParser.fetch_competition_matchesc                   r   r9   )r=   r}   )r   rZ   r7   r   r   r   fetch_match_detail_update~   r   z*FlashscoreParser.fetch_match_detail_updateN)r
   r   )r   r   r
   r   )r#   r   r
   r   )
rD   r   rE   r   rF   r   rG   r   r
   r   )rD   r   r7   r   r
   rP   )rZ   r   r7   r   r
   rp   )rD   r   r
   rP   )rZ   r   r
   rp   )__name__
__module____qualname__r   r%   r8   r=   rC   rO   ro   r}   r   r   r   r   r   r   r   r	      s    







%r	   )
__future__r   r0   rJ   timer@   typingr   r   bs4r   configr   utils.cacher   utils.rate_limiterr   utils.retryr   r	   r   r   r   r   <module>   s     