Options
All
  • Public
  • Public/Protected
  • All
Menu

mangadex-api - v5.0.1

Mangadex-api

NPM Version npm downloads License codecov

This is Mangadex website api wrapper.

WIP on V5 version

Installation

npm i mangadex-api

# or

yarn add mangadex-api

Example

// In V5 Mangadex switched id type from number to string.
// So if you need to convert it, call the convertLegacyId method.
// Soon will be added to usual methods, maybe.

Mangadex.convertLegacyId([12], 'group')
  .then((result) => {
    if (result.result === 'error') {
      console.log(
        `Got error on convertLegacyId request! ${result.errors
          .map((err) => err.title)
          .join(', ')}`
      )
      return
    }

    const { newId } = result.data.attributes

    console.log(`New group id: ${newId}`)
  })

Mangadex.manga
  .getManga(
    'c26269c7-0f5d-4966-8cd5-b79acb86fb7a',
    {
      // will fetch additionally scanlation_group, artist, author attributes
      withRelationShips: true
    }
  )
  .then(({ result, data, errors }) => {
    if (result === 'error') {
      // oh no! something went wrong!
      // here we can handle errors array.
    }

    const { title, originalLanguage } = data.attributes
    console.log(`Manga ${title.en} published in ${originalLanguage}`)

    Mangadex.manga
      .getMangaFeed('c26269c7-0f5d-4966-8cd5-b79acb86fb7a', {
        limit: 10
      })
      .then(({ results: chapters }) => {
        console.log(`Manga ${title.en} has ${chapters.length} chapters`)
        const { volume, chapter } = chapters[0].data.attributes
        console.log(`Latest chapter: Vol ${volume} Ch ${chapter}`)
      })
  })

Mangadex.chapter.getChapter(8857).then((chapter) => {
  if (chapter.result === 'error') {
    console.log(
      `Got errors on chapter request! ${chapter.errors
        .map((err) => err.title)
        .join(', ')}`
    )
    return
  }
  console.log(
    `Chapter title is "${chapter.data.attributes.title}" and it is ${chapter.data.attributes.chapter} chapter from ${chapter.volume} volume.`
  )
})

// currently requires authorization
Mangadex.manga.search({ title: 'senko' }).then(({ total }) => {
  console.log(`Found ${total} titles.`)
})
// Search with NSFW results
Mangadex.manga
  .search({
    title: 'gotoubun',
    contentRating: ['pornographic']
  })
  .then((result) => {
    console.log(`Found ${result.results.length} hentai manga (☞ ͡ ͡° ͜ ʖ ͡ ͡°)☞`)
  })

Mangadex.group.getGroup(12).then((group) => {
  if (group.result === 'error') {
    console.log(
      `Got errors from group request! ${group.errors
        .map((err) => err.title)
        .join(', ')}`
    )
    return
  }
  const { name, members } = group.data.attributes
  console.log(`Group ${name} has ${members} members`)
})

Authorization example

const { Mangadex } = require('mangadex-api')

const client = new Mangadex()

const loginResult = await client.auth.login('username', 'password')

if (loginResult.result === 'error') {
  // oh no! it's login error!
}

const result = await client.manga.search('To Be Winner')

console.log(result)

Cached session example

// first you must save your session somewhere

const loginResult = await client.auth.login('username', 'password')

if (loginResult.result === 'error') {
  // oh no! it's login error!
}

await client.agent.saveSession('/path/to/session'))

// now we can use it

await client.agent.loginWithSession('/path/to/session')

const me = await client.user.getMe()

console.log(me)

API

API section is available on the website.

Additional resources

  • mangadex-heroku is a GraphQL public endpoint. (not updated to V5 yet)
    Supports caching (in memory) and all public MD-API's that doesn't require authorization. (playground)
  • Example webapp that uses mangadex-heroku for API calls. (not updated to V5 yet)

Contact

My telegram and a group where you can ask your questions or suggest something.

Generated using TypeDoc