فهرست منبع

Fix batoto parser

inorichi 9 سال پیش
والد
کامیت
e857a44987

+ 16 - 0
app/src/main/java/eu/kanade/mangafeed/sources/Batoto.java

@@ -28,6 +28,7 @@ public class Batoto extends Source {
     public static final String INITIAL_UPDATE_URL =
             "http://bato.to/search_ajax?order_cond=views&order=desc&p=";
     public static final String INITIAL_SEARCH_URL = "http://bato.to/search_ajax?";
+    public static final String INITIAL_PAGE_URL = "http://bato.to/areader?";
 
 
     public Batoto(NetworkHelper networkService, CacheManager cacheManager) {
@@ -43,6 +44,7 @@ public class Batoto extends Source {
     protected Headers.Builder headersBuilder() {
         Headers.Builder builder = super.headersBuilder();
         builder.add("Cookie", "lang_option=English");
+        builder.add("Referer", "http://bato.to/reader");
         return builder;
     }
 
@@ -112,6 +114,20 @@ public class Batoto extends Source {
         return "http://bato.to/comic_pop?id=" + mangaId;
     }
 
+    @Override
+    protected String getChapterPageUrl(String defaultPageUrl) {
+        String id = defaultPageUrl.substring(defaultPageUrl.indexOf("#") + 1);
+        return INITIAL_PAGE_URL + "id=" + id + "&p=1";
+    }
+
+    @Override
+    protected String getRemainingPagesUrl(String defaultPageUrl) {
+        int start = defaultPageUrl.indexOf("#") + 1;
+        int end = defaultPageUrl.indexOf("_", start);
+        String id = defaultPageUrl.substring(start, end);
+        return INITIAL_PAGE_URL + "id=" + id + "&p=" + defaultPageUrl.substring(end+1);
+    }
+
     private List<Manga> parseMangasFromHtml(String unparsedHtml) {
         if (unparsedHtml.contains("No (more) comics found!")) {
             return new ArrayList<>();

+ 12 - 2
app/src/main/java/eu/kanade/mangafeed/sources/Source.java

@@ -38,6 +38,16 @@ public abstract class Source {
         return defaultMangaUrl;
     }
 
+    // Get the URL of the first page that contains a source image and the page list
+    protected String getChapterPageUrl(String defaultPageUrl) {
+        return defaultPageUrl;
+    }
+
+    // Get the URL of the remaining pages that contains source images
+    protected String getRemainingPagesUrl(String defaultPageUrl) {
+        return defaultPageUrl;
+    }
+
     // Default headers, it can be overriden by children or just add new keys
     protected Headers.Builder headersBuilder() {
         Headers.Builder builder = new Headers.Builder();
@@ -97,7 +107,7 @@ public abstract class Source {
         return mCacheManager.getPageUrlsFromDiskCache(chapterUrl)
                 .onErrorResumeNext(throwable -> {
                     return mNetworkService
-                            .getStringResponse(chapterUrl, mNetworkService.NULL_CACHE_CONTROL, mRequestHeaders)
+                            .getStringResponse(getChapterPageUrl(chapterUrl), mNetworkService.NULL_CACHE_CONTROL, mRequestHeaders)
                             .flatMap(unparsedHtml -> {
                                 List<String> pageUrls = parseHtmlToPageUrls(unparsedHtml);
                                 return Observable.just(getFirstImageFromPageUrls(pageUrls, unparsedHtml));
@@ -119,7 +129,7 @@ public abstract class Source {
 
     private Observable<Page> getImageUrlFromPage(final Page page) {
         return mNetworkService
-                .getStringResponse(page.getUrl(), mNetworkService.NULL_CACHE_CONTROL, mRequestHeaders)
+                .getStringResponse(getRemainingPagesUrl(page.getUrl()), mNetworkService.NULL_CACHE_CONTROL, mRequestHeaders)
                 .flatMap(unparsedHtml -> Observable.just(parseHtmlToImageUrl(unparsedHtml)))
                 .flatMap(imageUrl -> {
                     page.setImageUrl(imageUrl);