async function GetLibrary(readingStatus) {
const baseUrl = 'https://api.mangadex.org';
const authToken = JSON.parse(localStorage.getItem('oidc.user:https://auth.mangadex.org/realms/mangadex:mangadex-frontend-stable')).access_token;
let fetchUrl = `${baseUrl}/manga/status`;
if(readingStatus !== '')
fetchUrl = `${fetchUrl}?status=${readingStatus}`
let response = await fetch(fetchUrl, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${authToken}`,
},
});
return await response.json();
}
async function GetAttributes(titleId) {
const baseUrl = 'https://api.mangadex.org';
let response = await fetch(`${baseUrl}/manga/${titleId}`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
});
const result = await response.json();
return result.data.attributes;
}
function Sleep(milliseconds) {
return new Promise((resolve) => setTimeout(resolve, milliseconds))
}
function MakeXmlData(libData) {
let output = "<?xml version='1.0' encoding='UTF-8' ?>";
output += "<myanimelist>";
for(const row of libData) {
output += "<manga>";
for (const key of Object.keys(row)) {
output += "<" + key + ">";
output += row[key];
output += "</" + key + ">";
}
output += "</manga>";
}
output += "</myanimelist>";
return output;
}
function DownloadXml(xmlData) {
const blob = new Blob([xmlData], {type:'text/zml'});
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'library.xml';
a.click();
}
function ConvertStatus(mdStatus) {
return {
reading: 'Reading',
completed: 'Completed',
on_hold: 'On hold',
plan_to_read: 'Plan to Read',
dropped: 'Dropped',
re_reading: 'Re-reading'
}[mdStatus];
}
function Sanitize(str) {
if (!str) {
return str;
}
return str.replace( '&', '&' ).replace( '<', '<').replace( '>', '>');
}
(async () => {
const readingStatus = ''; // empty for all titles
const result = await GetLibrary(readingStatus);
const libInfo = [];
for(const id in result.statuses) {
const attributes = await GetAttributes(id);
const titles = attributes.title;
let title = Object.hasOwn(titles, 'en') ? titles['en'] : titles[Object.keys(titles)[0]];
title = Sanitize(title);
if (!attributes.links?.mal && !attributes.links?.al) {
continue;
}
libInfo.push({
manga_mangadb_id: attributes.links?.mal,
manga_anilist_id: attributes.links?.al,
my_status: ConvertStatus(result.statuses[id]),
manga_title: title,
my_read_volumes: 0,
my_read_chapters: 0,
my_start_date: "0000-00-00",
my_finish_date: "0000-00-00",
my_score: 0
});
await Sleep(1000);
}
console.log(libInfo);
DownloadXml(MakeXmlData(libInfo));
})();