§
    ‡ÿªj»  ã            
      ó.  — d 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ddl	m	Z	 ddl
mZmZmZmZmZ dZdZej                             ej                             ej                             e¦  «        dddd	d
¦  «        ¦  «        Zg d¢Z G d„ d¦  «        ZdS )uS  AutoPOE2 - Market Price Fetcher (POE2 Scout API Integration).

Truy váº¥n giÃ¡ cáº£ thá»‹ trÆ°á»�ng thá»�i gian thá»±c tá»« POE2 Scout API (api.poe2scout.com),
tÃ­nh toÃ¡n giÃ¡ trá»‹ quy Ä‘á»•i sang Chaos Orb vÃ  lÆ°u cache cá»¥c bá»™.
TuÃ¢n thá»§ Rule 1 (Tier 2 Cold Path), Rule 4 (Kiáº¿n TrÃºc Module HÃ³a), Rule 5 (Dá»¯ Liá»‡u Tháº­t).
é    )ÚannotationsN)Údatetime)ÚAnyÚDictÚListÚOptionalÚTuplezhttps://api.poe2scout.comz7AutoPOE2-MarketSync/1.0 (contact: admin@autopoe2.local)z..Údatazmarket_prices.json)ÚcurrencyÚrunesÚessencesÚ	ultimatumÚritualÚdeliriumÚ	uncutgemsÚ	fragmentsÚ	vaultkeysÚbreachÚabyssÚ	incursionc                  óR   — e Zd ZdZeeefdd„Zdd d„Zd!d„Z		 d"d#d„Z
d$d„Zd%d&d„ZdS )'ÚMarketPriceFetcheruM   Bá»™ thu tháº­p vÃ  phÃ¢n tÃ­ch giÃ¡ thá»‹ trÆ°á»�ng POE2 thá»�i gian thá»±c.Úbase_urlÚstrÚ
user_agentÚ
cache_pathc                óV   — |                      d¦  «        | _        || _        || _        d S )Nú/)Úrstripr   r   r   )Úselfr   r   r   s       úFC:\Projects\AutoPOE2\src\assistant_tool\pickit\market_price_fetcher.pyÚ__init__zMarketPriceFetcher.__init__*   s)   € ð !Ÿš¨Ñ,Ô,ˆŒØ$ˆŒØ$ˆŒˆˆó    ç       @ÚendpointÚtimeoutÚfloatÚreturnr   c                óš  — | j         › |› �}t          j                             |d| j        i¬¦  «        }t          j                             ||¬¦  «        5 }|j        dk    rt          d|j        › d|› �¦  «        ‚t          j	        | 
                    ¦   «                              d¦  «        ¦  «        cddd¦  «         S # 1 swxY w Y   dS )	uA   Gá»­i GET request tá»›i API vÃ  tráº£ vá»� JSON Ä‘Ã£ phÃ¢n tÃ­ch.z
User-Agent)Úheaders©r&   éÈ   zHTTP Error z on úutf-8N)r   ÚurllibÚrequestÚRequestr   ÚurlopenÚstatusÚRuntimeErrorÚjsonÚloadsÚreadÚdecode)r    r%   r&   ÚurlÚreqÚresps         r!   Ú	_http_getzMarketPriceFetcher._http_get4   s  € à”Ð* Ð*Ð*ˆÝŒn×$Ò$ S°<ÀÄÐ2QÐ$ÑRÔRˆÝŒ^×#Ò# C°Ð#Ñ9Ô9ð 	;¸TØŒ{˜cÒ!Ð!Ý"Ð#G°´Ð#GÐ#GÀ#Ð#GÐ#GÑHÔHÐHÝ”:˜dŸiši™kœk×0Ò0°Ñ9Ô9Ñ:Ô:ð	;ð 	;ð 	;ð 	;ñ 	;ô 	;ð 	;ð 	;ð 	;ð 	;ð 	;ð 	;øøøð 	;ð 	;ð 	;ð 	;ð 	;ð 	;s   ÁAC Ã CÃCc                óº   — 	 |                       d¦  «        }|D ]0}|                     dd¦  «        r|                     dd¦  «        c S Œ1dS # t          $ r Y dS w xY w)uR   Láº¥y tÃªn League Ä‘ang diá»…n ra (IsCurrent: true) hoáº·c fallback sang Standard.z/poe2/LeaguesÚ	IsCurrentFÚValuezRunes of AldurÚStandard)r;   ÚgetÚ	Exception)r    ÚleaguesÚleagues      r!   Úget_active_leaguez$MarketPriceFetcher.get_active_league=   sˆ   € ð	Ø—n’n _Ñ5Ô5ˆGØ!ð Að A�Ø—:’:˜k¨5Ñ1Ô1ð AØ!Ÿ:š: gÐ/?Ñ@Ô@Ð@Ð@Ð@ðAà�:øÝð 	ð 	ð 	Ø�:�:ð	øøøs   ‚AA Á	A Á
AÁANé   rC   úOptional[str]Úmax_retriesÚintúDict[str, Any]c           	     óÜ  — |p|                       ¦   «         }t          j                             |¦  «        }g }t          D ]¯}d|› d|› �}t          |¦  «        D ]•}	 |                      |d¬¦  «        }	t          |	t          ¦  «        r|	 	                    dg ¦  «        ng }
|
D ]}||d<   Œ| 
                    |
¦  «          n.# t          $ r! ||dz
  k    r	 t          j        d¦  «         Y Œ’w xY wŒ°|st          d	|› d
�¦  «        ‚d}|D ]p}| 	                    dd¦  «                             ¦   «         }|                     ¦   «         dk    r.| 	                    d¦  «        }|r|dk    rt#          |¦  «        } nŒqi }|D ]ø}| 	                    dd¦  «                             ¦   «         }|sŒ-| 	                    d¦  «        }|€H| 	                    dg ¦  «        }|r0t          |t$          ¦  «        r|d          	                    d¦  «        }|�|dk    rŒ•t#          |¦  «        }||z  }|| 	                    dd¦  «        t'          |d¦  «        t'          |d¦  «        | 	                    dd¦  «        dœ||<   Œùddt'          |d¦  «        dddœ|d<   d|t)          j        ¦   «                              d¦  «        t'          |d¦  «        t/          |¦  «        |dœ}|                      |¦  «         |S )uÑ   Truy váº¥n giÃ¡ thá»‹ trÆ°á»�ng cho toÃ n bá»™ danh má»¥c vÃ  tÃ­nh giÃ¡ trá»‹ Chaos.

        Returns:
            Dict chá»©a metadata, giÃ¡ má»‘c Chaos, vÃ  tá»« Ä‘iá»ƒn cÃ¡c item kÃ¨m chaos_value.
        z/poe2/Leagues/z /Currencies/ByCategory?Category=g      @r+   ÚItemsÚ	_categoryé   g333333Ó?u@   KhÃ´ng thá»ƒ táº£i báº¥t ká»³ dá»¯ liá»‡u giÃ¡ nÃ o cho League 'z'.g      I@ÚTextÚ z	chaos orbÚCurrentPricer   NÚ	PriceLogséÿÿÿÿÚPriceÚunknownrE   ÚIconUrl)ÚnameÚcategoryÚ	raw_priceÚchaos_valueÚicon_urlz	Chaos Orbr   g      ð?zautopoE2.market_prices.v1z%Y-%m-%d %H:%M:%S)ÚschemarC   Ú
updated_atÚchaos_orb_raw_priceÚtotal_itemsÚitems)rD   r.   ÚparseÚquoteÚMONITORED_CATEGORIESÚranger;   Ú
isinstanceÚdictr@   ÚextendrA   ÚtimeÚsleepr3   ÚstripÚlowerr'   ÚlistÚroundr   ÚnowÚstrftimeÚlenÚ
save_cache)r    rC   rG   Úactive_leagueÚencoded_leagueÚ	raw_itemsÚcatr%   Úattemptr
   r_   ÚitemÚchaos_orb_priceÚtextÚpÚparsed_itemsrV   Úcurrent_priceÚlogsÚprice_floatÚ	chaos_valÚresults                         r!   Úfetch_market_pricesz&MarketPriceFetcher.fetch_market_pricesH   si  € ð Ð: $×"8Ò"8Ñ":Ô":ˆÝœ×+Ò+¨MÑ:Ô:ˆà*,ˆ	å'ð 	$ð 	$ˆCØ]¨Ð]Ð]ÐX[Ð]Ð]ˆHÝ  Ñ-Ô-ð $ð $�ð
$ØŸ>š>¨(¸C˜>Ñ@Ô@�DÝ5?ÀÅdÑ5KÔ5KÐS˜DŸHšH W¨bÑ1Ô1Ð1ÐQS�EØ %ð 0ð 0˜Ø,/˜˜[Ñ)Ð)Ø×$Ò$ UÑ+Ô+Ð+Ø�EøÝ ð $ð $ð $Ø +°¡/Ò1Ð1ØÝ”J˜s‘O”O�O�O�Oð$øøøøð
 ð 	uÝÐsÐboÐsÐsÐsÑtÔtÐtð "&ˆØð 	ð 	ˆDØ—8’8˜F BÑ'Ô'×-Ò-Ñ/Ô/ˆDØ�zŠz‰|Œ|˜{Ò*Ð*Ø—H’H˜^Ñ,Ô,�Øð ˜˜Qš˜Ý&+¨A¡h¤h�OØ�Eøð 35ˆØð 	ð 	ˆDØ—8’8˜F BÑ'Ô'×-Ò-Ñ/Ô/ˆDØð Øà ŸHšH ^Ñ4Ô4ˆMØÐ$à—x’x ¨RÑ0Ô0�Øð :�J t­TÑ2Ô2ð :Ø$(¨¤H§L¢L°Ñ$9Ô$9�MàÐ$¨¸Ò(:Ð(:Øå Ñ.Ô.ˆKØ# oÑ5ˆIð Ø ŸHšH [°)Ñ<Ô<Ý" ;°Ñ2Ô2Ý$ Y°Ñ2Ô2Ø ŸHšH Y°Ñ3Ô3ð"ð "ˆL˜ÑÐð  Ø"Ý˜°Ñ2Ô2ØØð%
ð %
ˆ�[Ñ!ð 2Ø#Ý"œ,™.œ.×1Ò1Ð2EÑFÔFÝ#(¨¸!Ñ#<Ô#<Ý˜|Ñ,Ô,Ø!ð
ð 
ˆð 	�Š˜ÑÔÐØˆs   ÁA#C Ã (C+Ã*C+r
   ÚNonec                ó  — t          j        t           j                             | j        ¦  «        d¬¦  «         t          | j        dd¬¦  «        5 }t          j        ||dd¬¦  «         d	d	d	¦  «         d	S # 1 swxY w Y   d	S )
u,   LÆ°u dá»¯ liá»‡u giÃ¡ vÃ o tá»‡p cache JSON.T)Úexist_okÚwr-   ©ÚencodingrE   F)ÚindentÚensure_asciiN)ÚosÚmakedirsÚpathÚdirnamer   Úopenr4   Údump)r    r
   Úfs      r!   rp   zMarketPriceFetcher.save_cache£   s¸   € å
Œ•B”G—O’O D¤OÑ4Ô4¸tÐDÑDÔDÐDÝ�$”/ 3°Ð9Ñ9Ô9ð 	=¸QÝŒI�d˜A a°eÐ<Ñ<Ô<Ð<ð	=ð 	=ð 	=ñ 	=ô 	=ð 	=ð 	=ð 	=ð 	=ð 	=ð 	=ð 	=øøøð 	=ð 	=ð 	=ð 	=ð 	=ð 	=s   ÁA6Á6A:Á=A:Úmax_age_secondsúOptional[float]úOptional[Dict[str, Any]]c                ó€  — t           j                             | j        ¦  «        sdS |�@t           j                             | j        ¦  «        }t          j        ¦   «         |z
  |k    rdS 	 t          | j        dd¬¦  «        5 }t          j        |¦  «        cddd¦  «         S # 1 swxY w Y   dS # t          $ r Y dS w xY w)uE   Náº¡p cache cá»¥c bá»™ náº¿u tá»‡p tá»“n táº¡i vÃ  chÆ°a háº¿t háº¡n.NÚrr-   r…   )
r‰   r‹   Úexistsr   Úgetmtimerg   r�   r4   ÚloadrA   )r    r�   Úmtimer�   s       r!   Ú
load_cachezMarketPriceFetcher.load_cache©   s  € åŒw�~Š~˜dœoÑ.Ô.ð 	Ø�4àÐ&Ý”G×$Ò$ T¤_Ñ5Ô5ˆEÝŒy‰{Œ{˜UÑ" _Ò4Ð4Ø�tð	Ý�d”o s°WÐ=Ñ=Ô=ð $ÀÝ”y ‘|”|ð$ð $ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $ð $ð $øåð 	ð 	ð 	Ø�4�4ð	øøøs6   Á*B/ ÂB"ÂB/ Â"B&Â&B/ Â)B&Â*B/ Â/
B=Â<B=)r   r   r   r   r   r   )r$   )r%   r   r&   r'   r(   r   )r(   r   )NrE   )rC   rF   rG   rH   r(   rI   )r
   rI   r(   r�   )N)r�   r‘   r(   r’   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚAPI_BASE_URLÚDEFAULT_USER_AGENTÚDEFAULT_CACHE_PATHr"   r;   rD   r€   rp   r™   © r#   r!   r   r   '   s¾   € € € € € ØWÐWð %Ø,Ø,ð	%ð %ð %ð %ð %ð;ð ;ð ;ð ;ð ;ð	ð 	ð 	ð 	ð @AðYð Yð Yð Yð Yðv=ð =ð =ð =ðð ð ð ð ð ð r#   r   )r�   Ú
__future__r   r4   r‰   rg   Úurllib.parser.   Úurllib.requestr   Útypingr   r   r   r   r	   rž   rŸ   r‹   ÚabspathÚjoinrŒ   Ú__file__r    rb   r   r¡   r#   r!   ú<module>r©      s)  ððð ð #Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3Ð 3à*€ØNÐ Ø”W—_’_ R¤W§\¢\°"´'·/²/À(Ñ2KÔ2KÈTÐSWÐY]Ð_eÐg{Ñ%|Ô%|Ñ}Ô}Ð ðð ð Ð ð Pð Pð Pð Pð Pñ Pô Pð Pð Pð Pr#   