From: Niki Roo Date: Sun, 14 Apr 2019 07:41:33 +0000 (+0200) Subject: search: add MangaLEL X-Git-Url: http://git.nikiroo.be/?p=fanfix.git;a=commitdiff_plain;h=4749f2c50437f610f7e5258ab1c22a9f1bfa527a search: add MangaLEL --- diff --git a/src/be/nikiroo/fanfix/searchable/BasicSearchable.java b/src/be/nikiroo/fanfix/searchable/BasicSearchable.java index 1e5e9da..0449b81 100644 --- a/src/be/nikiroo/fanfix/searchable/BasicSearchable.java +++ b/src/be/nikiroo/fanfix/searchable/BasicSearchable.java @@ -212,7 +212,7 @@ public abstract class BasicSearchable { // TODO break; case MANGA_LEL: - // TODO + support = new MangaLel(); break; case CBZ: case HTML: diff --git a/src/be/nikiroo/fanfix/searchable/MangaLel.java b/src/be/nikiroo/fanfix/searchable/MangaLel.java new file mode 100644 index 0000000..c8a522c --- /dev/null +++ b/src/be/nikiroo/fanfix/searchable/MangaLel.java @@ -0,0 +1,148 @@ +package be.nikiroo.fanfix.searchable; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.jsoup.helper.DataUtil; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.select.Elements; + +import be.nikiroo.fanfix.Instance; +import be.nikiroo.fanfix.bundles.StringId; +import be.nikiroo.fanfix.data.MetaData; +import be.nikiroo.fanfix.supported.SupportType; +import be.nikiroo.utils.Image; +import be.nikiroo.utils.StringUtils; + +class MangaLel extends BasicSearchable { + private String BASE_URL = "http://mangas-lecture-en-ligne.fr/index_lel.php"; + + public MangaLel() { + super(SupportType.MANGA_LEL); + } + + @Override + public List getTags() throws IOException { + List tags = new ArrayList(); + + String url = BASE_URL + "?page=recherche"; + Document doc = load(url, false); + + Element genre = doc.getElementsByClass("genre").first(); + if (genre != null) { + for (Element el : genre.getElementsByAttributeValueStarting("for", + "genre")) { + tags.add(new SearchableTag(el.attr("for"), el.text(), true)); + } + } + + return tags; + } + + @Override + public void fillTag(SearchableTag tag) throws IOException { + // Tags are always complete + } + + @Override + public int searchPages(String search) throws IOException { + // No pagination + return 1; + } + + @Override + public List search(String search, int page) throws IOException { + String url = BASE_URL + "?nomProjet=" + + URLEncoder.encode(search, "utf-8") + + "&nomAuteur=&nomTeam=&page=recherche&truc=truc"; + + // No pagination + return getResults(url); + } + + @Override + public List search(SearchableTag tag, int page) + throws IOException { + String url = BASE_URL + "?nomProjet=&nomAuteur=&nomTeam=&" + + tag.getId() + "=on&page=recherche&truc=truc"; + + // No pagination + return getResults(url); + } + + private List getResults(String sourceUrl) throws IOException { + List metas = new ArrayList(); + + Document doc = DataUtil.load( + Instance.getCache().open(new URL(sourceUrl), getSupport(), + false), "UTF-8", sourceUrl); + + for (Element result : doc.getElementsByClass("rechercheAffichage")) { + Element a = result.getElementsByTag("a").first(); + if (a != null) { + MetaData meta = new MetaData(); + meta.setUrl(a.absUrl("href")); + Element img = result.getElementsByTag("img").first(); + if (img != null) { + String coverUrl = img.absUrl("src"); + + try { + InputStream in = Instance.getCache().open( + new URL(coverUrl), getSupport(), true); + try { + meta.setCover(new Image(in)); + } finally { + in.close(); + } + } catch (Exception e) { + Instance.getTraceHandler() + .error(new Exception( + "Cannot download cover for MangaLEL story in search mode", + e)); + } + } + + Elements infos = result.getElementsByClass("texte"); + if (infos != null) { + String[] tab = infos.outerHtml().split("
"); + + meta.setTitle(getVal(tab, 0)); + meta.setAuthor(getVal(tab, 1)); + meta.setTags(Arrays.asList(getVal(tab, 2).split(" "))); + + meta.setResume(getSupport() + .makeChapter( + new URL(sourceUrl), + 0, + Instance.getTrans().getString( + StringId.DESCRIPTION), + getVal(tab, 5))); + } + + metas.add(meta); + } + } + + return metas; + } + + private String getVal(String[] tab, int i) { + String val = ""; + + if (i < tab.length) { + val = StringUtils.unhtml(tab[i]); + int pos = val.indexOf(":"); + if (pos >= 0) { + val = val.substring(pos + 1).trim(); + } + } + + return val; + } +}