avatar
Untitled

Guest 70 27th Nov, 2024

MARKUP 4.63 KB
                                           
                         function fetchGladiatusData() {
  const url = "https://s61-pl.gladiatus.gameforge.com/game/index.php?mod=highscore&sh=451febb35cf7ff10b6d30a7fb7cf30f3";
  const pageRanges = [...Array(20).keys()].map(x => x + 1); // Zakresy od 1 do 20 stron
  let allData = [];
  let isFirstPage = true;

  pageRanges.forEach(page => {
    const html = fetchHtmlForPage(page);
    const tables = getTablesFromHtml(html);

    if (tables.length > 0) {
      const tableData = tables[0];
      allData = isFirstPage ? allData.concat(tableData) : allData.concat(tableData.slice(1));
      isFirstPage = false;
    }
  });

  const sheetName = new Date().toISOString().split("T")[0];
  saveToSheet(sheetName, allData);

  // Funkcja pomocnicza: pobieranie HTML dla danej strony
  function fetchHtmlForPage(page) {
    const options = {
      method: "post",
      payload: { a: page },
      followRedirects: true,
      muteHttpExceptions: true
    };
    return UrlFetchApp.fetch(url, options).getContentText();
  }

  // Funkcja pomocnicza: ekstrakcja tabel z HTML
  function getTablesFromHtml(html) {
    const tableRegex = /<table.*?class=["'](.*?section-like.*?|.*?narrow.*?)["'].*?>([\s\S]*?)<\/table>/g;
    const tables = [];
    let match;
    while ((match = tableRegex.exec(html)) !== null) {
      tables.push(match[2]);
    }
    return tables.map(parseTable);
  }

  // Funkcja pomocnicza: parsowanie tabel HTML na dane
  function parseTable(tableHtml) {
    const rowRegex = /<tr.*?>([\s\S]*?)<\/tr>/g;
    const cellRegex = /<t[dh].*?>([\s\S]*?)<\/t[dh]>/g;
    const rows = [];
    let rowMatch;

    while ((rowMatch = rowRegex.exec(tableHtml)) !== null) {
      const cells = [];
      let cellMatch;
      while ((cellMatch = cellRegex.exec(rowMatch[1])) !== null) {
        cells.push(cleanHtml(cellMatch[1]));
      }
      rows.push(cells);
    }
    return rows;
  }

  // Funkcja pomocnicza: czyszczenie HTML
  function cleanHtml(html) {
    return html.replace(/<.*?>/g, "").trim();
  }

  // Funkcja pomocnicza: zapis danych do arkusza
  function saveToSheet(sheetName, data) {
    const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
    let sheet = spreadsheet.getSheetByName(sheetName);
    if (!sheet) {
      sheet = spreadsheet.insertSheet(sheetName);
    }
    sheet.clear();
    sheet.getRange(1, 1, data.length, data[0].length).setValues(data);
  }
}

|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

function updateStartSheetWithHistory() {
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const startSheet = spreadsheet.getSheetByName("Start");
  const today = new Date();

  // Pobierz wszystkie nicki z kolumny "A" w arkuszu "Start"
  const nicknames = startSheet.getRange("A2:A").getValues().flat().filter(n => n);

  // Iteruj od 0 do 6 dni wstecz
  for (let daysAgo = 0; daysAgo < 7; daysAgo++) {
    const targetDate = new Date(today);
    targetDate.setDate(today.getDate() - daysAgo);
    const sheetName = targetDate.toISOString().split("T")[0]; // Nazwa arkusza w formacie YYYY-MM-DD
    const targetSheet = spreadsheet.getSheetByName(sheetName);

    if (!targetSheet) {
      console.warn(`Arkusz z datą ${sheetName} nie istnieje, pomijam.`);
      continue; // Jeśli arkusz nie istnieje, przejdź do następnego dnia
    }

    // Pobierz dane z arkusza historycznego
    const historyData = targetSheet.getDataRange().getValues(); // Pobierz całą tabelę

    // Mapuj dane z arkusza historycznego: klucz = nickname, wartość = kolumna D
    const historyDataMap = new Map();
    historyData.forEach(row => {
      const nickname = row[1]; // Kolumna "B" w arkuszu (indeks 1)
      const value = row[3]; // Kolumna "D" w arkuszu (indeks 3)
      if (nickname) {
        historyDataMap.set(nickname, value);
      }
    });

    // Wypełnij odpowiednią kolumnę w arkuszu "Start"
    const output = nicknames.map(nickname => [historyDataMap.get(nickname) || ""]); // Jeśli brak wartości, zostaw pustą komórkę
    const columnIndex = 2 + daysAgo; // Kolumna "C" = 3, "D" = 4, ..., "I" = 9
    startSheet.getRange(2, columnIndex, output.length, 1).setValues(output);
  }
}
                      
                                       
To share this paste please copy this url and send to your friends
RAW Paste Data
Recent Pastes
Ta strona używa plików cookie w celu usprawnienia i ułatwienia dostępu do serwisu oraz prowadzenia danych statystycznych. Dalsze korzystanie z tej witryny oznacza akceptację tego stanu rzeczy.
Wykorzystywanie plików Cookie
Jak wyłączyć cookies?
ROZUMIEM