91 lines
3.5 KiB
JavaScript
91 lines
3.5 KiB
JavaScript
// main.js
|
|
|
|
const userAgents = [
|
|
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.35",
|
|
// "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.35",
|
|
// "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.35",
|
|
// "Mozilla/5.0 (Windows NT 6.1; rv:109.0) Gecko/20100101 Firefox/113.0",
|
|
// "Mozilla/5.0 (Android 12; Mobile; rv:109.0) Gecko/113.0 Firefox/113.0",
|
|
// "mozilla/5.0 (macintosh; intel mac os x 10.15; rv:109.0) gecko/20100101 firefox/113.0",
|
|
];
|
|
|
|
function getRandomUserAgent() {
|
|
return userAgents[Math.floor(Math.random() * userAgents.length)];
|
|
}
|
|
|
|
function makeRequest() {
|
|
var username = document.getElementById('username').value;
|
|
var randomUserAgent = getRandomUserAgent();
|
|
|
|
var url = `https://api.chess.com/pub/player/${username}/games/archives?callback=jsonpCallback&user_agent=${encodeURIComponent(randomUserAgent)}`;
|
|
|
|
var script = document.createElement('script');
|
|
script.src = url;
|
|
|
|
window.jsonpCallback = function(data) {
|
|
// Process the URLs in the archives array
|
|
if (data && data.archives && Array.isArray(data.archives)) {
|
|
const promises = data.archives.map(function(archiveUrl) {
|
|
// Append '/.pgn' to each individual URL
|
|
const url = archiveUrl;
|
|
return makeAsyncRequest(url, getRandomUserAgent());
|
|
});
|
|
|
|
// Use Promise.all to wait for all requests to complete
|
|
Promise.all(promises)
|
|
.then(function(results) {
|
|
// Concatenate the 'pgn' values
|
|
const concatenatedPgn = results.flatMap(data => data.games.map(game => game.pgn)).join('\n');
|
|
|
|
// Use the concatenatedPgn variable as needed
|
|
console.log("Concatenated PGN:", concatenatedPgn);
|
|
})
|
|
.catch(function(error) {
|
|
console.error("Error in one or more requests:", error);
|
|
});
|
|
}
|
|
|
|
// Clean up the script element
|
|
document.head.removeChild(script);
|
|
};
|
|
|
|
document.head.appendChild(script);
|
|
}
|
|
|
|
function makeAsyncRequest(url, userAgent) {
|
|
return new Promise(function (resolve, reject) {
|
|
// Generate a unique callback function name
|
|
const callbackName = `jsonpCallback_${Date.now()}_${Math.floor(Math.random() * 1000)}`;
|
|
|
|
// Create a script element
|
|
const script = document.createElement('script');
|
|
|
|
// Define the callback function
|
|
window[callbackName] = function (data) {
|
|
// Clean up the script and the callback function
|
|
document.head.removeChild(script);
|
|
delete window[callbackName];
|
|
|
|
// Resolve the promise with the response data
|
|
resolve(data);
|
|
};
|
|
|
|
// Construct the URL with the callback parameter
|
|
const callbackUrl = `${url}?callback=${callbackName}&user_agent=${encodeURIComponent(userAgent)}`;
|
|
script.src = callbackUrl;
|
|
|
|
// Append the script element to the document
|
|
document.head.appendChild(script);
|
|
|
|
// Handle errors
|
|
script.onerror = function (error) {
|
|
// Clean up the script and the callback function
|
|
document.head.removeChild(script);
|
|
delete window[callbackName];
|
|
|
|
// Reject the promise with the error
|
|
reject(error);
|
|
};
|
|
});
|
|
}
|