diff options
| author | mavlonerkinboev <mavlonbek.ibragimov007@gmail.com> | 2021-08-05 19:07:22 +0500 | 
|---|---|---|
| committer | mavlonerkinboev <mavlonbek.ibragimov007@gmail.com> | 2021-08-05 19:07:22 +0500 | 
| commit | adcf7dc85bd09a704e2e751256be0efa80a06760 (patch) | |
| tree | ac8b7d472b68180119b60ed42b7edacc6078ac2a /src/main/java/com/mavlonerkinboev/animarfo/parser | |
| parent | 177553c320a8572206bd28dcb1a718b9b1192b85 (diff) | |
changed directory
Diffstat (limited to 'src/main/java/com/mavlonerkinboev/animarfo/parser')
| -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 |