chesstok-lookup/gpt/main.js
2023-11-25 11:44:31 -07:00

95 lines
2.8 KiB
JavaScript

// main.js
function jsonp(url, callbackName) {
return new Promise((resolve) => {
const script = document.createElement('script');
script.src = `${url}&callback=${callbackName}`;
document.body.appendChild(script);
window[callbackName] = (data) => {
delete window[callbackName];
document.body.removeChild(script);
resolve(data);
};
});
}
async function getGames(username, userAgents) {
const gamesUrl = `https://api.chess.com/pub/player/${username}/games/archives`;
try {
const response = await jsonp(gamesUrl);
// Extracting URLs
const gameUrls = response.archives.map(url => `${url}/.pgn`);
return gameUrls;
} catch (error) {
console.error('Error fetching game URLs:', error);
throw error;
}
}
async function fetchGames(url, userAgent) {
const callbackName = `jsonp_callback_${Math.round(100000 * Math.random())}`;
try {
const response = await jsonp(url, callbackName);
// Process the JSONP response as needed
return response;
} catch (error) {
console.error(`Error fetching game from ${url}:`, error);
throw error;
}
}
function concatenateGames(gameResults) {
// Customize how you want to concatenate the games
return gameResults.join('\n\n');
}
async function downloadGames() {
const username = document.getElementById('username').value;
// Function 1: Get game URLs
const allUserAgents = await loadUserAgents();
const urls = await getGames(username, allUserAgents);
// Function 2: Asynchronously fetch games
const gamePromises = urls.map(async (url, index) => {
const userAgent = allUserAgents[index % allUserAgents.length];
return await fetchGames(url, userAgent);
});
try {
// Function 3: Concatenate game results
const gameResults = await Promise.all(gamePromises);
const concatenatedGames = concatenateGames(gameResults);
// Function 4: Trigger download
download(concatenatedGames, 'chess_games.pgn', 'application/pgn');
} catch (error) {
console.error('Error fetching games:', error);
}
}
function download(content, fileName, contentType) {
const a = document.createElement('a');
const file = new Blob([content], { type: contentType });
a.href = URL.createObjectURL(file);
a.download = fileName;
a.click();
}
async function loadUserAgents() {
try {
const userAgentsModule = await import('./userAgents.js');
return userAgentsModule.default;
} catch (error) {
console.error('Error loading user agents:', error);
throw error;
}
}
document.addEventListener('DOMContentLoaded', function () {
// Your initialization logic here...
});