diff options
Diffstat (limited to 'src')
| -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; |