# Manga Parser

[![npm](https://img.shields.io/npm/v/manga-parser.svg?style=flat-square)](https://www.npmjs.com/package/manga-parser) [![Travis](https://img.shields.io/travis/na-ji/node-manga-parser.svg?style=flat-square)](https://travis-ci.org/na-ji/node-manga-parser) [![Codecov](https://img.shields.io/codecov/c/github/na-ji/node-manga-parser.svg?style=flat-square)](https://codecov.io/gh/na-ji/node-manga-parser) [![Gemnasium](https://img.shields.io/gemnasium/na-ji/node-manga-parser.svg?style=flat-square)](https://gemnasium.com/github.com/na-ji/node-manga-parser) [![styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)

Manga Parser is a parser for online manga sources. It provides a simple API to extract data about manga hosted and their chapters. More sources are going to be added.

The library is based on [Tachiyomi](https://github.com/inorichi/tachiyomi) for Android.

## Supported sources

-   [ReadMangaToday](http://www.readmanga.today/)
-   [Mangafox](http://mangafox.me/)
-   [Mangahere](http://www.mangahere.co/)

## Contributing

All contributions are welcome. If you do not know how to code, but still want to see another source to be added, just open an issue.

## Documentation

To use the `Parser`, just import it in your project

```javascript
// ES6 syntax
import { Parser } from 'manga-parser';
// CommonJS syntax
const Parser = require('manga-parser').Parser;
```

Most of the `Parser` methods require the `catalogName`, you can find this name on each [catalog class](https://github.com/na-ji/node-manga-parser/tree/master/src/sites).

### Usage Examples

```javascript
import { Parser } from 'manga-parser';

Parser.getPopularMangaList('readmangatoday').then(paginator => {
  console.log(paginator);
  let manga = paginator.mangas[0];

  return Parser.getMangaDetail('readmangatoday', manga);
}).then(manga => {
  console.log(manga);

  return Parser.getChapterList('readmangatoday', manga);
}).then(chapters => {
  console.log(chapters);
  let chapter = chapters[0];

  return Parser.getPageList('readmangatoday', chapter);
}).then(pages => {
  console.log(pages);
  let page = pages[0];

  return Parser.getImageURL('readmangatoday', page);
}).then(imageURL => {
  console.log(imageURL);
});
```

```javascript
import { Parser } from 'manga-parser';

Parser.searchManga('readmangatoday', 'naruto').then(paginator => {
  console.log(paginator);
});
```

### Parser Class

<!-- Generated by documentation.js. Update this documentation by updating the source code. -->

#### getPopularMangaList

Fetch the popular mangas on the catalog

**Parameters**

-   `catalogName` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** 
-   `page` **[number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** Page to fetch (optional, default `null`)

Returns **[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)&lt;{mangas: [Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)&lt;Manga>, hasNext: [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean), nextUrl: [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String), nextPage: [number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)}>** 

#### getLatestUpdatesList

Fetch the latest updated manga on the catalog

**Parameters**

-   `catalogName` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** 
-   `page` **[number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)** Page to fetch (optional, default `null`)

Returns **[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)&lt;{mangas: [Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)&lt;Manga>, hasNext: [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean), nextUrl: [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String), nextPage: [number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)}>** 

#### searchManga

Search for Manga from a catalog

**Parameters**

-   `catalogName` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** 
-   `query` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** 
-   `page` **[number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)?**  (optional, default `null`)

Returns **[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)&lt;{mangas: [Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)&lt;Manga>, hasNext: [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean), nextUrl: [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)?, nextPage: [number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number)?}>** 

#### getMangaDetail

Fetch every information for a Manga

**Parameters**

-   `catalogName` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** 
-   `manga` **Manga** 

Returns **[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)&lt;Manga>** 

#### getChapterList

Fetch the list of chapters for Manga

**Parameters**

-   `catalogName` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** 
-   `manga` **Manga** 

Returns **[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)&lt;[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)&lt;Chapter>>** 

#### getChapterListByVolumes

Fetch the list of chapters for a Manga sorted by volumes

**Parameters**

-   `catalogName` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** 
-   `manga` **Manga** 

Returns **[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)&lt;{}>** 

#### getPageList

Fetch every pages URL for a manga

**Parameters**

-   `catalogName` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** 
-   `chapter` **Chapter** 

Returns **[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)&lt;[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)&lt;[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)>>** 

#### getImageURL

Fetch the image URL from a page URL

**Parameters**

-   `catalogName` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** 
-   `pageURL` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** 

Returns **[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)&lt;[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)>** 

#### getCatalogs

Return the list of catalogs

Returns **{name: AbstractCatalog}** 

#### getCatalog

Return a catalog

**Parameters**

-   `catalogName` **[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String)** 

Returns **AbstractCatalog** 
