|
本文为 其乐用户(UID:212280) 发布的原创文章,转摘前请联系该用户获得许可
因为自己的爬虫需要算社区手续费,所以简单看了一下Steam市场的js文件,关于手续费计算的主要函数为economy_common.js中209行GetItemPriceFromTotal函数。
计算方式有点复杂也不仔细看了,贴出来可用的python代码(请忽略命名规则等)
- import math
- g_rgWalletInfo = {
- "rwgrsn": -2,
- "success": True,
- "wallet_balance": "14669",
- "wallet_country": "CN",
- "wallet_currency": 23,
- "wallet_currency_increment": "1",
- "wallet_delayed_balance": "356",
- "wallet_fee": "1",
- "wallet_fee_base": "0",
- "wallet_fee_minimum": "7",
- "wallet_fee_percent": "0.05",
- "wallet_market_minimum": "7",
- "wallet_max_balance": "1400000",
- "wallet_publisher_fee_percent_default": "0.10",
- "wallet_state": "",
- "wallet_trade_max_balance": "1260000"
- }
- def CalculateFee(base_amt, pct, rgWallet):
- if pct > 0:
- return ToValidMarketPrice(math.floor(base_amt * pct), rgWallet)
- return 0
- def GetTotalWithFees(base_amt, ppct, spct, rgWallet):
- nBase = ToValidMarketPrice(base_amt, rgWallet)
- nPubFee = CalculateFee(base_amt, ppct, rgWallet)
- nSteamFee = CalculateFee(base_amt, spct, rgWallet)
- return nBase + nPubFee + nSteamFee
- def ToValidMarketPrice(nPrice, rgWallet):
- nFloor = int(rgWallet['wallet_market_minimum'])
- nIncrement = int(rgWallet['wallet_currency_increment'])
- if nPrice <= nFloor:
- return nFloor
- if nIncrement > 1:
- dAmount = nPrice / nIncrement
- dSign = -1 if dAmount < 0 else 1
- dAmount = (dSign * math.floor(abs(dAmount) + 0.5)) * nIncrement
- return dAmount
- return nPrice
- def GetItemPriceFromTotal(nTotal, rgWallet):
- ppct = float(rgWallet['wallet_publisher_fee_percent_default'])
- spct = float(rgWallet['wallet_fee_percent'])
- nIncrement = int(rgWallet['wallet_currency_increment'])
- nFloor = int(rgWallet['wallet_market_minimum'])
- nInitialGuess = math.floor(nTotal / (1.0 + ppct + spct))
- nMaxBase = nTotal - (2 * nFloor)
- nBase = ToValidMarketPrice(min(nInitialGuess, nMaxBase), rgWallet)
- for i in range(3):
- nCalculated = GetTotalWithFees(nBase, ppct, spct, rgWallet)
- if nCalculated == nTotal:
- return nBase
- if nCalculated < nTotal:
- nBase += nIncrement
- else:
- nBase -= nIncrement
- break
- return max(nFloor, nBase)
- if __name__ == '__main__':
- buyer = float(input("买家支付:"))
- receive = GetItemPriceFromTotal(buyer * 100, g_rgWalletInfo) / 100
- print(f"您收款:{receive}")
复制代码
|