SteamDB سېتىشنى ئېكسپورت قىلىش

SteamDB نىڭ ھازىرقى سېتىشلىرىنى TSV غا ئېكسپورت قىلىش ئۈچۈن كۇنۇپكا قوشۇش

بۇ قوليازمىنى قاچىلاش؟
ئاپتورنىڭ تەۋسىيەلىگەن قوليازمىسى

سىز بەلكىم SteamDB ئىزدەشنى چىقىرىۋېتىش نى ياقتۇرۇشىڭىز مۇمكىن.

بۇ قوليازمىنى قاچىلاش
// ==UserScript==
// @name                Export SteamDB Sales
// @name:bg             Експортиране на SteamDB продажби
// @name:cs             Export SteamDB prodeje
// @name:da             Eksporter SteamDB salg
// @name:de             SteamDB-Verkäufe exportieren
// @name:el             Εξαγωγή πωλήσεων SteamDB
// @name:en             Export SteamDB Sales
// @name:eo             Eksporti SteamDB-vendojn
// @name:es             Exportar Ventas de SteamDB
// @name:es-la          Exportar Ventas de SteamDB
// @name:es-419         Exportar Ventas de SteamDB
// @name:fi             Vie SteamDB-myynti
// @name:fr             Exporter les ventes SteamDB
// @name:fr-CA          Exporter les ventes SteamDB
// @name:he             ייצוא מכירות SteamDB
// @name:hr             Izvoz SteamDB prodaje
// @name:hu             SteamDB eladások exportálása
// @name:id             Ekspor Penjualan SteamDB
// @name:it             Esporta vendite SteamDB
// @name:ja             SteamDBセールをエクスポート
// @name:ka             ექსპორტი SteamDB გაყიდვები
// @name:ko             SteamDB 판매 내보내기
// @name:nb             Eksporter SteamDB-salg
// @name:nl             Exporteer SteamDB-verkopen
// @name:pl             Eksportuj sprzedaż SteamDB
// @name:pt-BR          Exportar Vendas do SteamDB
// @name:ro             Exportați vânzările SteamDB
// @name:sv             Exportera SteamDB-försäljning
// @name:th             ส่งออกการขาย SteamDB
// @name:tr             SteamDB Satışlarını Dışa Aktar
// @name:ug             SteamDB سېتىشنى ئېكسپورت قىلىش
// @name:uk             Експортувати продажі SteamDB
// @name:vi             Xuất bán hàng SteamDB
// @name:zh-TW          匯出 SteamDB 銷售
// @namespace           https://jlcareglio.github.io/
// @version             2.0.6
// @description         Adds a button to export current sales in SteamDB as TSV
// @description:bg      Добавя бутон за експортиране на текущите продажби в SteamDB като TSV
// @description:cs      Přidá tlačítko pro export aktuálních prodejů ve SteamDB jako TSV
// @description:da      Tilføjer en knap til at eksportere aktuelle salg i SteamDB som TSV
// @description:de      Fügt eine Schaltfläche hinzu, um aktuelle Verkäufe in SteamDB als TSV zu exportieren
// @description:el      Προσθέτει ένα κουμπί για εξαγωγή των τρεχουσών πωλήσεων στο SteamDB ως TSV
// @description:en      Adds a button to export current sales in SteamDB as TSV
// @description:eo      Aldonas butonon por eksporti nunajn vendojn en SteamDB kiel TSV
// @description:es      Agrega un botón para exportar como TSV el listado de ventas actuales en SteamDB
// @description:es-la   Agrega un botón para exportar como TSV el listado de ventas actuales en SteamDB
// @description:es-419  Agrega un botón para exportar como TSV el listado de ventas actuales en SteamDB
// @description:fi      Lisää painikkeen nykyisten myyntien viemiseen SteamDB:ssä TSV-muodossa
// @description:fr      Ajoute un bouton pour exporter les ventes actuelles de SteamDB en TSV
// @description:fr-CA   Ajoute un bouton pour exporter les ventes actuelles de SteamDB en TSV
// @description:he      מוסיף כפתור לייצוא מכירות נוכחיות ב-SteamDB כ-TSV
// @description:hr      Dodaje gumb za izvoz trenutne prodaje u SteamDB-u kao TSV
// @description:hu      Hozzáad egy gombot a SteamDB aktuális eladásainak TSV formátumban történő exportálásához
// @description:id      Menambahkan tombol untuk mengekspor penjualan saat ini di SteamDB sebagai TSV
// @description:it      Aggiunge un pulsante per esportare le vendite correnti in SteamDB come TSV
// @description:ja      SteamDBの現在のセールをTSVとしてエクスポートするボタンを追加します
// @description:ka      ამატებს ღილაკს SteamDB გაყიდვების TSV ფორმატში ექსპორტისთვის
// @description:ko      SteamDB의 현재 판매를 TSV로 내보내는 버튼을 추가합니다
// @description:nb      Legger til en knapp for å eksportere gjeldende salg i SteamDB som TSV
// @description:nl      Voegt een knop toe om huidige verkopen in SteamDB als TSV te exporteren
// @description:pl      Dodaje przycisk do eksportowania bieżącej sprzedaży w SteamDB jako TSV
// @description:pt-BR   Adiciona um botão para exportar as vendas atuais no SteamDB como TSV
// @description:ro      Adaugă un buton pentru a exporta vânzările curente din SteamDB ca TSV
// @description:sv      Lägger till en knapp för att exportera aktuella försäljningar i SteamDB som TSV
// @description:th      เพิ่มปุ่มเพื่อส่งออกการขายปัจจุบันใน SteamDB เป็น TSV
// @description:tr      SteamDB'deki mevcut satışları TSV olarak dışa aktarmak için bir düğme ekler
// @description:ug      SteamDB نىڭ ھازىرقى سېتىشلىرىنى TSV غا ئېكسپورت قىلىش ئۈچۈن كۇنۇپكا قوشۇش
// @description:uk      Додає кнопку для експорту поточних продажів у SteamDB у форматі TSV
// @description:vi      Thêm nút để xuất bán hàng hiện tại trong SteamDB dưới dạng TSV
// @description:zh-TW   新增一個按鈕以 TSV 格式匯出 SteamDB 當前銷售
// @icon                https://www.google.com/s2/favicons?sz=64&domain=steamdb.info
// @grant               none
// @author              Jesús Lautaro Careglio Albornoz
// @source              https://gist.githubusercontent.com/JLCareglio/8c47034f40e9febfd52476dd2f36e7bf/raw/01_Export-SteamDB-Sales.user.js
// @match               *://steamdb.info/sales*
// @license             MIT
// @compatible          firefox
// @compatible          chrome
// @compatible          opera
// @compatible          safari
// @compatible          edge
// @compatible          brave
// @supportURL          https://gist.github.com/JLCareglio/8c47034f40e9febfd52476dd2f36e7bf/
// ==/UserScript==

(async () => {
  async function HandlerClick() {
    const shown = document.querySelector("#dt-length-0");
    shown.value = -1;
    shown.dispatchEvent(new Event("change"));
    const rows = Array.from(
      document.querySelectorAll("#DataTables_Table_0 tbody tr")
    );
    const tsvRows = [];
    // console.log({ rows });

    for (const row of rows) {
      // console.log({ row });
      const app_id = row.dataset.appid;
      const name = row
        .querySelector("td:nth-child(3) > a")
        .textContent.replaceAll("#", String.raw`\#`);
      const discount =
        row.querySelector("td:nth-child(4)").textContent.trim() || "—";
      const price = parseFloat(
        row
          .querySelector("td:nth-child(5)")
          .textContent.match(/\d+([.,]?\d+)?/)[0]
          .replace(",", ".")
      );
      let rating = row.querySelector("td:nth-child(6)").textContent;
      rating = rating.match(/^\d{1,2}\.\d{2}%$/) ? rating : "—";
      let endsDate, startedDate;
      // console.log({ app_id, name, discount, price, rating });
      do {
        let ends = row.querySelector("td:nth-child(8)");
        let started = row.querySelector("td:nth-child(9)");
        endsDate = new Date(ends.title.replace(/( at)/g, "").split("\n")[0]);
        startedDate = new Date(
          started.title.replace(/( at)/g, "").split("\n")[0]
        );

        if (ends.textContent == "" || started.textContent == "")
          await ScrollTo(row);

        if (isNaN(endsDate) && ends.textContent == "—") endsDate = "";
        if (isNaN(startedDate) && started.textContent == "—") startedDate = "";
      } while (
        (isNaN(endsDate) || isNaN(startedDate)) &&
        endsDate != "" &&
        startedDate != ""
      );

      if (endsDate != "") endsDate = endsDate.toUTCString().replace(" GMT", "");
      if (startedDate != "")
        startedDate = startedDate.toUTCString().replace(" GMT", "");

      const release = row.querySelector("td:nth-child(7)").textContent;

      tsvRows.push([
        app_id,
        name,
        discount,
        price,
        rating,
        release,
        endsDate,
        startedDate,
      ]);
    }

    const headers = [
      "AppID",
      "Name",
      "% Discount",
      "Price",
      "Rating",
      "Release",
      "Ends (UTC)",
      "Started (UTC)",
    ];
    const tsvContent = [headers, ...tsvRows]
      .map((row) => row.join("\t"))
      .join("\n");
    DownloadTsvFile(tsvContent, "SteamDB_Sales.tsv");
  }

  async function ScrollTo(element) {
    await new Promise((resolve) => {
      element.scrollIntoView(true, { behavior: "instant", block: "start" });
      window.setTimeout(() => {
        resolve();
      }, 100);
    });
  }

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

  const btnExport = document.createElement("a");
  btnExport.classList.value = "btn btn-link";
  btnExport.id = "js-filters-reset";
  btnExport.innerText = "Export TSV";
  btnExport.onclick = HandlerClick;

  document.querySelector("#js-filters").appendChild(btnExport);
})();