Compare commits

..

No commits in common. "ccec6eafca26f4608ca93da9d24eab472d393713" and "9c41e0795843cbb4160180737787b6a4f4888c42" have entirely different histories.

3 changed files with 1 additions and 138 deletions

View File

@ -17,7 +17,6 @@ import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Comparator;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@ -100,10 +99,7 @@ public class MangaChapterService {
public MangaChapterImagesDTO getMangaChapterImages(Long chapterId) {
var chapter = getMangaChapterThrowIfNotFound(chapterId);
var chapters =
chapter.getMangaProvider().getMangaChapters().stream()
.sorted(Comparator.comparing(MangaChapter::getId))
.toList();
var chapters = chapter.getMangaProvider().getMangaChapters();
Long prevId = null;
Long nextId = null;

View File

@ -4,5 +4,4 @@ public class ContentProviders {
public static final String MANGA_LIVRE = "Manga Livre";
public static final String MANGA_LIVRE_BLOG = "Manga Livre Blog";
public static final String MANGA_DEX = "MangaDex";
public static final String PINK_ROSA_SCAN = "Pink Rosa Scan";
}

View File

@ -1,132 +0,0 @@
package com.magamochi.mangamochi.service.providers.impl;
import static java.util.Objects.isNull;
import static org.apache.commons.lang3.StringUtils.isBlank;
import com.magamochi.mangamochi.model.dto.ContentProviderMangaChapterResponseDTO;
import com.magamochi.mangamochi.model.dto.ContentProviderMangaInfoResponseDTO;
import com.magamochi.mangamochi.model.entity.MangaProvider;
import com.magamochi.mangamochi.model.enumeration.MangaStatus;
import com.magamochi.mangamochi.service.WebScrapperClientProxyService;
import com.magamochi.mangamochi.service.providers.ContentProvider;
import com.magamochi.mangamochi.service.providers.ContentProviders;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Service;
@Log4j2
@Service(ContentProviders.PINK_ROSA_SCAN)
@RequiredArgsConstructor
public class PinkRosaScanProvider implements ContentProvider {
private final WebScrapperClientProxyService webScrapperClientProxyService;
@Override
public List<ContentProviderMangaInfoResponseDTO> getAvailableMangas() {
try {
var document =
webScrapperClientProxyService.scrapeToJsoupDocument(
"https://scanpinkrosa.blogspot.com/search/label/Series?max-results=1000");
var mangaElements =
document.getElementsByClass("grid relative sm:gap-3.5 gap-[2.5vw] w-full h-fit");
return mangaElements.stream()
.map(
element -> {
var linkElement =
element
.getElementsByClass(
"flex sm:gap-2.5 gap-[2vw] justify-start items-start sm:-mt-0.5 -mt-[0.5vw] w-full")
.getFirst()
.getElementsByTag("div")
.getFirst()
.getElementsByTag("a")
.getFirst();
var url = linkElement.attr("href");
var textElement = linkElement.getElementsByTag("h3");
var title = textElement.text().trim();
return new ContentProviderMangaInfoResponseDTO(
title, url, null, MangaStatus.UNKNOWN);
})
.toList();
} catch (NoSuchElementException | IOException e) {
log.error("Error parsing mangas from Pink Rosa Scan", e);
return List.of();
}
}
@Override
public List<ContentProviderMangaChapterResponseDTO> getAvailableChapters(MangaProvider provider) {
try {
var document = webScrapperClientProxyService.scrapeToJsoupDocument(provider.getUrl());
var chapterList = document.getElementById("chapter-list");
if (isNull(chapterList)) {
throw new NoSuchElementException();
}
return chapterList.getElementsByTag("a").stream()
.map(
chapterItemElement -> {
var chapterTitleElement =
chapterItemElement
.getElementsByClass("flex items-center sm:gap-4 gap-[4vw]")
.getFirst()
.getElementsByClass("grid h-fit ")
.getFirst()
.getElementsByClass("flex gap-1 justify-start items-center overflow-hidden")
.getFirst()
.getElementsByClass("text-sm truncate")
.getFirst();
return new ContentProviderMangaChapterResponseDTO(
chapterTitleElement.text().trim(), chapterItemElement.attr("href"), null, null);
})
.toList();
} catch (NoSuchElementException | IOException e) {
log.error("Error parsing mangas from Pink Rosa Scan", e);
return List.of();
}
}
@Override
public Map<Integer, String> getChapterImagesUrls(String chapterUrl) {
try {
var document = webScrapperClientProxyService.scrapeToJsoupDocument(chapterUrl);
var chapterImagesContainer = document.getElementById("pages");
if (isNull(chapterImagesContainer)) {
throw new NoSuchElementException();
}
var chapterImagesElements = chapterImagesContainer.getElementsByTag("img");
var imageUrls =
chapterImagesElements.stream()
.map(
chapterImagesElement -> {
if (!isBlank(chapterImagesElement.attr("data-src"))) {
return chapterImagesElement.attr("data-src");
}
throw new NoSuchElementException();
})
.toList();
return IntStream.range(0, imageUrls.size())
.boxed()
.collect(
Collectors.toMap(
i -> i, imageUrls::get, (existing, replacement) -> existing, LinkedHashMap::new));
} catch (NoSuchElementException | IOException e) {
log.error("Error parsing mangas from Pink Rosa Scan", e);
return Map.of();
}
}
}