diff --git a/dosagelib/plugins/l.py b/dosagelib/plugins/l.py index b82de963a..c42baf8aa 100644 --- a/dosagelib/plugins/l.py +++ b/dosagelib/plugins/l.py @@ -116,7 +116,7 @@ class LifeAsRendered(_ParserScraper): def getPrevUrl(self, url, data): # Fix broken navigation links page = url.rstrip('/').rsplit('/', 1)[-1] - if self.nav and page in self.nav: + if page in self.nav: return self.stripUrl % self.nav[page] return super(LifeAsRendered, self).getPrevUrl(url, data) diff --git a/dosagelib/plugins/s.py b/dosagelib/plugins/s.py index 6afe3c3b4..dc57f4434 100644 --- a/dosagelib/plugins/s.py +++ b/dosagelib/plugins/s.py @@ -335,6 +335,56 @@ class SodiumEyes(_WordPressScraper): url = 'http://sodiumeyes.com/' +class SoloLeveling(_ParserScraper): + url = 'https://w1.sololeveling.net/' + stripUrl = url + 'manga/solo-leveling-chapter-%s/' + firstStripUrl = stripUrl % '1' + imageSearch = '//div[@class="img_container"]//img' + prevSearch = '//a[@rel="prev"]' + latestSearch = '//table[@class="chap_tab"]//a' + starter = indirectStarter + multipleImagesPerStrip = True + imageUrlFixes = { + '94-0_5dd574efda419/28.': '94-0_5dd574efda419/28a.', + '92-0_5dc2fcb9ed562/22.': '92-0_5dc2fcb9ed562/22s.', + '91-0_5db9b881ac2f0/20k.': '91-0_5db9b881ac2f0/20l.', + '91-0_5db9b881ac2f0/23.': '91-0_5db9b881ac2f0/23a.', + '90-0_5db08467ca2b1/07.': '90-0_5db08467ca2b1/07a.', + '90-0_5db08467ca2b1/09.': '90-0_5db08467ca2b1/09a.', + '90-0_5db08467ca2b1/13.': '90-0_5db08467ca2b1/13a.', + '90-0_5db08467ca2b1/14.': '90-0_5db08467ca2b1/14a.', + '90-0_5db08467ca2b1/21.': '90-0_5db08467ca2b1/21a.', + '90-0_5db08467ca2b1/22.': '90-0_5db08467ca2b1/22a.', + '88-0_5d9e0dedb942e/03.': '88-0_5d9e0dedb942e/03b.', + '88-0_5d9e0dedb942e/05.': '88-0_5d9e0dedb942e/05a.', + '88-0_5d9e0dedb942e/30.': '88-0_5d9e0dedb942e/30a.', + '87-0_5d94cdebd9df7/01a.': '87-0_5d94cdebd9df7/01c.' + } + + def imageUrlModifier(self, imageUrl, data): + if 'url=' in imageUrl: + imageUrl = imageUrl.split('url=')[1].split('&')[0] + for fix in self.imageUrlFixes: + imageUrl = imageUrl.replace(fix, self.imageUrlFixes[fix]) + return imageUrl + + def fetchUrls(self, url, data, urlSearch): + # Save link order for position-based filenames + self.imageUrls = super(SoloLeveling, self).fetchUrls(url, data, urlSearch) + self.imageUrls = [self.imageUrlModifier(x, data) for x in self.imageUrls] + return self.imageUrls + + def getPrevUrl(self, url, data): + return self.stripUrl % str(int(url.strip('/').rsplit('-', 1)[-1]) - 1) + + def namer(self, imageUrl, pageUrl): + # Construct filename from episode number and image position on page + episodeNum = pageUrl.strip('/').rsplit('-', 1)[-1] + imageNum = self.imageUrls.index(imageUrl) + imageExt = imageUrl.rsplit('.', 1)[-1] + return "%s-%03d.%s" % (episodeNum, imageNum, imageExt) + + class SomethingPositive(_ParserScraper): url = 'https://www.somethingpositive.net/' stripUrl = url + 'sp%s.shtml'