From affa90bfec4d21c27702c04c4e1d2450e9201baa Mon Sep 17 00:00:00 2001 From: mavlonerkinboev Date: Sun, 25 Jul 2021 18:15:07 +0500 Subject: seventeenth commit --- src/main/java/files/Parse.java | 221 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 221 insertions(+) create mode 100644 src/main/java/files/Parse.java (limited to 'src/main/java/files/Parse.java') diff --git a/src/main/java/files/Parse.java b/src/main/java/files/Parse.java new file mode 100644 index 0000000..031e91e --- /dev/null +++ b/src/main/java/files/Parse.java @@ -0,0 +1,221 @@ +package files; + +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; + +public class Parse { + public static Document getPage(String url) throws IOException { + return Jsoup.parse(new URL(url), 3000); + } + + public static Anime[] getAnimeAtMainMenu(String page, String typeOfAnime) throws IOException { + Element animeList = Parse.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.equals("Ongoing")) yearsTemp = animeList.select("div[class=th-tip-meta fx-row fx-middle fx-start]"); +// Elements genresTemp = animeList.select("span[class=anime-genre d-none d-sm-inline]").select("a[class=mb-2 text-link-gray text-underline]"); + Elements seriesTemp = null; + if (!typeOfAnime.equals("AnimeFilms")) { + 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(); + + ArrayList names = new ArrayList<>(); + for (Element name : namesTemp) { + if (!typeOfAnime.equals("AnimeFilms")) { + 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 descriptions = new ArrayList<>(); + for (Element description : descriptionsTemp) { + descriptions.add(Jsoup.parse(String.valueOf(description)).text()); + } + + ArrayList years = new ArrayList<>(); + if (!typeOfAnime.equals("Ongoing")) { + for (Element year : yearsTemp) { + Element yearTemp = year.child(0); + years.add(Jsoup.parse(String.valueOf(yearTemp)).text()); + } + } + + ArrayList series = new ArrayList<>(); + if (!typeOfAnime.equals("AnimeFilms")) { + for (Element oneSeries : seriesTemp) { + String text = oneSeries.toString(); + int start = text.indexOf("из ") + 3; + if (start == 2) start = text.indexOf("ИЗ ") + 3; + int end = text.indexOf("]"); + if (start == 2) { + start = text.indexOf("[") + 1; + end = text.indexOf(" по") + 1; + } + char[] dst = new char[end - start]; + text.getChars(start, end, dst, 0); + if (String.valueOf(dst).equals("ххх")) { + start = text.indexOf("[") + 1; + end = text.indexOf(" из") - 1; + } + series.add(String.valueOf(dst)); + } + } + + ArrayList ratings = new ArrayList<>(); + for (Element rating : ratingsTemp) { + ratings.add(Jsoup.parse(String.valueOf(rating)).text()); + } + + ArrayList images = new ArrayList<>(); + for (Element image : imagesTemp) { + String text = image.toString(); + int start = text.indexOf("data-src=\"") + 11; + int end = text.indexOf(".jpg") + 4; + if (end == 3) { + end = text.indexOf(".png") + 4; + } + char[] dst = new char[end - start]; + text.getChars(start, end, dst, 0); + if (!String.valueOf(dst).contains("statics")) { + images.add("https://online.anidub.com/" + String.valueOf(dst)); + } else { + images.add("h" + String.valueOf(dst)); + } + } + + ArrayList 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.equals("AnimeFilms")) { + anime[i] = new Anime(names.get(i), descriptions.get(i), null, years.get(i), ratings.get(i), images.get(i), urls.get(i)); + } else if (typeOfAnime.equals("Ongoing")) { + anime[i] = new Anime(names.get(i), descriptions.get(i), null, null, series.get(i), ratings.get(i), images.get(i), urls.get(i)); + } else { + anime[i] = new Anime(names.get(i), descriptions.get(i), null, years.get(i), series.get(i), ratings.get(i), images.get(i), urls.get(i)); + } + } + + return anime; + } + + public static Anime[] getAnimeAtSearch(String page) throws IOException { + Element animeList = Parse.getPage(page).select("div[class=animes-grid position-relative]").first(); + assert animeList != null; + Elements namesTemp = animeList.select("div[class=h5 font-weight-normal mb-2 card-title text-truncate]").select("a"); + Elements descriptionsTemp = animeList.select("div[class=anime-small-description read-more-container]"); + Elements yearsTemp = animeList.select("span[class=anime-year]").select("a"); + Elements seriesTemp = animeList.select("div[class=th-title]"); + Elements maxSeriesTemp = animeList.select("div[class=th-title]"); + Elements ratingsTemp = animeList.select("div[class=th-rating]"); + Elements imagesTemp = animeList.select("div[class=anime-grid-lazy lazy]"); + Elements urlsTemp = animeList.select("div[class=h5 font-weight-normal mb-2 card-title text-truncate]").select("a"); + + byte countOfAnime = (byte) namesTemp.size(); + + ArrayList names = new ArrayList<>(); + for (Element name : namesTemp) { + names.add(Jsoup.parse(String.valueOf(name)).text()); + } + + ArrayList descriptions = new ArrayList<>(); + for (Element description : descriptionsTemp) { + descriptions.add(Jsoup.parse(String.valueOf(description)).text()); + } + + ArrayList years = new ArrayList<>(); + for (Element year : yearsTemp) { + years.add(Jsoup.parse(String.valueOf(year)).text()); + } + + ArrayList series = new ArrayList<>(); + 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 maxSeries = new ArrayList<>(); + for (Element oneMaxSeries : maxSeriesTemp) { + String text = oneMaxSeries.toString(); + int start = text.indexOf("из ") + 1; + int end = text.indexOf("]"); + char[] dst = new char[end - start]; + text.getChars(start, end, dst, 0); + maxSeries.add(String.valueOf(dst)); + } + + ArrayList ratings = new ArrayList<>(); + for (Element rating : ratingsTemp) { + ratings.add(Jsoup.parse(String.valueOf(rating)).text()); + } + + ArrayList images = new ArrayList<>(); + for (Element image : imagesTemp) { + String text = image.toString(); + int start = text.indexOf("data-original=") + 15; + int end = text.indexOf(">") - 1; + char[] dst = new char[end - start]; + text.getChars(start, end, dst, 0); + images.add(String.valueOf(dst)); + } + + ArrayList urls = new ArrayList<>(); + for (Element url : urlsTemp) { + String text = url.toString(); + int start = text.indexOf("=\"") + 2; + int end = text.indexOf("\" title") - 1; + 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++) { + anime[i] = new Anime(names.get(i), null, null, years.get(i), series.get(i), ratings.get(i), images.get(i), urls.get(i)); + } + + return anime; + } + + public static byte getAnimeAtSearchSize(String page) throws IOException { + Element animeList = Parse.getPage(page).select("div[class=animes-grid position-relative]").first(); + assert animeList != null; + + if (animeList == null) return 0; + + Elements namesTemp = animeList.select("div[class=h5 font-weight-normal mb-2 card-title text-truncate]").select("a"); + byte countOfAnime = (byte) namesTemp.size(); + return countOfAnime; + } +} \ No newline at end of file -- cgit v1.2.3