MangaDex 完整 API
一个非官方的 MangaDex API,基于官方 JSON API 构建。支持 Node.js 和浏览器。
npm install mangadex-full-api@6.0.0
// 示例
Manga.search({
title: 'One Piece',
limit: Infinity, // API 每次请求最多 100 个,但此函数接受更多
hasAvailableChapters: true,
}).then((mangas) => {
console.log('有', mangas.length, '部标题中包含 One Piece 的漫画!');
mangas.forEach((manga) => {
console.log(manga.localTitle);
});
});
教程
在文档网站查看更多信息。
认证
要使用个人账户登录,你必须拥有客户端 ID 和密钥。
await loginPersonal({
clientId: 'id',
clientSecret: 'secret',
password: 'password',
username: 'username',
});
页面图片
// 获取带有章节的漫画
const manga = await Manga.getByQuery({ order: { followedCount: 'desc' }, availableTranslatedLanguage: ['en'] });
if (!manga) throw new Error('未找到漫画!');
// 这将获取该漫画的第一个英文章节
const chapters = await manga.getFeed({ translatedLanguage: ['en'], limit: 1 });
const chapter = chapters[0];
// 获取此章节的图片 URL
const pages = await chapter.getReadablePages();
console.log(pages);
关系
MangaDex 会为相关数据对象返回关系对象,而不是每个对象的全部内容。
例如,在请求漫画时,作者和画师将作为 Relationship<Author>
返回。要请求作者数据,请使用 resolve
方法。
此外,你可以在 includes
参数中提供 'author'
,以便在漫画请求的同时包含作者数据。你仍然需要调用 resolve
方法,但 promise 将立即返回。
const manga = await Manga.getRandom();
const firstAuthor = await manga.authors[0].resolve();
console.log('第一位作者是', firstAuthor.name);
// 使用 resolveArray 可以更高效地解析关系数组
const allAuthors = await resolveArray(manga.authors);
console.log('所有作者是', allAuthors.map((a) => a.name).join(', '));
// 因为包含了作者,所以作者关系被缓存
const otherManga = await Manga.getByQuery({ includes: ['author'] });
if (otherManga) {
console.log('这部漫画的作者已包含并缓存:', otherManga.authors[0].cached);
const author = await otherManga.authors[0].resolve();
console.log('作者是', author.name);
}
查找漫画
查找漫画最常见的方法是使用 search
方法。但还有其他几种方法:
// 基本搜索
Manga.search({
title: 'One Piece',
limit: Infinity, // API 每次请求最多 100 个,但此函数接受更多
hasAvailableChapters: true,
}).then((mangas) => {
console.log('有', mangas.length, '部标题中包含 One Piece 的漫画!');
mangas.forEach((manga) => {
console.log(manga.localTitle);
});
});
// 这将返回搜索结果中的第一个
Manga.getByQuery({ title: 'One Piece' }).then((manga) => {
if (manga) console.log('找到一部 One Piece 漫画,ID 为', manga.id);
else console.log('未找到 One Piece 漫画');
});
// 你可以获取一部随机漫画
Manga.getRandom().then((manga) => console.log('随机漫画:', manga.localTitle));
// 你可以直接通过 UUID 获取漫画
Manga.get('manga-uuid-here').then((manga) => console.log(manga));
上传章节
// 使用你的凭证登录
await loginPersonal({
clientId: 'id',
clientSecret: 'secret',
password: 'password',
username: 'username',
});
// 为漫画创建新的章节上传会话
const session = await UploadSession.begin('manga-id', ['group-id']);
// 将页面作为 Blob 上传
await session.uploadPages([
new Blob([fs.readFileSync('path/to/page1.jpg')], new Blob([fs.readFileSync('path/to/page2.jpg')])),
]);
// 提交章节
await session.commit({
chapter: '1',
title: '一个新章节!',
translatedLanguage: 'en',
volume: '1',
});