1 package be
.nikiroo
.fanfix
.supported
;
3 import java
.io
.IOException
;
4 import java
.io
.InputStream
;
6 import java
.text
.ParseException
;
7 import java
.text
.SimpleDateFormat
;
8 import java
.util
.AbstractMap
;
9 import java
.util
.ArrayList
;
10 import java
.util
.List
;
11 import java
.util
.Map
.Entry
;
13 import org
.jsoup
.helper
.DataUtil
;
14 import org
.jsoup
.nodes
.Element
;
15 import org
.jsoup
.select
.Elements
;
17 import be
.nikiroo
.fanfix
.Instance
;
18 import be
.nikiroo
.fanfix
.data
.MetaData
;
19 import be
.nikiroo
.utils
.Image
;
20 import be
.nikiroo
.utils
.Progress
;
21 import be
.nikiroo
.utils
.StringUtils
;
23 class MangaLel
extends BasicSupport
{
25 protected boolean isHtml() {
30 protected MetaData
getMeta() throws IOException
{
31 MetaData meta
= new MetaData();
33 meta
.setTitle(getTitle());
34 meta
.setAuthor(getAuthor());
35 meta
.setDate(getDate());
36 meta
.setTags(getTags());
37 meta
.setSource(getType().getSourceName());
38 meta
.setUrl(getSource().toString());
39 meta
.setPublisher(getType().getSourceName());
40 meta
.setUuid(getSource().toString());
43 meta
.setSubject("manga");
44 meta
.setType(getType().toString());
45 meta
.setImageDocument(true);
46 meta
.setCover(getCover());
51 private String
getTitle() {
52 Element doc
= getSourceNode();
53 Element h4
= doc
.getElementsByTag("h4").first();
55 return StringUtils
.unhtml(h4
.text()).trim();
61 private String
getAuthor() {
62 Element doc
= getSourceNode();
63 Elements tabEls
= doc
.getElementsByClass("projet-titre");
66 if (tabEls
.size() >= 2) {
67 value
= StringUtils
.unhtml(tabEls
.get(1).text()).trim();
73 private List
<String
> getTags() {
74 List
<String
> tags
= new ArrayList
<String
>();
76 Element doc
= getSourceNode();
77 Elements tabEls
= doc
.getElementsByClass("projet-titre");
79 if (tabEls
.size() >= 4) {
80 String values
= StringUtils
.unhtml(tabEls
.get(3).text()).trim();
81 for (String value
: values
.split(",")) {
89 private String
getDate() {
90 Element doc
= getSourceNode();
91 Element table
= doc
.getElementsByClass("table").first();
93 // We take the first date we find
97 els
= table
.getElementsByTag("tr");
98 if (els
.size() >= 2) {
99 els
= els
.get(1).getElementsByTag("td");
100 if (els
.size() >= 3) {
101 value
= StringUtils
.unhtml(els
.get(2).text()).trim();
106 if (!value
.isEmpty()) {
108 long time
= StringUtils
.toTime(value
);
109 value
= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
111 } catch (ParseException e
) {
119 protected String
getDesc() {
120 Element doc
= getSourceNode();
121 Elements tabEls
= doc
.getElementsByClass("projet-titre");
124 if (tabEls
.size() >= 5) {
125 value
= StringUtils
.unhtml(tabEls
.get(4).text()).trim();
131 private Image
getCover() {
132 Element doc
= getSourceNode();
133 Element container
= doc
.getElementsByClass("container").first();
135 if (container
!= null) {
137 Elements imgs
= container
.getElementsByTag("img");
139 if (imgs
.size() >= 1) {
141 if (img
.hasClass("banniere-team-projet")) {
143 if (imgs
.size() >= 2) {
150 String coverUrl
= img
.absUrl("src");
154 coverIn
= Instance
.getCache().open(new URL(coverUrl
), this,
157 return new Image(coverIn
);
161 } catch (IOException e
) {
162 Instance
.getTraceHandler().error(e
);
171 protected List
<Entry
<String
, URL
>> getChapters(Progress pg
)
173 List
<Entry
<String
, URL
>> urls
= new ArrayList
<Entry
<String
, URL
>>();
175 Element doc
= getSourceNode();
176 Element table
= doc
.getElementsByClass("table").first();
178 for (Element tr
: table
.getElementsByTag("tr")) {
179 Element a
= tr
.getElementsByTag("a").first();
181 String name
= StringUtils
.unhtml(a
.text()).trim();
182 URL url
= new URL(a
.absUrl("href"));
183 urls
.add(new AbstractMap
.SimpleEntry
<String
, URL
>(name
, url
));
192 protected String
getChapterContent(URL chapUrl
, int number
, Progress pg
)
198 StringBuilder builder
= new StringBuilder();
200 InputStream in
= Instance
.getCache().open(chapUrl
, this, false);
202 Element pageDoc
= DataUtil
.load(in
, "UTF-8", chapUrl
.toString());
203 Element content
= pageDoc
.getElementById("content");
204 Elements linkEls
= content
.getElementsByTag("img");
205 for (Element linkEl
: linkEls
) {
206 if (linkEl
.attr("src").trim().isEmpty()) {
211 builder
.append(linkEl
.absUrl("src").trim());
212 builder
.append("]<br/>");
219 return builder
.toString();
223 protected boolean supports(URL url
) {
224 // URL structure (the projectId is the manga key):
225 // http://mangas-lecture-en-ligne.fr/index_lel.php?page=presentationProjet&idProjet=999
227 return "mangas-lecture-en-ligne.fr".equals(url
.getHost());