-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathmangareader.py
95 lines (80 loc) · 3.42 KB
/
mangareader.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/usr/bin/python
import re
from manga import Manga, App
class MangaReader(Manga):
SERIES_URL = '%(baseurl)s/%(series_id)d/%(series)s.html'
CHAPTER_URL = '%(baseurl)s/%(series_id)d-%(chapter_id)d-1/%(series)s/chapter-%(chapter)d.html'
PAGE_URL = '%(baseurl)s/%(series_id)d-%(chapter_id)d-%(page)d/%(series)s/chapter-%(chapter)d.html'
NEW_SERIES_URL = '%(baseurl)s/%(series)s'
NEW_CHAPTER_URL = '%(baseurl)s/%(series)s/%(chapter)d'
NEW_PAGE_URL = '%(baseurl)s/%(series)s/%(chapter)d/%(page)d'
CHAPTER_CRE_1 = re.compile(r'/(\d+)-(\d+)-(\d+)/[^/]+/chapter-(\d+).html')
CHAPTER_CRE_2 = re.compile(r'/[^/]+/(\d+)')
def __init__(self):
Manga.__init__(self, 'http://www.mangareader.net')
def get_series_url(self, data):
if 'series_id' in data:
return Manga.get_series_url(self, data)
else:
d = data
d.update({'baseurl': self.baseurl})
return self.NEW_SERIES_URL % d
def get_chapter_url(self, data):
if 'chapter_id' in data:
return Manga.get_chapter_url(self, data)
else:
d = data
d.update({'baseurl': self.baseurl})
return self.NEW_CHAPTER_URL % d
def get_page_url(self, data):
if 'chapter_id' in data:
return Manga.get_page_url(self, data)
else:
d = data
d.update({'baseurl': self.baseurl})
return self.NEW_PAGE_URL % d
def _list_chapters(self, doc):
chapters = []
for n in doc.xpath("//table[@id='listing']/tr[position()>1]"):
u = n.xpath("td[1]/a")[0].attrib['href']
m = self.CHAPTER_CRE_1.match(u)
if m:
chapters.append({'series_id': int(m.group(1)),
'chapter_id': int(m.group(2)),
'chapter': int(m.group(4))})
continue
m = self.CHAPTER_CRE_2.match(u)
if m:
chapters.append({'chapter': int(m.group(1))})
return chapters
def _list_pages(self, doc):
pages = doc.xpath("//select[@id='pageMenu']/option")
pages = [int(i.text) for i in pages]
return pages
def _download_page(self, doc):
url = doc.xpath("//img[@id='img']")[0].attrib['src']
return url
class MangaReaderApp(App):
def __init__(self):
App.__init__(self)
if self.options.series_id:
self.data.update({'series_id': int(self.options.series_id)})
if self.options.chapter_id:
self.data.update({'chapter_id': int(self.options.chapter_id)})
self.manga = MangaReader()
def _parse_args(self, parser):
App._parse_args(self, parser)
parser.add_option('--series_id', dest='series_id', default='',
help='Series ID')
parser.add_option('--chapter_id', dest='chapter_id', default='',
help='Chapter ID')
if __name__ == '__main__':
#import sys
#mr = MangaReader()
#print mr.list_chapters({'series_id': 144, 'series': 'kekkaishi'})
#print mr.list_pages({'series_id': 144, 'series': 'kekkaishi', 'chapter_id': 9422, 'chapter': 1})
#mr.download_page({'series_id': 144, 'series': 'kekkaishi', 'chapter_id': 9422, 'chapter': 1, 'page': 1})
#mr.download_chapter({'series_id': 144, 'series': 'kekkaishi', 'chapter_id': 9422, 'chapter': 1})
#sys.exit(-1)
app = MangaReaderApp()
app.run()