Commit | Line | Data |
---|---|---|
4749f2c5 NR |
1 | package be.nikiroo.fanfix.searchable; |
2 | ||
3 | import java.io.IOException; | |
4 | import java.io.InputStream; | |
5 | import java.net.URL; | |
6 | import java.net.URLEncoder; | |
7 | import java.util.ArrayList; | |
8 | import java.util.Arrays; | |
9 | import java.util.List; | |
10 | ||
11 | import org.jsoup.helper.DataUtil; | |
12 | import org.jsoup.nodes.Document; | |
13 | import org.jsoup.nodes.Element; | |
14 | import org.jsoup.select.Elements; | |
15 | ||
16 | import be.nikiroo.fanfix.Instance; | |
17 | import be.nikiroo.fanfix.bundles.StringId; | |
18 | import be.nikiroo.fanfix.data.MetaData; | |
19 | import be.nikiroo.fanfix.supported.SupportType; | |
20 | import be.nikiroo.utils.Image; | |
21 | import be.nikiroo.utils.StringUtils; | |
22 | ||
23 | class MangaLel extends BasicSearchable { | |
24 | private String BASE_URL = "http://mangas-lecture-en-ligne.fr/index_lel.php"; | |
25 | ||
26 | public MangaLel() { | |
27 | super(SupportType.MANGA_LEL); | |
28 | } | |
29 | ||
30 | @Override | |
31 | public List<SearchableTag> getTags() throws IOException { | |
32 | List<SearchableTag> tags = new ArrayList<SearchableTag>(); | |
33 | ||
34 | String url = BASE_URL + "?page=recherche"; | |
35 | Document doc = load(url, false); | |
36 | ||
37 | Element genre = doc.getElementsByClass("genre").first(); | |
38 | if (genre != null) { | |
39 | for (Element el : genre.getElementsByAttributeValueStarting("for", | |
40 | "genre")) { | |
41 | tags.add(new SearchableTag(el.attr("for"), el.text(), true)); | |
42 | } | |
43 | } | |
44 | ||
45 | return tags; | |
46 | } | |
47 | ||
48 | @Override | |
49 | public void fillTag(SearchableTag tag) throws IOException { | |
50 | // Tags are always complete | |
51 | } | |
52 | ||
53 | @Override | |
54 | public int searchPages(String search) throws IOException { | |
55 | // No pagination | |
56 | return 1; | |
57 | } | |
58 | ||
59 | @Override | |
60 | public List<MetaData> search(String search, int page) throws IOException { | |
61 | String url = BASE_URL + "?nomProjet=" | |
62 | + URLEncoder.encode(search, "utf-8") | |
63 | + "&nomAuteur=&nomTeam=&page=recherche&truc=truc"; | |
64 | ||
65 | // No pagination | |
66 | return getResults(url); | |
67 | } | |
68 | ||
69 | @Override | |
70 | public List<MetaData> search(SearchableTag tag, int page) | |
71 | throws IOException { | |
72 | String url = BASE_URL + "?nomProjet=&nomAuteur=&nomTeam=&" | |
73 | + tag.getId() + "=on&page=recherche&truc=truc"; | |
74 | ||
75 | // No pagination | |
76 | return getResults(url); | |
77 | } | |
78 | ||
79 | private List<MetaData> getResults(String sourceUrl) throws IOException { | |
80 | List<MetaData> metas = new ArrayList<MetaData>(); | |
81 | ||
82 | Document doc = DataUtil.load( | |
83 | Instance.getCache().open(new URL(sourceUrl), getSupport(), | |
84 | false), "UTF-8", sourceUrl); | |
85 | ||
86 | for (Element result : doc.getElementsByClass("rechercheAffichage")) { | |
87 | Element a = result.getElementsByTag("a").first(); | |
88 | if (a != null) { | |
89 | MetaData meta = new MetaData(); | |
90 | meta.setUrl(a.absUrl("href")); | |
91 | Element img = result.getElementsByTag("img").first(); | |
92 | if (img != null) { | |
93 | String coverUrl = img.absUrl("src"); | |
94 | ||
95 | try { | |
96 | InputStream in = Instance.getCache().open( | |
97 | new URL(coverUrl), getSupport(), true); | |
98 | try { | |
99 | meta.setCover(new Image(in)); | |
100 | } finally { | |
101 | in.close(); | |
102 | } | |
103 | } catch (Exception e) { | |
104 | Instance.getTraceHandler() | |
105 | .error(new Exception( | |
106 | "Cannot download cover for MangaLEL story in search mode", | |
107 | e)); | |
108 | } | |
109 | } | |
110 | ||
111 | Elements infos = result.getElementsByClass("texte"); | |
112 | if (infos != null) { | |
113 | String[] tab = infos.outerHtml().split("<br>"); | |
114 | ||
115 | meta.setTitle(getVal(tab, 0)); | |
116 | meta.setAuthor(getVal(tab, 1)); | |
117 | meta.setTags(Arrays.asList(getVal(tab, 2).split(" "))); | |
118 | ||
119 | meta.setResume(getSupport() | |
120 | .makeChapter( | |
121 | new URL(sourceUrl), | |
122 | 0, | |
123 | Instance.getTrans().getString( | |
124 | StringId.DESCRIPTION), | |
125 | getVal(tab, 5))); | |
126 | } | |
127 | ||
128 | metas.add(meta); | |
129 | } | |
130 | } | |
131 | ||
132 | return metas; | |
133 | } | |
134 | ||
135 | private String getVal(String[] tab, int i) { | |
136 | String val = ""; | |
137 | ||
138 | if (i < tab.length) { | |
139 | val = StringUtils.unhtml(tab[i]); | |
140 | int pos = val.indexOf(":"); | |
141 | if (pos >= 0) { | |
142 | val = val.substring(pos + 1).trim(); | |
143 | } | |
144 | } | |
145 | ||
146 | return val; | |
147 | } | |
148 | } |