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 = /
([\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 = /([\s\S]*?)<\/tr>/g;
const cellRegex = /([\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);
}
}