Package DiegoBrignoli/mangaworld
implements many API that allow web scraping from the site Mangaworld.
It implements:
- Getting information of manga and chapters.
- Getting page url of chapters.
- Getting trending manga and new releases.
- Searching manga by creating queries and querying the site.
- Downloading the chapters.
With a correctly configured Go toolchain:
go get -u github.com/DiegoBrignoli/mangaworld
Let's start by creating a manga object and a chapter object.
func main() {
//Creating manga object
manga, err := mangaworld.NewManga("https://www.mangaworld.io/manga/395/citrus")
if err != nil {
log.Fatalln(err)
}
//Creating chapter object
chapter, err := mangaworld.NewChapter("https://www.mangaworld.io/manga/1876/citrus-1/read/5fbbfab01c9bb544acdbbac0/1")
if err != nil {
log.Fatalln(err)
}
}
We have seen how to create Manga
type and Chapter
type objects. There are other types of objects in the module that can be created in the same way. (See documentation)
Now let's see how to fill objects by invoking methods and getting manga or chapter data.
//Create object
manga, _ := mangaworld.NewManga("https://www.mangaworld.io/manga/395/citrus")
//Call getTitle method to get the title of manga
err = manga.GetTitle()
if err != nil {
t.Error("Error to get title")
}
fmt.Println("TITLE:", manga.Title)
fmt.Println("OBJECT:", manga)
Queries are useful for searching for manga using different filters. Now let's see how they are created and how to apply some filters.
func main() {
//Create query
q := mangaworld.NewQuery()
//Serch by name
q.SetMangaName("yagate kimi ni naru")
}
You can also apply multiple filters at the same time.
func main() {
//Create query
q := mangaworld.NewQuery()
//Name filter
q.SetMangaName("citrus")
//Genres filter
q.SetGenres([]mangaworld.Genre{
mangaworld.Yuri,
mangaworld.Shoujo_ai,
})
//Manga types filter
q.SetMangaTypes([]mangaworld.Type{
mangaworld.Manga_type
})
//Status fileter
q.SetStatus([]State{
mangaworld.Finish
})
//Year filter
q.SetYears([]string{
"2012"
})
}
To start the query search
func main() {
//Create query
q := mangaworld.NewQuery()
//Serch by name
q.SetMangaName("yagate kimi ni naru")
//Do the query
mangas, err := q.Do
if err != nil {
log.Fatalln(err)
}
for _, manga := range mangas {
fmt.Println(manga.Url)
}
}
Another of the features made available by this module is to be able to get the latest chapters released. Let's see how to do it.
func main() {
//Get last 2 new chapters
chaptersNew, err := mangaworld.ChaptersNew(2)
if err != nil {
log.Fatalln(err)
}
for _, chapterNew := range chaptersNew {
err := chapterNew.GetChapter()
if err != nil {
log.Fatalln(err)
}
err = chapterNew.GetManga()
if err != nil {
log.Fatalln(err)
}
}
}
We come to the part that will certainly interest you the most: downloading chapters.
func main() {
//Create chapter
chapter, err := mangaworld.NewChapter("https://www.mangaworld.cc/manga/1876/citrus-1/read/5fbbfab01c9bb544acdbbaac/1")
if err != nil {
t.Error(err)
}
//Download chapter in /home/<user>/new
err = c.Download("/home/<user>/new")
if err != nil {
log.Fatalln(err)
}
}
MIT licensed. See the LICENSE file for details.