Show prices on Steam followedgames page

在Steam社区"已关注的游戏"页面显示游戏的价格

目前为 2022-11-04 提交的版本。查看 最新版本

// ==UserScript==
// @name         Show prices on Steam followedgames page
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  在Steam社区"已关注的游戏"页面显示游戏的价格
// @author       lyzlyslyc
// @match        http*://steamcommunity.com/profiles/*/followedgames/
// @icon         https://store.steampowered.com/favicon.ico
// @grant        GM_xmlhttpRequest
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    // Your code here...

    let interval = 200;
    setInterval(requestPrice,interval);

    function requestPrice(){
        //获取关注列表
        let apps = document.querySelector(".games_list_rows").children;
        for(let i=0;i<apps.length;i++){
            if(apps[i].hasPrice||apps[i].hasPrice=="loading")continue;
            //在显示区域内才加载,防止请求过多
            if(!isAppVisible(apps[i]))continue;
            let appUrl = apps[i].querySelector("a").href;
            if(appUrl){
                console.log("loading");
                //获取appid
                let appId = appUrl.match(/app\/(\d+)/)[1];
                //发送查询请求
                GM_xmlhttpRequest({
                    method: "get",
                    url: `https://store.steampowered.com/api/appdetails?appids=${appId}&cc=cn`,
                    responseType: "json",
                    timeout: 3e4,
                    onload: function (result) {
                        result = result.response;
                        //可能返回空数组
                        if (result) {
                            let price = null;
                            //可能应用已下架
                            if(!result[appId].success){
                                price = {
                                    discount_percent: 0,
                                    final : 0,
                                    final_formatted: "Not for Sale"
                                };
                            }
                            else if(result[appId].data.is_free){
                                price = {
                                    discount_percent: 0,
                                    final : 0,
                                    final_formatted: "Free to Play"
                                };
                            }
                            //获取价格
                            else price = result[appId].data.price_overview;
                            //可能暂无定价
                            if(!price){
                                price = {
                                    discount_percent: 0,
                                    final : 0,
                                    final_formatted: "Coming Soon"
                                };
                            }
                            let content = generatePrice(price);
                            let span = document.createElement("span");
                            span.innerHTML = content;
                            span.className = "game_purchase_action_bg";
                            let a = apps[i].querySelector(".followed_game_actions a");
                            a.parentElement.prepend(span);
                            apps[i].hasPrice = true;
                        }
                    },
                    ontimeout:function(){
                        let content =
                            `<span class="discount_block  no_discount discount_block_inline" data-price-final="0">`+
                            '<div class="discount_prices">'+
                            `<div class="discount_final_price">Request Timeout</div>`+
                            '</div>'+
                            '</span>';
                        let span = document.createElement("span");
                        span.innerHTML = content;
                        span.className = "game_purchase_action_bg";
                        let a = apps[i].querySelector(".followed_game_actions a");
                        a.parentElement.prepend(span);
                        apps[i].hasPrice = false;
                    }
                })
                apps[i].hasPrice = "loading";
            }
    }
    }

    function generatePrice(price){
        let content = "";
        let template = "";
        if(price.discount_percent==0){
            template =
                `<span class="discount_block  no_discount discount_block_inline" data-price-final="${price.final}">`+
                    '<div class="discount_prices">'+
                        `<div class="discount_final_price">${price.final_formatted}</div>`+
                    '</div>'+
                '</span>';
        }
        else {
            template =
                `<span class="discount_block  discount_block_inline" data-price-final="${price.final}">`+
                    `<div class="discount_pct">-${price.discount_percent}%</div>`+
                    '<div class="discount_prices">'+
                        `<div class="discount_original_price">${price.initial_formatted}</div>`+
                        `<div class="discount_final_price">${price.final_formatted}</div>`+
                    '</div>'+
                '</span>'
        }
        content+=template;
        return content;
    }

    function isAppVisible(app){
        let s = app.offsetTop;    // 元素相对于页面顶部的距离
        let x = app.offsetHeight;    //元素自身高度
        let t = document.documentElement.scrollTop;  // 页面在垂直方向上滚动的距离
        let y = document.documentElement.clientHeight;   //窗口可视区域的高度
        let isHidden = (s+x) < t || (s > (t+y));
        return !isHidden
    }
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址