package ar.rulosoft.mimanganu.servers; import android.content.Context; import java.net.URLEncoder; import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; import ar.rulosoft.mimanganu.R; import ar.rulosoft.mimanganu.componentes.Chapter; import ar.rulosoft.mimanganu.componentes.Manga; import ar.rulosoft.mimanganu.componentes.ServerFilter; import ar.rulosoft.mimanganu.utils.Util; /** * Created by Raul on 04/12/2015. */ public class MyMangaIo extends ServerBase { private static final String[] genre = { "Josei", "Seinen", "Shojo", "Shonen" }; private static final String[] genreV = { "&genre%5B4%5D=1", "&genre%5B2%5D=1", "&genre%5B3%5D=1", "&genre%5B1%5D=1" }; private static final String[] type = { "Doujinshi", "Magazine", "Manfra", "Manga", "Manhua", "Manhwa" }; private static final String[] typeV = { "&type%5B3%5D=1", "&type%5B5%5D=1", "&type%5B6%5D=1", "&type%5B1%5D=1", "&type%5B4%5D=1", "&type%5B2%5D=1", }; private static final String[] statut = { "Abandonné", "En cours", "One shot", "Terminé" }; private static final String[] statutV = { "&statut%5B4%5D=1", "&statut%5B3%5D=1", "&statut%5B1%5D=1", "&statut%5B2%5D=1" }; private static final String[] subGenre = { "Action", "Adulte", "Arts martiaux", "Aventure", "Comédie", "Drame", "Ecchi", "Fantaisie", "Harem", "Historique", "Horreur", "Lolicon", "Mature", "Mecha", "Mystère", "Pervers", "Psychologique", "Romance", "Science fiction", "Shotacon", "Sports", "Surnaturel", "Tragédie", "Tranche de vie", "Travelo", "Vie scolaire", "Yaoi", "Yuri" }; private static final String[] subGenreV = { "&subgenre%5B5%5D=1", "&subgenre%5B23%5D=1", "&subgenre%5B3%5D=1", "&subgenre%5B10%5D=1", "&subgenre%5B12%5D=1", "&subgenre%5B2%5D=1", "&subgenre%5B20%5D=1", "&subgenre%5B25%5D=1", "&subgenre%5B19%5D=1", "&subgenre%5B6%5D=1", "&subgenre%5B30%5D=1", "&subgenre%5B26%5D=1", "&subgenre%5B15%5D=1", "&subgenre%5B22%5D=1", "&subgenre%5B8%5D=1", "&subgenre%5B13%5D=1", "&subgenre%5B1%5D=1", "&subgenre%5B21%5D=1", "&subgenre%5B29%5D=1", "&subgenre%5B17%5D=1", "&subgenre%5B9%5D=1", "&subgenre%5B18%5D=1", "&subgenre%5B16%5D=1", "&subgenre%5B27%5D=1", "&subgenre%5B11%5D=1", "&subgenre%5B28%5D=1", "&subgenre%5B24%5D=1" }; private static String HOST = "http://www.mymanga.io/"; private static String[] orden = { "Alphabétique" }; public MyMangaIo(Context context) { super(context); this.setFlag(R.drawable.flag_fr); this.setIcon(R.drawable.mymanga); this.setServerName("MyMangaIo"); setServerID(ServerBase.MYMANGAIO); } @Override public ArrayList<Manga> getMangas() throws Exception { return getMangasFiltered(getBasicFilter(), 0); } @Override public void loadChapters(Manga manga, boolean forceReload) throws Exception { if (manga.getChapters().size() == 0 || forceReload) { String data = getNavigatorAndFlushParameters().get(manga.getPath()); // Front manga.setImages("http://www.mymanga.io/" + getFirstMatchDefault("<img src=\"(images/mangas_thumb/.+?)\"", data, "")); // Summary manga.setSynopsis(getFirstMatchDefault("Synopsis</h1><p>(.+?)</p>", data, defaultSynopsis).replaceAll("<.+?>", "")); // Status manga.setFinished(!data.contains("en cours</a>")); // Author manga.setAuthor(Util.getInstance().fromHtml(getFirstMatchDefault("Auteur\\s*:\\s*(.+?)</tr>", data, "")).toString()); // Genre manga.setGenre(Util.getInstance().fromHtml(getFirstMatchDefault("Genre\\s*:\\s*(.+?)</tr>", data, "")).toString()); // Chapter Pattern p = Pattern.compile("<div class=\"clearfix\">.+?href=\"(http://www\\.mymanga\\.io/[^\"]+?)\" title=\"([^\"]+?)\""); //<div class=clearfix>.+?<a href="(http://www.mymanga.io/[^"]+)".+?chapter>(.+?)< Matcher m = p.matcher(data); while (m.find()) { /*Log.d("MyMIO", "1: " + m.group(1)); Log.d("MyMIO", "2: " + m.group(2));*/ Chapter mc = new Chapter(m.group(2).trim(), m.group(1).replace("http://www.mymanga.io/mangas/", "http://www.hitmanga.eu/")); mc.addChapterFirst(manga); } } } @Override public void loadMangaInformation(Manga manga, boolean forceReload) throws Exception { if (manga.getChapters().isEmpty() || forceReload) loadChapters(manga, forceReload); } @Override public String getPagesNumber(Chapter chapter, int page) { if (page > chapter.getPages()) { page = 1; } return chapter.getPath() + page; } @Override public String getImageFrom(Chapter chapter, int page) throws Exception { String data; data = getNavigatorAndFlushParameters().get(this.getPagesNumber(chapter, page)); return getFirstMatch("<img src=\"(.+?)\"", data, "Error: Could not get the link to the image"); } @Override public void chapterInit(Chapter chapter) throws Exception { String source = getNavigatorAndFlushParameters().get(chapter.getPath()); /*Log.d("MYIO", "web: " + chapter.getPath()); Log.d("MYIO", "source: " + source);*/ String pages = getFirstMatch("<span>sur (\\d+)</span>", source, "Error: Could not get the number of pages"); //(\d+)</option></select></span> chapter.setPages(Integer.parseInt(pages)); } public ArrayList<Manga> getMangasFromSource(String source) throws Exception { ArrayList<Manga> mangas = new ArrayList<>(); Pattern p = Pattern.compile("<a href=\"(mangas/[^\"]+?)\">(.+?)<"); Matcher m = p.matcher(source); while (m.find()) { Manga manga = new Manga(getServerID(), Util.getInstance().fromHtml(m.group(2)).toString(), HOST + m.group(1), false); manga.setImages("http://www.mymanga.io/images/mangas_thumb/" + getFirstMatchDefault("mangas/(.+?)/", manga.getPath(), "") + ".jpg"); mangas.add(manga); } return mangas; } @Override public boolean hasList() { return true; } @Override public ArrayList<Manga> search(String term) throws Exception { String web = "http://www.mymanga.io/search?name=" + URLEncoder.encode(term, "UTF-8"); String data = getNavigatorAndFlushParameters().get(web); return getMangasFromSource(data); } //http://www.mymanga.io/search?name=&author=&illustrator=&parution_span=0&parution= // &type%5B3%5D=0&type%5B5%5D=0&type%5B6%5D=0&type%5B1%5D=0&type%5B4%5D=0&type%5B2%5D=0 // &statut%5B4%5D=1&statut%5B3%5D=0&statut%5B1%5D=0&statut%5B2%5D=0 // &genre%5B4%5D=0&genre%5B2%5D=1&genre%5B3%5D=0&genre%5B1%5D=0 // &subgenre%5B4%5D=0&subgenre%5B5%5D=0&subgenre%5B23%5D=0&subgenre%5B3%5D=0&subgenre%5B10%5D=0&subgenre%5B12%5D=0&subgenre%5B2%5D=0&subgenre%5B20%5D=0&subgenre%5B25%5D=1&subgenre%5B19%5D=0&subgenre%5B6%5D=0&subgenre%5B30%5D=0&subgenre%5B26%5D=0&subgenre%5B15%5D=0&subgenre%5B22%5D=0&subgenre%5B8%5D=0&subgenre%5B13%5D=0&subgenre%5B1%5D=0&subgenre%5B21%5D=0&subgenre%5B29%5D=0&subgenre%5B17%5D=0&subgenre%5B9%5D=0&subgenre%5B18%5D=0&subgenre%5B16%5D=0&subgenre%5B27%5D=0&subgenre%5B11%5D=0&subgenre%5B28%5D=0&subgenre%5B24%5D=0 // &chapter_span=0&chapter_count=&last_update=&like_span=0&like=&dislike_span=0&dislike=&search=Rechercher @Override public ArrayList<Manga> getMangasFiltered(int[][] filters, int pageNumber) throws Exception { String web = "http://www.mymanga.io/search?name=&author=&illustrator=&parution_span=0&parution="; for (int i = 0; i < filters[0].length; i++) { web = web + typeV[filters[0][i]]; } for (int i = 0; i < filters[1].length; i++) { web = web + statutV[filters[1][i]]; } for (int i = 0; i < filters[2].length; i++) { web = web + genre[filters[2][i]]; } for (int i = 0; i < filters[3].length; i++) { web = web + subGenreV[filters[3][i]]; } web = web + "&chapter_span=0&chapter_count=&last_update=&like_span=0&like=&dislike_span=0&dislike=&search=Rechercher"; String source = getNavigatorAndFlushParameters().get(web); return getMangasFromSource(source); } @Override public ServerFilter[] getServerFilters() { return new ServerFilter[]{ new ServerFilter("Type", type, ServerFilter.FilterType.MULTI), new ServerFilter("Statut", statut, ServerFilter.FilterType.MULTI), new ServerFilter("Genre", genre, ServerFilter.FilterType.MULTI), new ServerFilter("Sous-Genres", subGenre, ServerFilter.FilterType.MULTI) }; } }