Greasy Fork is available in English.

Export SteamDB Search

Adds a button to export current search in SteamDB as TSV

// ==UserScript==
// @name                Export SteamDB Search
// @name:bg             Експортиране на SteamDB търсене
// @name:cs             Exportovat vyhledávání SteamDB
// @name:da             Eksporter SteamDB-søgning
// @name:de             SteamDB-Suchen exportieren
// @name:el             Εξαγωγή αναζήτησης SteamDB
// @name:en             Export SteamDB Search
// @name:eo             Eksporti SteamDB serĉon
// @name:es             Exportar Búsquedas de SteamDB
// @name:es-la          Exportar Búsquedas de SteamDB
// @name:es-419         Exportar Búsquedas de SteamDB
// @name:fi             Vie SteamDB-haku
// @name:fr             Exporter les recherches SteamDB
// @name:fr-CA          Exporter les recherches SteamDB
// @name:he             ייצוא חיפוש SteamDB
// @name:hr             Izvoz SteamDB pretrage
// @name:hu             SteamDB keresés exportálása
// @name:id             Ekspor Pencarian SteamDB
// @name:it             Esporta Ricerca SteamDB
// @name:ja             SteamDB検索をエクスポート
// @name:ka             SteamDB ძიების ექსპორტი
// @name:ko             SteamDB 검색 내보내기
// @name:nb             Eksporter SteamDB-søk
// @name:nl             Exporteer SteamDB-zoekopdracht
// @name:pl             Eksportuj wyszukiwanie SteamDB
// @name:pt-BR          Exportar Pesquisa SteamDB
// @name:ro             Exportă căutarea SteamDB
// @name:sv             Exportera SteamDB-sökning
// @name:th             ส่งออกการค้นหา SteamDB
// @name:tr             SteamDB Aramasını Dışa Aktar
// @name:ug             SteamDB ئىزدەشنى چىقىرىۋېتىش
// @name:uk             Експортувати пошук SteamDB
// @name:vi             Xuất tìm kiếm SteamDB
// @name:zh-TW          匯出 SteamDB 搜尋
// @namespace           https://jlcareglio.github.io/
// @version             2.3.9
// @description         Adds a button to export current search in SteamDB as TSV
// @description:bg      Добавя бутон за експортиране на текущото търсене в SteamDB като TSV
// @description:cs      Přidává tlačítko pro export aktuálního vyhledávání ve SteamDB jako TSV
// @description:da      Tilføjer en knap til at eksportere den aktuelle søgning i SteamDB som TSV
// @description:de      Fügt eine Schaltfläche hinzu, um die aktuelle Suche in SteamDB als TSV zu exportieren
// @description:el      Προσθέτει ένα κουμπί για την εξαγωγή της τρέχουσας αναζήτησης στο SteamDB ως TSV
// @description:en      Adds a button to export current search in SteamDB as TSV
// @description:eo      Aldonas butonon por eksporti la nunan serĉon en SteamDB kiel TSV
// @description:es      Agrega un botón para exportar como TSV el listado de búsqueda en SteamDB
// @description:es-la   Agrega un botón para exportar como TSV el listado de búsqueda en SteamDB
// @description:es-419  Agrega un botón para exportar como TSV el listado de búsqueda en SteamDB
// @description:fi      Lisää painikkeen nykyisen haun viemiseksi SteamDB:stä TSV-muodossa
// @description:fr      Ajoute un bouton pour exporter la recherche actuelle dans SteamDB en TSV
// @description:fr-CA   Ajoute un bouton pour exporter la recherche actuelle dans SteamDB en TSV
// @description:he      מוסיף כפתור לייצוא החיפוש הנוכחי ב-SteamDB כ-TSV
// @description:hr      Dodaje gumb za izvoz trenutne pretrage u SteamDB kao TSV
// @description:hu      Hozzáad egy gombot a SteamDB jelenlegi keresésének TSV formátumban történő exportálásához
// @description:id      Menambahkan tombol untuk mengekspor pencarian saat ini di SteamDB sebagai TSV
// @description:it      Aggiunge un pulsante per esportare la ricerca corrente 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 søk i SteamDB som TSV
// @description:nl      Voegt een knop toe om de huidige zoekopdracht in SteamDB als TSV te exporteren
// @description:pl      Dodaje przycisk do eksportowania bieżącego wyszukiwania w SteamDB jako TSV
// @description:pt-BR   Adiciona um botão para exportar a pesquisa atual no SteamDB como TSV
// @description:ro      Adaugă un buton pentru a exporta căutarea curentă în SteamDB ca TSV
// @description:sv      Lägger till en knapp för att exportera aktuell sökning i SteamDB som TSV
// @description:th      เพิ่มปุ่มเพื่อส่งออกการค้นหาปัจจุบันใน SteamDB เป็น TSV
// @description:tr      SteamDB'deki mevcut aramayı 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 tìm kiếm 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/3d9c4694430b181d2de2780aa2479572/raw/01_Export-SteamDB-Search.user.js
// @match               *://steamdb.info/search*
// @license             MIT
// @compatible          firefox
// @compatible          chrome
// @compatible          opera
// @compatible          safari
// @compatible          edge
// @compatible          brave
// @supportURL          https://gist.github.com/JLCareglio/3d9c4694430b181d2de2780aa2479572/
// ==/UserScript==

(async () => {
  async function HandlerClick() {
    btnExport.innerText = "Exporting, please wait...";
    await new Promise((resolve) => setTimeout(resolve, 50));
    try {
      const shown = document.querySelector("#dt-length-0");
      shown.value = -1;
      shown.dispatchEvent(new Event("change"));
    } catch (error) {
      console.error(error);
      btnExport.style.color = "red";
      btnExport.innerText = "Error, please click the search button first";
      return;
    }

    const rows = Array.from(
      document.querySelectorAll("#table-sortable 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`\#`);
      let lastUpdate = row.querySelector("td.timeago").dataset.time;
      let lastUpdateUTC = new Date(lastUpdate).toUTCString();

      tsvRows.push([app_id, name, lastUpdateUTC]);
    }

    const headers = ["AppID", "Name", "Last Update (UTC)"];
    const tsvContent = [headers, ...tsvRows]
      .map((row) => row.join("\t"))
      .join("\n");
    DownloadTsvFile(tsvContent, "SteamDB_Search.tsv");
    btnExport.innerText = "Export TSV";
  }

  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.style.padding = "11px";
  btnExport.innerText = "Export TSV";
  btnExport.onclick = HandlerClick;

  document
    .querySelector("#apps > form > dl:nth-child(6) > dd")
    .appendChild(btnExport);
})();