diff options
Diffstat (limited to 'src/main/java/com/mavlonerkinboev/animarfo/parser/Parser.java')
-rw-r--r-- | src/main/java/com/mavlonerkinboev/animarfo/parser/Parser.java | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/src/main/java/com/mavlonerkinboev/animarfo/parser/Parser.java b/src/main/java/com/mavlonerkinboev/animarfo/parser/Parser.java new file mode 100644 index 0000000..ab4f948 --- /dev/null +++ b/src/main/java/com/mavlonerkinboev/animarfo/parser/Parser.java @@ -0,0 +1,137 @@ +package com.mavlonerkinboev.animarfo.parser; + +import com.mavlonerkinboev.animarfo.anime.Anime; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.select.Elements; + +import java.io.IOException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Objects; + +public class Parser { + public static Document getPage(String url) throws IOException { + return Jsoup.parse(new URL(url), 5000); + } + + public static byte getSizeOfSearchedAnime(String page) throws IOException { + Element animeList = Parser.getPage(page).select("div[id=dle-content]").first(); + if (animeList == null) return 0; + Elements anime = animeList.select("div[class=th-item]"); + return (byte) anime.size(); + } + + public static Anime[] getAnime(String page) throws IOException { + String typeOfAnime = Anime.type; + + Element animeList = Parser.getPage(page).select("div[id=dle-content]").first(); + assert animeList != null; + Elements namesTemp = animeList.select("div[class=th-title]"); + Elements descriptionsTemp = animeList.select("div[class=th-tip-text]"); + Elements yearsTemp = null; + if (typeOfAnime != null && !typeOfAnime.equals("Ongoing")) + yearsTemp = animeList.select("div[class=th-tip-meta fx-row fx-middle fx-start]"); + Elements genresTemp= animeList.select("ul[class=th-tip-list]"); + Elements seriesTemp = null; + if (typeOfAnime != null && !typeOfAnime.equals("Films")) + seriesTemp = animeList.select("div[class=th-title]"); + Elements ratingsTemp = animeList.select("div[class=th-rating]"); + Elements imagesTemp = animeList.select("div[class=th-img img-resp-vert img-fit]"); + Elements urlsTemp = animeList.select("div[class=th-itemb]").select("a[class=th-in]"); + + byte countOfAnime = (byte) namesTemp.size(); + Anime.size = countOfAnime; + + ArrayList<String> names = new ArrayList<>(); + for (Element name : namesTemp) { + if (typeOfAnime != null && !typeOfAnime.equals("Films")) { + String text = Jsoup.parse(String.valueOf(name)).text(); + int start = 0; + int end = text.indexOf(" ["); + char[] dst = new char[end - start]; + text.getChars(start, end, dst, 0); + names.add(String.valueOf(dst)); + } else { + names.add(Jsoup.parse(String.valueOf(name)).text()); + } + } + + ArrayList<String> descriptions = new ArrayList<>(); + for (Element description : descriptionsTemp) { + descriptions.add(Jsoup.parse(String.valueOf(description)).text()); + } + + ArrayList<String> years = new ArrayList<>(); + if (typeOfAnime != null && !typeOfAnime.equals("Ongoing") && !Anime.isSearching) { + for (Element year : yearsTemp) { + Element yearTemp = year.child(0); + years.add(Jsoup.parse(String.valueOf(yearTemp)).text()); + } + } + + ArrayList<String> genres = new ArrayList<>(); + for (Element oneGenres : genresTemp) { + Element genre = oneGenres.child(2); + String text = Jsoup.parse(String.valueOf(genre)).text(); + int start = 6; + int end = text.length(); + char[] dst = new char[end - start]; + text.getChars(start, end, dst, 0); + genres.add(String.valueOf(dst)); + } + + ArrayList<String> series = new ArrayList<>(); + if (typeOfAnime != null && !typeOfAnime.equals("Films") && !Anime.isSearching) { + for (Element oneSeries : seriesTemp) { + String text = oneSeries.toString(); + int start = text.indexOf("[") + 1; + int end = text.indexOf("]"); + char[] dst = new char[end - start]; + text.getChars(start, end, dst, 0); + series.add(String.valueOf(dst)); + } + } + + ArrayList<String> ratings = new ArrayList<>(); + for (Element rating : ratingsTemp) { + ratings.add(Jsoup.parse(String.valueOf(rating)).text()); + } + + ArrayList<String> images = new ArrayList<>(); + for (Element image : imagesTemp) { + String text = Objects.requireNonNull(image.select("img").first()).dataset().get("src"); + if (!text.contains("statics")) { + images.add("https://online.anidub.com/" + text); + } else { + images.add(text); + } + } + + ArrayList<String> urls = new ArrayList<>(); + for (Element url : urlsTemp) { + String text = url.toString(); + int start = text.indexOf("href=\"") + 6; + int end = text.indexOf("\">"); + char[] dst = new char[end - start]; + text.getChars(start, end, dst, 0); + urls.add(String.valueOf(dst)); + } + + Anime[] anime = new Anime[countOfAnime]; + for (int i = 0; i < countOfAnime; i++) { + if (typeOfAnime != null && typeOfAnime.equals("Films")) { + anime[i] = new Anime(names.get(i), descriptions.get(i), genres.get(i), years.get(i), ratings.get(i), images.get(i), urls.get(i)); + } else if (typeOfAnime != null && typeOfAnime.equals("Ongoing")) { + anime[i] = new Anime(names.get(i), descriptions.get(i), genres.get(i), null, series.get(i), ratings.get(i), images.get(i), urls.get(i)); + } else if (typeOfAnime != null && typeOfAnime.equals("Serials")) { + anime[i] = new Anime(names.get(i), descriptions.get(i), genres.get(i), years.get(i), series.get(i), ratings.get(i), images.get(i), urls.get(i)); + } else if (Anime.isSearching) { + anime[i] = new Anime(names.get(i), descriptions.get(i), genres.get(i), null, null, ratings.get(i), images.get(i), urls.get(i)); + } + } + + return anime; + } +}
\ No newline at end of file |