1 package be
.nikiroo
.fanfix
.searchable
;
3 import java
.io
.IOException
;
4 import java
.io
.InputStream
;
6 import java
.net
.URLEncoder
;
7 import java
.util
.ArrayList
;
8 import java
.util
.Arrays
;
11 import org
.jsoup
.helper
.DataUtil
;
12 import org
.jsoup
.nodes
.Document
;
13 import org
.jsoup
.nodes
.Element
;
14 import org
.jsoup
.select
.Elements
;
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
;
23 class MangaLel
extends BasicSearchable
{
24 private String BASE_URL
= "http://mangas-lecture-en-ligne.fr/index_lel.php";
27 super(SupportType
.MANGA_LEL
);
31 public List
<SearchableTag
> getTags() throws IOException
{
32 List
<SearchableTag
> tags
= new ArrayList
<SearchableTag
>();
34 String url
= BASE_URL
+ "?page=recherche";
35 Document doc
= load(url
, false);
37 Element genre
= doc
.getElementsByClass("genre").first();
39 for (Element el
: genre
.getElementsByAttributeValueStarting("for",
41 tags
.add(new SearchableTag(el
.attr("for"), el
.text(), true));
49 public void fillTag(SearchableTag tag
) throws IOException
{
50 // Tags are always complete
54 public List
<MetaData
> search(String search
, int page
) throws IOException
{
55 String url
= BASE_URL
+ "?nomProjet="
56 + URLEncoder
.encode(search
, "utf-8")
57 + "&nomAuteur=&nomTeam=&page=recherche&truc=truc";
60 return getResults(url
);
64 public List
<MetaData
> search(SearchableTag tag
, int page
)
66 String url
= BASE_URL
+ "?nomProjet=&nomAuteur=&nomTeam=&"
67 + tag
.getId() + "=on&page=recherche&truc=truc";
70 return getResults(url
);
74 public int searchPages(String search
) throws IOException
{
80 public int searchPages(SearchableTag tag
) throws IOException
{
89 private List
<MetaData
> getResults(String sourceUrl
) throws IOException
{
90 List
<MetaData
> metas
= new ArrayList
<MetaData
>();
92 Document doc
= DataUtil
.load(
93 Instance
.getCache().open(new URL(sourceUrl
), getSupport(),
94 false), "UTF-8", sourceUrl
);
96 for (Element result
: doc
.getElementsByClass("rechercheAffichage")) {
97 Element a
= result
.getElementsByTag("a").first();
101 MetaData meta
= new MetaData();
104 // http://mangas-lecture-en-ligne.fr/index_lel.php?page=presentationProjet&idProjet=218
107 // http://mangas-lecture-en-ligne.fr/index_lel?onCommence=oui&idChapitre=2805
109 // ...but we need the PROJECT id, not the CHAPTER id -> use
112 Elements infos
= result
.getElementsByClass("texte");
114 String
[] tab
= infos
.outerHtml().split("<br>");
117 meta
.setSource(getType().getSourceName());
118 meta
.setPublisher(getType().getSourceName());
119 meta
.setType(getType().toString());
120 meta
.setSubject("manga");
121 meta
.setImageDocument(true);
122 meta
.setTitle(getVal(tab
, 0));
123 meta
.setAuthor(getVal(tab
, 1));
124 meta
.setTags(Arrays
.asList(getVal(tab
, 2).split(" ")));
126 meta
.setResume(getSupport()
130 Instance
.getTrans().getString(
131 StringId
.DESCRIPTION
),
135 Element img
= result
.getElementsByTag("img").first();
138 String
[] tab
= img
.attr("src").split("/");
139 String str
= tab
[tab
.length
- 1];
140 tab
= str
.split("\\.");
142 projectId
= Integer
.parseInt(str
);
144 String coverUrl
= img
.absUrl("src");
146 InputStream in
= Instance
.getCache().open(
147 new URL(coverUrl
), getSupport(), true);
149 meta
.setCover(new Image(in
));
153 } catch (Exception e
) {
154 // Happen often on MangaLEL...
155 Instance
.getTraceHandler().trace(
156 "Cannot download cover for MangaLEL story in search mode: "
159 } catch (Exception e
) {
160 // no project id... cannot use the story :(
161 Instance
.getTraceHandler().error(
162 "Cannot find ProjectId for MangaLEL story in search mode: "
167 if (projectId
>= 0) {
168 meta
.setUrl("http://mangas-lecture-en-ligne.fr/index_lel.php?page=presentationProjet&idProjet="
170 meta
.setUuid(meta
.getUrl());
179 private String
getVal(String
[] tab
, int i
) {
182 if (i
< tab
.length
) {
183 val
= StringUtils
.unhtml(tab
[i
]);
184 int pos
= val
.indexOf(":");
186 val
= val
.substring(pos
+ 1).trim();