Export Steam TradeHistory

Export Steam trade history to a TSV file

Tính đến 17-01-2025. Xem phiên bản mới nhất.

// 👋 Hola, usa 🐒Tampermonkey 👇
// https://www.tampermonkey.net/

// ==UserScript==
// @name            Export Steam TradeHistory
// @name:es         Exportar Historial de Intercambios de Steam
// @name:it         Esporta Cronologia Scambi di Steam
// @name:fr         Exporter l'historique des échanges Steam
// @name:de         Steam-Handelsverlauf exportieren
// @namespace       https://jlcareglio.github.io/
// @version         1.0.0
// @description     Export Steam trade history to a TSV file
// @description:es  Permite exportar el historial de intercambios de Steam a un archivo TSV
// @description:it  Esporta la cronologia degli scambi di Steam in un file TSV
// @description:fr  Exporter l'historique des échanges Steam dans un fichier TSV
// @description:de  Exportieren Sie den Steam-Handelsverlauf in eine TSV-Datei
// @icon            https://www.google.com/s2/favicons?sz=64&domain=steamcommunity.com
// @grant           none
// @author          Jesús Lautaro Careglio Albornoz
// @source          https://gist.githubusercontent.com/JLCareglio/00bef3fb30b3dedd9f0dd849c9bd461a/raw/
// @match           https://steamcommunity.com/profiles/*/tradehistory*
// @match           https://steamcommunity.com/id/*/tradehistory*
// @supportURL      https://gist.githubusercontent.com/JLCareglio/00bef3fb30b3dedd9f0dd849c9bd461a/
// ==/UserScript==

(async () => {
  const pagInGrowBar = document.querySelector(".inventory_history_pagingrow");
  const tradeHistoryRows = document.querySelectorAll(".tradehistoryrow");
  const btnExport = document.createElement("div");

  const exportTradeHistory = () => {
    const trades = Array.from(tradeHistoryRows).map((row) => {
      // Convertir fecha y hora al formato deseado
      const dateText = row
        .querySelector(".tradehistory_date")
        .childNodes[0].textContent.trim();
      const timeText = row
        .querySelector(".tradehistory_timestamp")
        .textContent.trim();

      const monthMap = {
        ENE: "01",
        FEB: "02",
        MAR: "03",
        ABR: "04",
        MAY: "05",
        JUN: "06",
        JUL: "07",
        AGO: "08",
        SEP: "09",
        OCT: "10",
        NOV: "11",
        DIC: "12",
      };

      const [day, month, year] = dateText.split(" ");
      const monthNum = monthMap[month];
      const time = timeText.replace(" a. m.", "").replace(" p. m.", "");

      const datetime = `${day.padStart(2, "0")}/${monthNum}/${year} ${time}`;

      const userLink = row.querySelector(".tradehistory_event_description a");
      const userId = userLink.href.split("/").pop();
      const username = userLink.textContent;
      const items = Array.from(row.querySelectorAll(".history_item_name")).map(
        (item) => item.textContent.trim()
      );

      return {
        datetime,
        user: {
          id: userId,
          name: username,
        },
        items,
      };
    });

    const tsvHeader = "Date&Time\tUserID\tUserName\tItems";
    const tsvContent = trades
      .map((trade) => {
        const items = trade.items.join(", ");
        return `${trade.datetime}\t${trade.user.id}\t${trade.user.name}\t${items}`;
      })
      .join("\n");

    const tsvData = `${tsvHeader}\n${tsvContent}`;

    const blob = new Blob([tsvData], { type: "text/tab-separated-values" });
    const url = URL.createObjectURL(blob);
    const a = document.createElement("a");
    a.href = url;
    a.download = "steam_trade_history.tsv";
    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);
    URL.revokeObjectURL(url);
  };

  btnExport.classList.add("inventory_history_nextbtn");
  btnExport.innerHTML = `<a class="pagebtn">Export TSV</a>`;
  btnExport.addEventListener("click", exportTradeHistory);
  pagInGrowBar.appendChild(btnExport);
})();