diff options
-rw-r--r-- | src/main/java/files/Anime.java | 31 | ||||
-rw-r--r-- | src/main/java/files/Bot.java | 10 | ||||
-rw-r--r-- | src/main/java/files/Parser.java | 102 |
3 files changed, 113 insertions, 30 deletions
diff --git a/src/main/java/files/Anime.java b/src/main/java/files/Anime.java index 4a8e79f..1b039ed 100644 --- a/src/main/java/files/Anime.java +++ b/src/main/java/files/Anime.java @@ -1,11 +1,18 @@ package files; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Element; + +import java.io.IOException; + public class Anime { private final String name; - private final String description; + private String description; private final String[] genres; private final String year; - private final String image; + private final String series; + private final String rating; + public final String image; private final String url; private static Anime[] list; private static byte indexOfAnime = 0; @@ -13,19 +20,33 @@ public class Anime { private static byte searchedAnimeSize; private static boolean isSearchingAnAnime; - public Anime(String name, String description, String[] genres, String year, String image, String url) { + public Anime(String name, String description, String[] genres, String year, String series, String rating, String image, String url) { this.name = name; this.description = description; this.genres = genres; this.year = year; + this.series = series; + this.rating = rating; this.image = image; this.url = url; } + public String getDescription() throws IOException { + if (this.description == null) { + parseDescription(); + } + return description; + } + + public void parseDescription() throws IOException { + Element descriptionTemp = Parser.getPage(this.url).select("div[class=fdesc clr full-text clearfix]").first(); + this.description = Jsoup.parse(String.valueOf(descriptionTemp)).text(); + } + public String showInfo() { return "Имя: " + this.name + System.lineSeparator() + - "Год: " + this.year + System.lineSeparator() + - "Описание: " + this.description + System.lineSeparator(); + "Серий: " + this.series + System.lineSeparator() + + "Рейтинг: " + this.rating; } public String getImage() { diff --git a/src/main/java/files/Bot.java b/src/main/java/files/Bot.java index 55eff9b..dcbb64a 100644 --- a/src/main/java/files/Bot.java +++ b/src/main/java/files/Bot.java @@ -6,6 +6,8 @@ import com.pengrad.telegrambot.model.CallbackQuery; import com.pengrad.telegrambot.model.Update; import com.pengrad.telegrambot.request.SendMessage; import com.pengrad.telegrambot.request.SendPhoto; +import com.pengrad.telegrambot.request.SendVideo; +import com.pengrad.telegrambot.response.SendResponse; import java.io.FileInputStream; import java.io.IOException; @@ -35,15 +37,15 @@ public class Bot { }); } - public static void showAnimeAtMainMenu(TelegramBot telegramBot, Update update, byte index, String url, String typeOfAnime) throws IOException { - Anime[] anime = new Anime[Parser.getAnimeAtSearchSize(url)]; + public static void showAnimeAtMainMenu(TelegramBot telegramBot, Update update, byte index, String url, String typeOfAnime) { + Anime[] anime = new Anime[28]; try { anime = Parser.getAnimeAtMainMenu(url); } catch (IOException e) { e.printStackTrace(); } Anime.setList(anime); - telegramBot.execute(new SendPhoto(update.message().chat().id(), anime[index].getImage()).caption(anime[index].showInfo()).replyMarkup(MyKeyboard.getCarousel(typeOfAnime))); + telegramBot.execute(new SendPhoto(UserMessage.chatId, anime[index].getImage()).caption(anime[index].showInfo()).replyMarkup(MyKeyboard.getCarousel(typeOfAnime))); } public static void showAnimeAtMainMenuByCallBackQuery(TelegramBot telegramBot, CallbackQuery callbackQuery, byte index, String typeOfAnime, Anime[] list) { @@ -73,7 +75,7 @@ public class Bot { } public static void showRecentlyAddedAnime(TelegramBot telegramBot, Update update, byte index) throws IOException { - showAnimeAtMainMenu(telegramBot, update, index, "https://animego.org/anime?sort=a.createdAt&direction=desc", "RecentlyAddedAnime"); + showAnimeAtMainMenu(telegramBot, update, index, "https://anime.anidub.life/anime/anime_ongoing/", "RecentlyAddedAnime"); } public static void showRecentlyAddedAnimeByCallBackQuery(TelegramBot telegramBot, CallbackQuery callbackQuery, byte index) { diff --git a/src/main/java/files/Parser.java b/src/main/java/files/Parser.java index 4d7f863..6433297 100644 --- a/src/main/java/files/Parser.java +++ b/src/main/java/files/Parser.java @@ -1,5 +1,6 @@ package files; +import com.pengrad.telegrambot.request.SendVideo; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; @@ -15,47 +16,78 @@ public class Parser { } public static Anime[] getAnimeAtMainMenu(String page) throws IOException { - Element animeList = Parser.getPage(page).select("div[class=animes-container-list]").first(); + Element animeList = Parser.getPage(page).select("div[id=dle-content]").first(); assert animeList != null; - Elements namesTemp = animeList.select("div[class=h5 font-weight-normal mb-1]").select("a"); - Elements descriptionsTemp = animeList.select("div[class=description d-none d-sm-block]"); - Elements yearsTemp = animeList.select("span[class=anime-year mb-2]").select("a"); - Elements genresTemp = animeList.select("span[class=anime-genre d-none d-sm-inline]").select("a[class=mb-2 text-link-gray text-underline]"); - Elements imagesTemp = animeList.select("div[class=anime-list-lazy lazy]"); - Elements urlsTemp = animeList.select("div[class=h5 font-weight-normal mb-1]").select("a"); + Elements namesTemp = animeList.select("div[class=th-title]"); +// Elements descriptionsTemp = animeList.select("div[class=description d-none d-sm-block]"); +// Elements yearsTemp = animeList.select("span[class=anime-year mb-2]").select("a"); +// 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 = 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<String> names = new ArrayList<>(); for (Element name : namesTemp) { - names.add(Jsoup.parse(String.valueOf(name)).text()); + 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)); } - ArrayList<String> descriptions = new ArrayList<>(); - for (Element description : descriptionsTemp) { - descriptions.add(Jsoup.parse(String.valueOf(description)).text()); +// ArrayList<String> descriptions = new ArrayList<>(); +// for (Element description : descriptionsTemp) { +// descriptions.add(Jsoup.parse(String.valueOf(description)).text()); +// } + +// ArrayList<String> years = new ArrayList<>(); +// for (Element year : yearsTemp) { +// years.add(Jsoup.parse(String.valueOf(year)).text()); +// } + + ArrayList<String> series = new ArrayList<>(); + 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<String> years = new ArrayList<>(); - for (Element year : yearsTemp) { - years.add(Jsoup.parse(String.valueOf(year)).text()); + 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 = image.toString(); - int start = text.indexOf("data-original=") + 15; - int end = text.indexOf(">") - 1; + int start = text.indexOf("data-src=\"") + 11; + int end = text.indexOf(".jpg") + 4; char[] dst = new char[end - start]; text.getChars(start, end, dst, 0); - images.add(String.valueOf(dst)); + images.add("https://anime.anidub.life/" + String.valueOf(dst)); } ArrayList<String> urls = new ArrayList<>(); for (Element url : urlsTemp) { String text = url.toString(); - int start = text.indexOf("\"") + 1; - int end = text.indexOf(">") - 1; + 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)); @@ -63,7 +95,7 @@ public class Parser { Anime[] anime = new Anime[countOfAnime]; for (int i = 0; i < countOfAnime; i++) { - anime[i] = new Anime(names.get(i), descriptions.get(i), null, years.get(i), images.get(i), urls.get(i)); + anime[i] = new Anime(names.get(i), null, null, null, series.get(i), ratings.get(i), images.get(i), urls.get(i)); } return anime; @@ -75,6 +107,9 @@ public class Parser { 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"); @@ -95,6 +130,31 @@ public class Parser { years.add(Jsoup.parse(String.valueOf(year)).text()); } + ArrayList<String> 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<String> 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<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 = image.toString(); @@ -117,7 +177,7 @@ public class Parser { Anime[] anime = new Anime[countOfAnime]; for (int i = 0; i < countOfAnime; i++) { - anime[i] = new Anime(names.get(i), null, null, years.get(i), images.get(i), urls.get(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; |