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; } }