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) { | |
12443642 NR |
89 | int projectId = -1; |
90 | ||
4749f2c5 | 91 | MetaData meta = new MetaData(); |
4749f2c5 | 92 | |
12443642 NR |
93 | // Target: |
94 | // http://mangas-lecture-en-ligne.fr/index_lel.php?page=presentationProjet&idProjet=218 | |
95 | ||
96 | // a.absUrl("href"): | |
97 | // http://mangas-lecture-en-ligne.fr/index_lel?onCommence=oui&idChapitre=2805 | |
98 | ||
99 | // ...but we need the PROJECT id, not the CHAPTER id -> use | |
100 | // <IMG> | |
4749f2c5 NR |
101 | |
102 | Elements infos = result.getElementsByClass("texte"); | |
103 | if (infos != null) { | |
104 | String[] tab = infos.outerHtml().split("<br>"); | |
105 | ||
106 | meta.setTitle(getVal(tab, 0)); | |
107 | meta.setAuthor(getVal(tab, 1)); | |
108 | meta.setTags(Arrays.asList(getVal(tab, 2).split(" "))); | |
109 | ||
110 | meta.setResume(getSupport() | |
111 | .makeChapter( | |
112 | new URL(sourceUrl), | |
113 | 0, | |
114 | Instance.getTrans().getString( | |
115 | StringId.DESCRIPTION), | |
116 | getVal(tab, 5))); | |
117 | } | |
118 | ||
12443642 NR |
119 | Element img = result.getElementsByTag("img").first(); |
120 | if (img != null) { | |
121 | try { | |
122 | String[] tab = img.attr("src").split("/"); | |
123 | String str = tab[tab.length - 1]; | |
124 | tab = str.split("\\."); | |
125 | str = tab[0]; | |
126 | projectId = Integer.parseInt(str); | |
127 | ||
128 | String coverUrl = img.absUrl("src"); | |
129 | try { | |
130 | InputStream in = Instance.getCache().open( | |
131 | new URL(coverUrl), getSupport(), true); | |
132 | try { | |
133 | meta.setCover(new Image(in)); | |
134 | } finally { | |
135 | in.close(); | |
136 | } | |
137 | } catch (Exception e) { | |
138 | // Happen often on MangaLEL... | |
139 | Instance.getTraceHandler().trace( | |
140 | "Cannot download cover for MangaLEL story in search mode: " | |
141 | + meta.getTitle()); | |
142 | } | |
143 | } catch (Exception e) { | |
144 | // no project id... cannot use the story :( | |
145 | Instance.getTraceHandler().error( | |
146 | "Cannot find ProjectId for MangaLEL story in search mode: " | |
147 | + meta.getTitle()); | |
148 | } | |
149 | } | |
150 | ||
151 | if (projectId >= 0) { | |
152 | meta.setUrl("http://mangas-lecture-en-ligne.fr/index_lel.php?page=presentationProjet&idProjet=" | |
153 | + projectId); | |
154 | metas.add(meta); | |
155 | } | |
4749f2c5 NR |
156 | } |
157 | } | |
158 | ||
159 | return metas; | |
160 | } | |
161 | ||
162 | private String getVal(String[] tab, int i) { | |
163 | String val = ""; | |
164 | ||
165 | if (i < tab.length) { | |
166 | val = StringUtils.unhtml(tab[i]); | |
167 | int pos = val.indexOf(":"); | |
168 | if (pos >= 0) { | |
169 | val = val.substring(pos + 1).trim(); | |
170 | } | |
171 | } | |
172 | ||
173 | return val; | |
174 | } | |
175 | } |