SWH_Helper

从steamdb.keylol.com获取愿望单数据

Per 23-12-2020. Zie de nieuwste versie.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey, Greasemonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Violentmonkey.

Voor het installeren van scripts heb je een extensie nodig, zoals Tampermonkey of Userscripts.

Voor het installeren van scripts heb je een extensie nodig, zoals {tampermonkey_link:Tampermonkey}.

Voor het installeren van scripts heb je een gebruikersscriptbeheerder nodig.

(Ik heb al een user script manager, laat me het downloaden!)

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een extensie nodig, zoals {stylus_link:Stylus}.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

Voor het installeren van gebruikersstijlen heb je een gebruikersstijlbeheerder nodig.

(Ik heb al een beheerder - laat me doorgaan met de installatie!)

// ==UserScript==
// @name         SWH_Helper
// @namespace    https://blog.chrxw.com
// @version      1.2
// @description  从steamdb.keylol.com获取愿望单数据
// @author       Chr_
// @match        https://swh.chrxw.com/
// @match        http://localhost/
// @match        https://steamdb.keylol.com/*
// @connect      steamdb.keylol.com
// @connect      swh.chrxw.com
// @connect      swh.chrxw.cn
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_xmlhttpRequest
// ==/UserScript==

(function () {
  'use strict';
  var serverdic = {
    'ali': ["阿里云1", "swh.chrxw.cn:20443"],
    'ali2': ["阿里云2", "swh2.chrxw.cn:20443"],
  }
  var review = ['评测不足', '差评如潮', '特别差评', '差评', '多半差评', '褒贬不一', '多半好评', '好评', '特别好评', '好评如潮', '好评如潮'];
  var infodict;
  var wishlist;
  var wishstr;
  var server;
  var tmp;

  if (window.location.host == 'steamdb.keylol.com') {
    wishstr = window.localStorage.getItem('wish');
    GM_setValue('wish', wishstr);
    var nav = document.getElementsByClassName('nav')[0];
    var button = document.createElement('li');
    button.setAttribute('class', 'nav-swh');
    button.setAttribute('class', 'nav-swh');
    var link = document.createElement('a');
    link.setAttribute('href', 'https://swh.chrxw.com')
    link.text = '愿望单助手';
    button.appendChild(link);
    nav.appendChild(button);
  } else {
    wishstr = GM_getValue('wish');
    if (!wishstr) {
      wishstr = '[]'
    }
    wishlist = JSON.parse(wishstr);
    infodict = GM_getValue('infodict');
    if (!infodict) {
      infodict = {};
    }
    document.getElementById('install').remove();
    document.getElementById('noserver').remove();
    var sbox = document.getElementById('server');
    var opt;
    for (var key in serverdic) {
      opt = document.createElement('option');
      opt.value = key;
      opt.text = serverdic[key][0];
      sbox.appendChild(opt);
    }
    var bts = document.getElementById('buttons');
    var btn = document.createElement('button');
    btn.type = 'button';
    btn.className = 'layui-btn layui-btn-sm';
    btn.textContent = '刷新愿望单数据';
    btn.addEventListener('click', flashLocalData, false);
    bts.appendChild(btn);

    if (infodict) {
      renderTable();
      document.getElementById('status').textContent = '已显示缓存数据'
    }
  }


  function getSelectServer() {
    var choose = document.getElementById('server').value;
    for (var key in serverdic) {
      if (choose == key) {
        server = 'https://' + serverdic[key][1];
      }
    }
  }

  function flashLocalData() {
    getSelectServer();
    var process = document.getElementById('process');
    var status = document.getElementById('status');
    var count = 0;
    var total = wishlist.length;
    var tmp;

    tmp = setInterval(
      function () {
        getFromRemote(wishlist[count]);
      }
      , 500)

    while (count >= total) {
      clearInterval(tmp);
    }

    function getFromRemote(appid) {
      try {
        GM_xmlhttpRequest({
          method: "GET",
          headers: {
            "User-Agent": "SWH_Helper 1.0",
            "Accept": "application/json"
          },
          url: server + '/games/' + appid.toString(),
          onload: function (response) {
            count++;
            status.textContent = '进度:' + count.toString() + '/' + total.toString()+',刷新即可终止操作(已有数据会保留)';
            process.style.width = getPercent(count, total)
            if (response.status == 200) {
              var t = JSON.parse(response.responseText);
              t["lowest"] = t["pcurrent"] <= t["plowest"];
              infodict[appid] = t;
              GM_setValue('infodict', infodict);
              renderTable();
            } else {
              console.log('未查到信息,appid:', appid);
            }
            if (count >= total) {
              console.log('处理完毕');
            }
          }
        });
      } catch (e) {
        console.log(e);
      }
    }

  }

  function cardb2s(b) {
    return b["card"] ? "√" : ""
  }
  function limitb2s(b) {
    return b["limit"] ? "√" : ""
  }
  function adultb2s(b) {
    return b["adult"] ? "√" : ""
  }
  function freeb2s(b) {
    return b["free"] ? "√" : ""
  }
  function releaseb2s(b) {
    return b["release"] ? "√" : ""
  }
  function lowestb2s(b) {
    return b["lowest"] ? "√" : ""
  }
  function genLink(b) {
    return '<a style="color: #01AAED;" href=https://store.steampowered.com/app/' + b["appid"].toString() + '>' + b["appid"].toString() + '</a>'

  }
  function review2text(b) {
    var score = b["rscore"];
    if (score > 9) { score = 9; }
    if (score < 0) { score = 0; }
    return review[b["rscore"]];
  }

  function renderTable() {
    var data = [];
    for (var key in infodict) {
      data.push(infodict[key]);
    }
    layui.use('table', function () {
      var table = layui.table;
      table.render({
        elem: '#test'
        , cols: [[
          { field: 'appid', title: 'ID', width: 100, sort: true, fixed: 'left', align: "center", templet: genLink }
          , { field: 'name_cn', title: '名称', width: 200, sort: true, align: "center" }
          , { field: 'card', title: '卡牌', minWidth: 50, sort: true, align: "center", templet: cardb2s }
          , { field: 'limit', title: '受限', minWidth: 50, sort: true, align: "center", templet: limitb2s }
          , { field: 'adult', title: '软锁', width: 50, sort: true, align: "center", templet: adultb2s }
          , { field: 'free', title: '免费', width: 50, sort: true, align: "center", templet: freeb2s }
          , { field: 'release', title: '发售', width: 50, sort: true, align: "center", templet: releaseb2s }
          , { field: 'lowest', title: '史低', width: 50, sort: true, align: "center", templet: lowestb2s }

          , { field: 'rscore', title: '评价', width: 120, sort: true, align: "center", templet: review2text }
          , { field: 'rtotal', title: '总评', width: 80, sort: true, align: "center" }
          , { field: 'rpercent', title: '好评', width: 80, sort: true, align: "center" }

          , { field: 'pcurrent', title: '现价', width: 80, sort: true, align: "center" }
          , { field: 'porigin', title: '原价', width: 80, sort: true, align: "center" }
          , { field: 'plowest', title: '史低价', width: 100, sort: true, align: "center" }
          , { field: 'pcut', title: '当前折扣', width: 100, sort: true, align: "center" }
          , { field: 'plowestcut', title: '史低折扣', width: 100, sort: true, align: "center" }

          , { field: 'tag', title: '标签', width: 150, align: "center" }
          , { field: 'developer', title: '开发商', width: 150, align: "center" }
          , { field: 'publisher', title: '发行商', width: 150, align: "center" }

          , { field: 'tlowest', title: '史低时间', width: 120, sort: true, align: "center" }
          , { field: 'trelease', title: '发售时间', width: 120, sort: true, align: "center" }
          , { field: 'tmodify', title: '更新时间', width: 120, sort: true, align: "center" }

          , { field: 'gtype', title: '类型', width: 50, sort: true, align: "center" }
          , { field: 'source', title: '来源', width: 50, sort: true, align: "center" }
        ]]
        , data: data
        , skin: 'row' //表格风格
        , even: true
        , page: true //是否显示分页
        , limits: [15, 30, 60, 100, 150, 300, 600, 1000]
        , limit: 60
        , cellMinWidth: 60
        , height: 'full-215'
      });
    });
  }
  function getPercent(num, total) {
    num = parseFloat(num);
    total = parseFloat(total);
    if (isNaN(num) || isNaN(total)) {
      return "0%";
    }
    return total <= 0 ? "0%" : (Math.round(num / total * 100)) + "%";
  }
})();