1+ var Base64 = { _keyStr :"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" , encode :function ( e ) { var t = "" ; var n , r , i , s , o , u , a ; var f = 0 ; e = Base64 . _utf8_encode ( e ) ; while ( f < e . length ) { n = e . charCodeAt ( f ++ ) ; r = e . charCodeAt ( f ++ ) ; i = e . charCodeAt ( f ++ ) ; s = n >> 2 ; o = ( n & 3 ) << 4 | r >> 4 ; u = ( r & 15 ) << 2 | i >> 6 ; a = i & 63 ; if ( isNaN ( r ) ) { u = a = 64 } else if ( isNaN ( i ) ) { a = 64 } t = t + this . _keyStr . charAt ( s ) + this . _keyStr . charAt ( o ) + this . _keyStr . charAt ( u ) + this . _keyStr . charAt ( a ) } return t } , decode :function ( e ) { var t = "" ; var n , r , i ; var s , o , u , a ; var f = 0 ; e = e . replace ( / [ ^ A - Z a - z 0 - 9 \+ \/ \= ] / g, "" ) ; while ( f < e . length ) { s = this . _keyStr . indexOf ( e . charAt ( f ++ ) ) ; o = this . _keyStr . indexOf ( e . charAt ( f ++ ) ) ; u = this . _keyStr . indexOf ( e . charAt ( f ++ ) ) ; a = this . _keyStr . indexOf ( e . charAt ( f ++ ) ) ; n = s << 2 | o >> 4 ; r = ( o & 15 ) << 4 | u >> 2 ; i = ( u & 3 ) << 6 | a ; t = t + String . fromCharCode ( n ) ; if ( u != 64 ) { t = t + String . fromCharCode ( r ) } if ( a != 64 ) { t = t + String . fromCharCode ( i ) } } t = Base64 . _utf8_decode ( t ) ; return t } , _utf8_encode :function ( e ) { e = e . replace ( / \r \n / g, "\n" ) ; var t = "" ; for ( var n = 0 ; n < e . length ; n ++ ) { var r = e . charCodeAt ( n ) ; if ( r < 128 ) { t += String . fromCharCode ( r ) } else if ( r > 127 && r < 2048 ) { t += String . fromCharCode ( r >> 6 | 192 ) ; t += String . fromCharCode ( r & 63 | 128 ) } else { t += String . fromCharCode ( r >> 12 | 224 ) ; t += String . fromCharCode ( r >> 6 & 63 | 128 ) ; t += String . fromCharCode ( r & 63 | 128 ) } } return t } , _utf8_decode :function ( e ) { var t = "" ; var n = 0 ; var r = c1 = c2 = 0 ; while ( n < e . length ) { r = e . charCodeAt ( n ) ; if ( r < 128 ) { t += String . fromCharCode ( r ) ; n ++ } else if ( r > 191 && r < 224 ) { c2 = e . charCodeAt ( n + 1 ) ; t += String . fromCharCode ( ( r & 31 ) << 6 | c2 & 63 ) ; n += 2 } else { c2 = e . charCodeAt ( n + 1 ) ; c3 = e . charCodeAt ( n + 2 ) ; t += String . fromCharCode ( ( r & 15 ) << 12 | ( c2 & 63 ) << 6 | c3 & 63 ) ; n += 3 } } return t } }
2+
13function searchManga ( query ) {
24 var mangas = [ ] ;
35 const res = mango . get ( 'https://www.manhuadb.com/search?q=' + encodeURIComponent ( query ) ) ;
@@ -58,11 +60,20 @@ function selectChapter(id) {
5860 if ( res . status_code !== 200 )
5961 mango . raise ( 'Failed to get chapter. Status ' + res . status_code ) ;
6062 var html = res . body ;
63+ var script = mango . text ( mango . css ( html , 'script' ) [ 7 ] ) ;
64+ script = script . substring ( 16 , script . length - 2 ) ;
65+ var img_urls = JSON . parse ( Base64 . decode ( script ) ) ;
66+ var img_url_front = mango . attribute ( mango . css ( html , '.show-pic' ) [ 0 ] , 'src' ) ;
67+ img_url_front = img_url_front . substring ( 0 , img_url_front . search ( img_urls [ 0 ] [ 'img' ] ) ) ;
68+ var image_urls = [ ] ;
69+ for ( i = 0 ; i < img_urls . length ; i ++ ) {
70+ image_urls . push ( img_url_front + img_urls [ i ] [ 'img' ] )
71+ }
6172 var info = mango . css ( html , '.breadcrumb-item' ) ;
6273 var title = mango . text ( mango . css ( info [ info . length - 1 ] , 'a' ) [ 0 ] ) ;
63- var page_num = parseInt ( mango . text ( info [ info . length - 1 ] ) . split ( ' ' ) [ 5 ] ) ;
74+ var page_num = img_urls . length ;
6475 var manga_title = mango . text ( mango . css ( info [ info . length - 2 ] , 'a' ) [ 0 ] ) ;
65- mango . storage ( 'url ' , 'https://www.manhuadb.com/manhua/' + ids [ 0 ] + '/' + ids [ 1 ] + '_p1.html' ) ;
76+ mango . storage ( 'images ' , image_urls . toString ( ) ) ;
6677 mango . storage ( 'page' , '0' ) ;
6778
6879 return JSON . stringify ( {
@@ -75,17 +86,11 @@ function selectChapter(id) {
7586
7687function nextPage ( ) {
7788 const page = parseInt ( mango . storage ( 'page' ) ) ;
78- const url = mango . storage ( 'url ' ) ;
89+ const urls = mango . storage ( 'images' ) . split ( ', ') ;
7990 const filename = page + '.jpg' ;
80- const res = mango . get ( url ) ;
81- if ( res . status_code !== 200 )
82- mango . raise ( 'Failed to get chapter. Status ' + res . status_code ) ;
83- var html = res . body ;
84- var css = mango . css ( html , '.show-pic' ) ;
85- if ( css . length == 0 ) return JSON . stringify ( { } ) ;
86- var img_url = mango . attribute ( css [ 0 ] , 'src' ) ;
91+ if ( page >= urls . length ) return JSON . stringify ( { } ) ;
92+ var img_url = urls [ page ] ;
8793 mango . storage ( 'page' , ( page + 1 ) . toString ( ) ) ;
88- mango . storage ( 'url' , url . replace ( '_p' + ( page + 1 ) . toString ( ) , '_p' + ( page + 2 ) . toString ( ) ) ) ;
8994 return JSON . stringify ( {
9095 url : img_url ,
9196 filename : filename ,
0 commit comments