129
132
self.__getFromCache(main, __parseCategory, __addSingleItem)
134
def search(self, main):
135
vq = _get_keyboard( heading=lang(30046) )
137
if ( not vq ): return False, 0
138
# we need to set the title to our query
139
info("search query = " + vq)
140
dialog = xbmcgui.DialogProgress()
141
dialog.create("Mangas-TV.com", lang(30034), lang(30035))
144
data = urllib.urlencode({"formAction" : "textRecherche", 'textRecherche' : vq, 'resultLicence': 1, 'submit':'Valider'})
145
response = self.browser.opener.open(main.args.url, data)
146
htmlsource = unicode(response.read(), 'utf-8', 'replace')
148
soup = BeautifulSoup(htmlsource)
152
self.__parseAnimeSeries(soup, listItems);
153
self.endofdirectory(sortMethod='title', dontAddToHierarchy=False)
156
def __parseAnimeSeries(self, soup, listItems):
157
listArticleManga = soup.findAll('div', attrs={'class':'articleManga'})
158
total = len(listArticleManga)
159
for articleManga in listArticleManga:
160
title = articleManga.find("div", attrs={"class": "nomMangaFr"}).find("a").find(text=True).strip()
161
url = __site_url__ + articleManga.find("div", attrs={"class": "nomMangaFr"}).find("a")['href']
162
image = __site_url__ + articleManga.find('img', attrs={'class': 'articleMangaImage'})['src']
163
desc = articleManga.find('p', attrs={'class': 'articleMangaDescription'}).find(text=True).strip()
164
detailManga = articleManga.find("div", attrs={"class": "optionDetailManga"})
165
stats = detailManga.findAll('b')
169
genreTable = articleManga.find("td", attrs={"class": "articleMangaContenu"}).find('table')
170
if genreTable is not None:
171
genreList = genreTable.findAll('td')
175
for genreTd in genreList:
176
genreCandidate = join(genreTd.find("br").findNextSiblings(text=True), '').strip()
177
genreCandidate = genreCandidate.replace("\n votes", "")
178
gVotes = int(genreTd.find("b").string)
180
genre = genre + ', ' + genreCandidate
182
genre = genreCandidate
187
m = re.search("Episodes disponible\(s\): (([0-9]*?)/([0-9a-zA-Z_]*))", str(detailManga))
189
name = title + " (%s episodes)" % m.group(1)
190
nbEpisodes = m.group(2)
192
infoLabels = { "name": title, "plot": desc, "genre": genre}
194
infoLabels['nbepisodes'] = nbEpisodes
196
rating, votes, views = stats[1].find(text=True), stats[2].find(text=True), stats[3].find(text=True)
197
if rating is not None and is_number(rating):
198
infoLabels['rating'] = float(rating)
200
infoLabels['rating'] = 0.0
201
if votes is not None and is_number(rating):
202
infoLabels['votes'] = long(votes)
204
infoLabels['votes'] = 0
205
if views is not None and is_number(rating):
206
infoLabels['playcount'] = long(views)
208
infoLabels['playcount'] = 0
209
info = {'Title': name, 'mode' : SHOW_EPISODES_MODE, 'url': url , 'Thumb' : image}
210
debug('info = %s, infoLabel = %s' % (info, infoLabels))
211
item = (info, infoLabels)
212
listItems.append(item)
213
self.__addAnimeSeriesSingleItem(item, total)
215
def __addAnimeSeriesSingleItem(self, itemTuple, total):
216
item, extra = itemTuple
217
self.addItem(info=item, extrainfo=extra, total_items=total)
131
219
def showAnimeSeries(self, main):
132
def __parseAnimeSeries(soup, listItems):
133
listArticleManga = soup.findAll('div', attrs={'class':'articleManga'})
134
total = len(listArticleManga)
135
for articleManga in listArticleManga:
136
title = articleManga.find("div", attrs={"class": "nomMangaFr"}).find("a").find(text=True).strip()
137
url = __site_url__ + articleManga.find("div", attrs={"class": "nomMangaFr"}).find("a")['href']
138
image = __site_url__ + articleManga.find('img', attrs={'class': 'articleMangaImage'})['src']
139
desc = articleManga.find('p', attrs={'class': 'articleMangaDescription'}).find(text=True).strip()
140
detailManga = articleManga.find("div", attrs={"class": "optionDetailManga"})
141
stats = detailManga.findAll('b')
145
genreTable = articleManga.find("td", attrs={"class": "articleMangaContenu"}).find('table')
146
if genreTable is not None:
147
genreList = genreTable.findAll('td')
151
for genreTd in genreList:
152
genreCandidate = join(genreTd.find("br").findNextSiblings(text=True), '').strip()
153
genreCandidate = genreCandidate.replace("\n votes", "")
154
gVotes = int(genreTd.find("b").string)
156
genre = genre + ', ' + genreCandidate
158
genre = genreCandidate
163
m = re.search("Episodes disponible\(s\): (([0-9]*?)/([0-9a-zA-Z_]*))", str(detailManga))
165
name = title + " (%s episodes)" % m.group(1)
166
nbEpisodes = m.group(2)
168
infoLabels = { "name": title, "plot": desc, "genre": genre}
170
infoLabels['nbepisodes'] = nbEpisodes
172
rating, votes, views = stats[1].find(text=True), stats[2].find(text=True), stats[3].find(text=True)
173
if rating is not None and is_number(rating):
174
infoLabels['rating'] = float(rating)
176
infoLabels['rating'] = 0.0
177
if votes is not None and is_number(rating):
178
infoLabels['votes'] = long(votes)
180
infoLabels['votes'] = 0
181
if views is not None and is_number(rating):
182
infoLabels['playcount'] = long(views)
184
infoLabels['playcount'] = 0
185
info = {'Title': name, 'mode' : SHOW_EPISODES_MODE, 'url': url , 'Thumb' : image}
186
debug('info = %s, infoLabel = %s' % (info, infoLabels))
187
item = (info, infoLabels)
188
listItems.append(item)
189
__addSingleItem(item, total)
191
def __addSingleItem(itemTuple, total):
192
item, extra = itemTuple
193
self.addItem(info=item, extrainfo=extra, total_items=total)
195
self.__getFromCache(main, __parseAnimeSeries, __addSingleItem)
221
self.__getFromCache(main, self.__parseAnimeSeries, self.__addAnimeSeriesSingleItem)
197
223
def showEpisodes(self, main, dontAddToHierarchy=False):
198
224
def __showEpisodes(soup, listItems):