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 int searchPages(String search
) throws IOException
{
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";
66 return getResults(url
);
70 public List
<MetaData
> search(SearchableTag tag
, int page
)
72 String url
= BASE_URL
+ "?nomProjet=&nomAuteur=&nomTeam=&"
73 + tag
.getId() + "=on&page=recherche&truc=truc";
76 return getResults(url
);
79 private List
<MetaData
> getResults(String sourceUrl
) throws IOException
{
80 List
<MetaData
> metas
= new ArrayList
<MetaData
>();
82 Document doc
= DataUtil
.load(
83 Instance
.getCache().open(new URL(sourceUrl
), getSupport(),
84 false), "UTF-8", sourceUrl
);
86 for (Element result
: doc
.getElementsByClass("rechercheAffichage")) {
87 Element a
= result
.getElementsByTag("a").first();
91 MetaData meta
= new MetaData();
94 // http://mangas-lecture-en-ligne.fr/index_lel.php?page=presentationProjet&idProjet=218
97 // http://mangas-lecture-en-ligne.fr/index_lel?onCommence=oui&idChapitre=2805
99 // ...but we need the PROJECT id, not the CHAPTER id -> use
102 Elements infos
= result
.getElementsByClass("texte");
104 String
[] tab
= infos
.outerHtml().split("<br>");
107 meta
.setSource(getType().getSourceName());
108 meta
.setPublisher(getType().getSourceName());
109 meta
.setType(getType().toString());
110 meta
.setSubject("manga");
111 meta
.setImageDocument(true);
112 meta
.setTitle(getVal(tab
, 0));
113 meta
.setAuthor(getVal(tab
, 1));
114 meta
.setTags(Arrays
.asList(getVal(tab
, 2).split(" ")));
116 meta
.setResume(getSupport()
120 Instance
.getTrans().getString(
121 StringId
.DESCRIPTION
),
125 Element img
= result
.getElementsByTag("img").first();
128 String
[] tab
= img
.attr("src").split("/");
129 String str
= tab
[tab
.length
- 1];
130 tab
= str
.split("\\.");
132 projectId
= Integer
.parseInt(str
);
134 String coverUrl
= img
.absUrl("src");
136 InputStream in
= Instance
.getCache().open(
137 new URL(coverUrl
), getSupport(), true);
139 meta
.setCover(new Image(in
));
143 } catch (Exception e
) {
144 // Happen often on MangaLEL...
145 Instance
.getTraceHandler().trace(
146 "Cannot download cover for MangaLEL story in search mode: "
149 } catch (Exception e
) {
150 // no project id... cannot use the story :(
151 Instance
.getTraceHandler().error(
152 "Cannot find ProjectId for MangaLEL story in search mode: "
157 if (projectId
>= 0) {
158 meta
.setUrl("http://mangas-lecture-en-ligne.fr/index_lel.php?page=presentationProjet&idProjet="
160 meta
.setUuid(meta
.getUrl());
169 private String
getVal(String
[] tab
, int i
) {
172 if (i
< tab
.length
) {
173 val
= StringUtils
.unhtml(tab
[i
]);
174 int pos
= val
.indexOf(":");
176 val
= val
.substring(pos
+ 1).trim();