
    dh                     R    S r SSKJrJr  SSKJrJrJr  SSKJ	r	J
r
   " S S\5      rg)zUtil that calls Steam-WebAPI.    )AnyList)	BaseModel
ConfigDictmodel_validator)STEAM_GET_GAMES_DETAILSSTEAM_GET_RECOMMENDED_GAMESc                   8   \ rS rSr% SrSr\\S'   SS\S.SS	\	S./r
\\   \S
'   \" SS9rS\\   4S jr\" SS9\S\S\4S j5       5       rS\S\4S jrS\S\4S jrS\S\4S jrS\S\4S jrS\S\4S jrS\S\\   4S jrS\S\4S jrS\S \S\4S! jrS"rg)#SteamWebAPIWrapper   zWrapper for Steam API.Nsteamget_game_detailszGet Game Details)modenamedescriptionget_recommended_gameszGet Recommended Games
operationsforbid)extrareturnc                     U R                   $ )zReturn a list of operations.)r   )selfs    [/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/utilities/steam.pyget_operations!SteamWebAPIWrapper.get_operations%   s        before)r   valuesc                      SSK Jn   SSKJn  U" S5      nU" U5      nXQS'   U$ ! [         a    [        S5      ef = f! [         a    [        S5      ef = f)z8Validate api key and python package has been configured.r   )Steamz+python-steam-api library is not installed. )configz#decouple library is not installed. 	STEAM_KEYr   )r   r    ImportErrordecoupler!   )clsr   r    r!   KEYr   s         r   validate_environment'SteamWebAPIWrapper.validate_environment)   sr    	M#	E'
 [!c
w  	MKLL	M
  	ECDD	Es   % > ;Adetailsc                     SnUR                  5        H(  u  p4US[        U5      -   S-   [        U5      -   S-   -  nM*     U$ )zParse the details result. zThe z is: 
)itemsstr)r   r)   resultkeyvalues        r   parse_to_strSteamWebAPIWrapper.parse_to_str?   sD    !--/JCfs3x''1CJ>EEF *r   gamesc                 T    0 nUS    H  nUS   US'   US   US'   US   US'     U$    U$ )zbThe response may contain more than one game, so we need to choose the right
one and return the id.appsidlinkprice )r   r4   	game_infoapps       r   get_id_link_price$SteamWebAPIWrapper.get_id_link_priceF   sQ     	=C!$iIdO #FIf!$WIg !
 r   html_stringc                 @    SSK Jn  U" US5      nUR                  5       $ )Nr   )BeautifulSoupzhtml.parser)bs4rA   get_text)r   r?   rA   soups       r   remove_html_tags#SteamWebAPIWrapper.remove_html_tagsR   s    %[-8}}r   r   c                    U R                   R                  R                  U5      nU R                  U5      nU R	                  U5      n[        UR                  S5      5      nU R                   R                  R                  U5      nUR                  U5      R                  S5      nUR                  S5      nU R                  U5      nUR                  U5      R                  S5      R                  S5      n	SU-   S-   S-   U	-   S-   n
XJ-   nU$ )Nr7   datadetailed_descriptionsupported_languageszThe summary of the game is: r,   z)The supported languages of the game are: )	r   r6   search_gamesr=   r2   r.   getget_app_detailsrE   )r   r   r4   info_partOne_dictinfo_partOner7   	info_dictrH   rI   rJ   info_partTwoinfos               r   details_of_games#SteamWebAPIWrapper.details_of_gamesX   s   

,,T2 2259(():;"&&t,-JJOO33B7	}}R $$V,#xx(>?  $445IJ'mmB/33F;??@UV*"# :: "	"
  	 *r   c                 `    U R                   R                  R                  U5      nUS   S   nU$ )Nplayersteamid)r   userssearch_user)r   r   usersteam_ids       r   get_steam_idSteamWebAPIWrapper.get_steam_idp   s/    zz++D1>),r   r[   c                 P    U R                   R                  R                  USS5      $ )NF)r   rX   get_owned_games)r   r[   s     r   get_users_games"SteamWebAPIWrapper.get_users_gamesu   s!    zz//%GGr   c                     SS K nU R                  U5      n0 nSnSnUS    Hn  nUS   nSUS.n	UR                  U	5      n
U
R	                  SS5      R                  S	5      nU H)  nX;   a  XL==   S
-  ss'   OS
XL'   XL   U:  d  M#  XL   nUnM+     Mp     [        5       n	SU	S'   XYS'   UR                  U	5      n[        UR                  5       S SS9nUS    Vs/ sH  owS   PM	     nnU Vs/ sH  owS   U;  d  M  UPM     nnUS S  Vs/ sH  owS   PM	     nn[        U5      $ ! [         a    [        S5      ef = fs  snf s  snf s  snf )Nr   z$steamspypi library is not installed.r+   r4   appid
appdetails)requestrc   genrez,    re   c                 &    U R                  SS5      $ )Naverage_foreverr   )rL   )xs    r   <lambda>6SteamWebAPIWrapper.recommended_games.<locals>.<lambda>   s    /@!)Dr   T)r0   reverse   r   )

steamspypir#   r`   downloadrL   splitdictsortedr   r.   )r   r[   ro   users_gamesr/   most_popular_genremost_popular_genre_countgamerc   data_request
genreStore	genreListrf   rH   sorted_dataowned_gamesremaining_gamestop_5_popular_not_owneds                     r   recommended_games$SteamWebAPIWrapper.recommended_gamesx   s   	F **84!##$ (DME'3eDL#,,\:J"w399$?I"?MQ&M$%FM=#;;/5},).& # ) v")Y 2W""<0KKMDd
 2=W1EF1EG}1EF(
(TM,LD[ 	 
 =LBQ<O"P<OD<<O"P*++C  	FDEE	F8 G
 #Qs#   D$ D=,E;E
E$D:r   rw   c                 |    US:X  a  U R                  U5      $ US:X  a  U R                  U5      $ [        SU S35      e)Nget_games_detailsr   zInvalid mode z for Steam API.)rS   r   
ValueError)r   r   rw   s      r   runSteamWebAPIWrapper.run   sJ    &&((..,,))$//}TF/BCCr   r:   )__name__
__module____qualname____firstlineno____doc__r   r   __annotations__r   r	   r   r   rr   r   model_configr   r   classmethodr'   r.   r2   r=   rE   rS   r\   r`   r   r   __static_attributes__r:   r   r   r   r      s:    E3 '&2	
 ,+6	
JT
  LT
  (#$ 3   $(D S 
t 
 
C C S S 0  
H HS	 H$,# $,# $,LD D3 D3 Dr   r   N)r   typingr   r   pydanticr   r   r   &langchain_community.tools.steam.promptr   r	   r   r:   r   r   <module>r      s&    #  ; ;WD WDr   