NOBORU - Parsers

March 22, 2025 · View on GitHub

This repo is created to store parsers for NOBORU app on PS vita

Supported Parsers:

DifferentRussianEnglishJapanSpanishPortugueseFrenchTurkishItalianVietnamesePolishGermanBrazilIndonesianKoreanThaiArab
MangaDexReadMangaMangaHubSenMangaLeoMangaAnimaregiaLelScanVFMabushimajoMangaEdenTruyenQQPhoenix-ScansNineMangaNineMangaKomikidmanatoki95NiceOppaiOnma
Bato.to*МангаПоискMangaReaderManga1000InMangaUnionMangasScanFRPuzzmosNineMangaTruyengiHotWie Manga!Oremanga
LoveHug (RAW)MintMangaMangaPandaSubmangaGoldenMangasNineMangaMangaTRCartoonClub-TH
RawDevArt (RAW)SelfMangaMangaTownNineMangaBRMangasSeriManga
Desu (broken covers :C)MangaOwlHeavenMangaMangaDenizi
NineMangaReadComicsOnlineTumangaOnline
MangaOneLoveMangaKakalotMangaDoor
Манга-Тян!MangaNeloMangaLibros
MangaHubRuVLComicLeoMangas
MangaEden
NineManga
MangaSee
XoXoComics
ReadComicOnlineTo
Mangafast
Reaper Scans
ReadM (50%)
NSFWNSFWNSFWNSFWNSFWNSFWNSFWNSFWNSFWNSFWNSFWNSFWNSFWNSFWNSFWNSFW
nhentaiNude-MoonPervEdenDoujinHentaiHistoire d'HentaiPervEden
HentaiReadAllHentaiHentaiCafeVerComicsPorno.xxx
9hentaiЯой-Тян!MyHentaiGallery
Hentai SharkХентай-Тян!Hentai20

*Catalog works with option Preferred Language and deletes extra manga from it
strikethrough parsers don't work

Requirements

For better experience better to update SSL certificates see iTLS-enso by SKGleba

be careful before installing

Cloudflare-sites

Parsers in this folder will work if there is the way to bypass cloudflare with cURL or with sites that avoid cloudflare thing (that will never happen).

Manual Installation

Throw *.lua file to ux0:data/noboru/parsers/ and launch app

Creating parsers

For understanding how to create parser you can check parsers/[JP]RawDevArt.lua, there all functions described and you can see how it all works.

Tables

---@param Name string
---@param Link string
---@param ImageLink string
---@param ParserID string
---@param RawLink string
---@return Manga table
---This function gives Manga table(see info about Manga table below)
function CreateManga(Name, Link, ImageLink, ParserID, RawLink)

Manga = {
  Name,      -- string Manga name
  Link,      -- string Link to the manga format isn't important (variable for parser)
  ImageLink, -- string Link to jpeg/png/bmp cover of manga
  ParserID,  -- string Parser's Unique key (used in saves)
  RawLink,   -- string Link for App (not important)
  Data       -- table to store manga data (for parser or other) 
}

Chapter = {
  Name,       -- string Chapter name
  Link,       -- var Link to the chapter format isn't important (variable for parser)
  Pages = {}, -- table (don't touch)
  Manga       -- table to Manga
}

Parser structure

---@param name string
---@param link string
---@param language string
---@param uniqueID string
---@param version number
---@return Parser
---Creates parser
function Parser:new(name, link, language, uniqueID, version)

---@param page integer
---@param dest_table table
---Adds popular manga(see Manga Table) to `dest_table`
---If page was last sets dest_table.NoPages to `true`
function Parser:getPopularManga(page, dest_table)

---@param page integer
---@param dest_table table
---Adds latest manga(see Manga Table) to `dest_table`
---If page was last sets dest_table.NoPages to `true`
function Parser:getLatestManga(page, dest_table)

---@param page integer
---@param dest_table table
---Adds manga(see Manga Table) in alphabet order to `dest_table`
---If page was last sets dest_table.NoPages to `true`
function Parser:getAZManga(page, dest_table)

---@param page integer
---@param dest_table table
---@param letter string
---Adds manga(see Manga Table) started with selected `letter` to `dest_table`
---If page was last sets dest_table.NoPages to `true`
---ParserVar.Letters should be initialized
---example: LelScanVF.Letters = {"#", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}
function Parser:getLetterManga(page, dest_table, letter)

---@param page integer
---@param dest_table table
---@param tag string
---Adds manga(see Manga Table) in alphabet order to `dest_table`
---If page was last sets dest_table.NoPages to `true`
---ParserVar.Tags should be initialized
---example: MangaDoor.Tags = {"Acción", "Aventura", "Comedia", "Drama", "Ecchi", "Fantasía", "Gender Bender", "Harem", "Histórico", "Horror", "Josei", "Artes Marciales", "Maduro", "Mecha", "Misterio", "One Shot", "Psicológico", "Romance", "Escolar", "Ciencia Ficción", "Seinen", "Shoujo", "Shoujo Ai", "Shounen", "Shounen Ai", "Recuentos de la vida", "Deportes", "Supernatural", "Tragedia", "Yaoi", "Yuri", "Demonios", "Juegos", "Policial", "Militar", "Thriller", "Autos", "Música", "Vampiros", "Magia", "Samurai", "Boys love", "Hentai"}
function Parser:getTagManga(page, dest_table, tag)

---@param search string
---@param page integer
---@param dest_table table
---@param filter? table
---Adds searched manga(see Manga Table) with `search` string to `dest_table`
---If page was last sets dest_table.NoPages to `true`
---For `filter` example search for `/source/[RAW]RawDevArt.lua` file
function Parser:searchManga(search, page, dest_table, filter)

---@param manga table
---@param dest_table table
---Adds chapters(see Chapter Table) to dest_table in relese order (from 1st chapter to nth)
function Parser:getChapters(manga, dest_table)

---@param chapter table
---@param dest_table table
---Adds links to all pages to dest_table
function Parser:prepareChapter(chapter, dest_table)

---@param link string
---@param dest_table table
---Converts `link` in image_link(jpeg/png/bmp) and saves into dest_table.Link
function Parser:loadChapterPage(link, dest_table)