User:Polygnotus/Scripts/WebArchives.js: Difference between revisions

Content deleted Content added
No edit summary
No edit summary
Line 54:
checkUrl: (url) => `https://archive.ph/${encodeURIComponent(url)}`,
searchUrl: (url) => `https://archive.ph/${encodeURIComponent(url)}`,
apiCheck: falsetrue,
notFoundStrings: ['No results']
},
{
Line 67 ⟶ 68:
searchUrl: (url) => `https://web.archive.org/web/*/${encodeURIComponent(url)}`,
apiUrl: (url) => `https://archive.org/wayback/available?url=${encodeURIComponent('https://' + url)}`,
apiCheck: true,
notFoundStrings: ['Wayback Machine has not archived that URL.']
},
{
Line 73 ⟶ 75:
checkUrl: (url) => `https://arquivo.pt/url/search?q=${encodeURIComponent(url)}`,
searchUrl: (url) => `https://arquivo.pt/url/search?q=${encodeURIComponent(url)}`,
apiCheck: falsetrue,
notFoundStrings: ['Não foram encontrados resultados']
},
{
Line 79 ⟶ 82:
checkUrl: (url) => `https://megalodon.jp/pc/main?url=${encodeURIComponent('https://' + url)}`,
searchUrl: (url) => `https://megalodon.jp/pc/main?url=${encodeURIComponent('https://' + url)}`,
apiCheck: falsetrue,
notFoundStrings: ['見つかりませんでした']
}
];
Line 93 ⟶ 97:
return;
}
console.log(`[Archive Checker] Starting check for URL: ${normalizedUrl}`);
const results = [];
for (const service of archiveServices) {
console.log(`[Archive Checker] Checking ${service.name}...`);
const result = {
name: service.name,
Line 104 ⟶ 112:
};
if (service.apiCheck && service.apiUrl) {
try {
//let For Wayback Machine, we can check the APIcheckUrl;
const response = await fetch(service.apiUrl(normalizedUrl));
constif data(service.name === await'Wayback responseMachine' && service.json(apiUrl); {
result.available = data.archived_snapshots && data.archived_snapshots.closest;// Use the dedicated API for Wayback Machine
if (result checkUrl = service.availableapiUrl(normalizedUrl) {;
resultconsole.urllog(`[Archive =Checker] data${service.archived_snapshots.closest.urlname} API URL: ${checkUrl}`);
const response = await fetch(checkUrl);
console.log(`[Archive Checker] ${service.name} API Response status: ${response.status}`);
const data = await response.json();
console.log(`[Archive Checker] ${service.name} API Response data:`, data);
result.available = data.archived_snapshots && data.archived_snapshots.closest;
if (result.available) {
result.url = data.archived_snapshots.closest.url;
console.log(`[Archive Checker] ${service.name} - Archive found: ${result.url}`);
} else {
console.log(`[Archive Checker] ${service.name} - No archive found`);
}
} else {
// For other services, fetch the page content and check for "not found" strings
checkUrl = service.checkUrl(normalizedUrl);
console.log(`[Archive Checker] ${service.name} Check URL: ${checkUrl}`);
const response = await fetch(checkUrl, {
mode: 'cors',
credentials: 'omit'
});
console.log(`[Archive Checker] ${service.name} Response status: ${response.status}`);
if (response.ok) {
const text = await response.text();
console.log(`[Archive Checker] ${service.name} Response length: ${text.length} characters`);
// Check if any "not found" strings are present
const notFound = service.notFoundStrings &&
service.notFoundStrings.some(str => text.includes(str));
if (notFound) {
result.available = false;
console.log(`[Archive Checker] ${service.name} - Not found (detected: "${service.notFoundStrings.find(str => text.includes(str))}")`);
} else {
result.available = true;
console.log(`[Archive Checker] ${service.name} - Archive appears to be available`);
}
} else {
result.available = null;
result.error = `HTTP ${response.status}`;
console.log(`[Archive Checker] ${service.name} - HTTP error: ${response.status}`);
}
}
} catch (error) {
resultconsole.error(`[Archive =Checker] 'API${service.name} check- failed'Error:`, error);
result.error = error.message;
result.available = null;
}
} else {
console.log(`[Archive Checker] ${service.name} - API check disabled, will show manual link`);
}
Line 122 ⟶ 178:
}
console.log(`[Archive Checker] Check completed. Results:`, results);
displayResults(results, normalizedUrl);
}