Skip to content

Commit d61601f

Browse files
committed
^q^
1 parent f3a5236 commit d61601f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+749
-319
lines changed

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
## Links
1111
- [Download](https://github.com/KurtBestor/Hitomi-Downloader/releases/latest)
1212
- [Issues](https://github.com/KurtBestor/Hitomi-Downloader/issues)
13-
- [Scripts](https://github.com/KurtBestor/Hitomi-Downloader/wiki/Scripts)
13+
- [Scripts & Plugins](https://github.com/KurtBestor/Hitomi-Downloader/wiki/Scripts-&-Plugins)
1414
- [Chrome Extension](https://github.com/KurtBestor/Hitomi-Downloader/wiki/Chrome-Extension)
1515

1616
## Demo
@@ -60,8 +60,9 @@
6060
| **Iwara** | <https://iwara.tv><br><https://ecchi.iwara.tv> |
6161
| **Jmana** | <https://jmana.net> |
6262
| **カクヨム** | <https://kakuyomu.jp> |
63-
| **Likee** | <https://likee.video> |
6463
| **Luscious** | <https://luscious.net> |
64+
| **Mastodon** | <https://mastodon.social> |
65+
| **Misskey** | <https://misskey.io> |
6566
| **MyReadingManga** | <https://myreadingmanga.info> |
6667
| **Naver Blog** | <https://blog.naver.com> |
6768
| **Naver Cafe** | <https://cafe.naver.com> |
@@ -82,6 +83,7 @@
8283
| **Sankaku Complex** | <https://www.sankakucomplex.com><br><https://chan.sankakucomplex.com><br><https://idol.sankakucomplex.com> |
8384
| **Soundcloud** | <https://soundcloud.com> |
8485
| **小説家になろう** | <https://syosetu.com> |
86+
| **TikTok** | <https://tiktok.com><br><https://douyin.com>|
8587
| **TOKYO Motion** | <https://tokyomotion.net> |
8688
| **Tumblr** | <https://tumblr.com> |
8789
| **Twitch** | <https://twitch.tv> |

src/extractor/afreeca_downloader.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ def __init__(self, stream, referer, id, title, url_thumb):
2222
downloader.download(url_thumb, buffer=self.thumb)
2323

2424

25+
class LoginRequired(errors.LoginRequired):
26+
def __init__(self, *args):
27+
super().__init__(*args, method='browser', url='https://login.afreecatv.com/afreeca/login.php')
28+
29+
2530

2631
class Downloader_afreeca(Downloader):
2732
type = 'afreeca'
@@ -61,11 +66,11 @@ def get_video(url, session, cw):
6166

6267
html = downloader.read_html(url, session=session)
6368
if "document.location.href='https://login." in html:
64-
raise errors.LoginRequired()
69+
raise LoginRequired()
6570
if len(html) < 2000:
6671
alert = re.find(r'''alert\(['"](.+?)['"]\)''', html)
6772
if alert:
68-
raise errors.LoginRequired(alert)
73+
raise LoginRequired(alert)
6974
soup = Soup(html)
7075

7176
url_thumb = soup.find('meta', {'property': 'og:image'}).attrs['content']
@@ -85,7 +90,7 @@ def get_video(url, session, cw):
8590
title = data['full_title']
8691

8792
if data.get('adult_status') == 'notLogin':
88-
raise errors.LoginRequired(title)
93+
raise LoginRequired(title)
8994

9095
urls_m3u8 = []
9196
for file in data['files']:

src/extractor/baraag_downloader.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ def read(self):
2828
id_ = get_id(self.url)
2929
info = get_info('baraag.net', id_, f'baraag_{id_}', self.session, self.cw)
3030

31-
for img in info['imgs']:
32-
self.urls.append(img.url)
31+
self.urls += info['files']
3332

3433
self.title = clean_title('{} (baraag_{})'.format(info['title'], id_))

src/extractor/etc_downloader.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ def _get_video(url, session, cw, ie_key=None, allow_m3u8=True):
120120
fs = []
121121
for i, f in enumerate(formats):
122122
f['_index'] = i
123-
f['_resolution'] = int_or_none(re.find('([0-9]+)p', f['format'], re.IGNORECASE)) or f.get('height') or f.get('width') or int_or_none(f.get('quality')) or int(f.get('vcodec', 'none') != 'none') #5995
123+
f['_resolution'] = int_or_none(re.find(r'([0-9]+)p', f['format'], re.I)) or f.get('height') or f.get('width') or int_or_none(f.get('quality')) or int(f.get('vcodec', 'none') != 'none') #5995
124124
f['_vbr'] = f.get('vbr') or 0
125125
f['_audio'] = f.get('abr') or f.get('asr') or int(f.get('acodec', 'none') != 'none')
126126
print_(format_(f))
@@ -144,7 +144,7 @@ def filter_f(fs):
144144
print_('invalid url: {}'.format(f['url']))
145145
return list(fs)[0]#
146146

147-
f_video = filter_f(reversed(sorted(fs, key=lambda f:(f['_resolution'], f['_vbr'], f['_index']))))
147+
f_video = filter_f(sorted(fs, key=lambda f:(f['_resolution'], int(bool(f['_audio'])), f['_vbr'], f['_index']), reverse=True)) #6072, #6118
148148
print_('video0: {}'.format(format_(f_video)))
149149

150150
if f_video['_audio']:

src/extractor/fc2_downloader.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ class Downloader_fc2(Downloader):
1414

1515
@classmethod
1616
def fix_url(cls, url):
17-
if not re.match('https?://.+', url, re.IGNORECASE):
18-
url = 'https://video.fc2.com/content/{}'.format(url)
17+
if not re.match(r'https?://.+', url, re.I):
18+
url = f'https://video.fc2.com/content/{url}'
1919
return url
2020

2121
@classmethod

src/extractor/iwara_downloader.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ def f(html, browser=None):
126126
if time() - t0 > 10 or '/profile/' in url.lower():
127127
for a in soup.findAll('a'):
128128
if urljoin(url, a.get('href', '')) == urljoin(url, '/login'):
129-
raise errors.LoginRequired(method='browser', url='https://www.iwara.tv/login') #5794
129+
raise errors.LoginRequired(method='browser', url='https://www.iwara.tv/login', cookie=False) #5794
130130
buttons = soup.findAll(class_='button--primary')
131131
if buttons:
132132
for i, button in enumerate(buttons):

src/extractor/jmana_downloader.py

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import bs4
1010
import clf2
1111
PATTERN = r'jmana[0-9]*.*/(comic_list_title|book)\?book'
12-
PATTERN_ALL = r'jmana[0-9]*.*/(comic_list_title|book|bookdetail)\?book'
12+
PATTERN_ALL = r'jmana[0-9]*.*/((comic_list_title|book|bookdetail)\?book|book_by_title\?title)' #6157
1313
PATTERN_ID = '[?&]bookdetailid=([0-9]+)'
1414

1515

@@ -56,7 +56,7 @@ def init(self):
5656
self.url = self.fix_url(url)
5757
self._soup = None
5858

59-
for i, page in enumerate(get_pages(self.url, self.session, self.soup)):
59+
for i, page in enumerate(get_pages(self.url, self.soup, self.session)):
6060
if page.id == int(op['value']):
6161
break
6262
else:
@@ -147,10 +147,7 @@ def get_imgs_page(page, referer, session, cw=None):
147147
return imgs
148148

149149

150-
def get_pages(url, session=None, soup=None):
151-
if soup is None:
152-
res = clf2.solve(url, session=session) #4070
153-
soup = Soup(res['html'])
150+
def get_pages(url, soup, session):
154151
pages = []
155152
for inner in soup.findAll('div', class_='inner'):
156153
a = inner.find('a')
@@ -172,12 +169,13 @@ def get_pages(url, session=None, soup=None):
172169

173170

174171
@page_selector.register('jmana')
175-
@try_n(4)
176-
def f(url):
172+
def f(url, win):
177173
if re.search(PATTERN_ID, url):
178174
raise Exception(tr_('목록 주소를 입력해주세요'))
179175
session = Session()
180-
pages = get_pages(url, session=session)
176+
res = clf2.solve(url, session=session, win=win) #4070
177+
soup = Soup(res['html'])
178+
pages = get_pages(url, soup, session)
181179
return pages
182180

183181

@@ -186,7 +184,7 @@ def get_imgs(url, title, session, soup=None, cw=None):
186184
if soup is None:
187185
html = downloader.read_html(url, session=session)
188186
soup = Soup(html)
189-
pages = get_pages(url, soup=soup)
187+
pages = get_pages(url, soup, session)
190188
print_('pages: {}'.format(len(pages)))
191189
pages = page_selector.filter(pages, cw)
192190
imgs = []

src/extractor/lhscan_downloader.py

Lines changed: 14 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ def __init__(self, title, url):
3636
self.url = url
3737

3838

39-
def get_soup_session(url, cw=None):
39+
def get_soup_session(url, cw=None, win=None):
4040
print_ = get_print(cw)
4141
session = Session()
42-
res = clf2.solve(url, session=session, cw=cw)
42+
res = clf2.solve(url, session=session, cw=cw, win=win)
4343
print_('{} -> {}'.format(url, res['url']))
4444
if res['url'].rstrip('/') == 'https://welovemanga.one':
4545
raise errors.LoginRequired()
@@ -55,10 +55,9 @@ class Downloader_lhscan(Downloader):
5555
]
5656
MAX_CORE = 16
5757
display_name = 'LHScan'
58-
_soup = None
5958

6059
def init(self):
61-
self._soup, self.session = get_soup_session(self.url, self.cw)
60+
self.soup, self.session = get_soup_session(self.url, self.cw)
6261
if not self.soup.find('ul', class_='manga-info'):
6362
raise errors.Invalid('{}: {}'.format(tr_('목록 주소를 입력해주세요'), self.url))
6463

@@ -68,21 +67,6 @@ def fix_url(cls, url):
6867
url = url.replace('welovemanga.net', 'welovemanga.one') #4298
6968
return url
7069

71-
@property
72-
def soup(self):
73-
if self._soup is None:
74-
for try_ in range(8):
75-
try:
76-
html = downloader.read_html(self.url, session=self.session)
77-
break
78-
except Exception as e:
79-
e_ = e
80-
print(e)
81-
else:
82-
raise e_
83-
self._soup = Soup(html)
84-
return self._soup
85-
8670
@property
8771
def name(self):
8872
title = self.soup.find('ul', class_='manga-info').find('h3').text
@@ -115,10 +99,10 @@ def get_imgs_page(page, referer, session, cw=None):
11599
pass
116100
soup = Soup(html)
117101

118-
view = soup.find('div', class_='chapter-content')
119-
120-
if not view:
121-
raise Exception('no chapter-content')
102+
cid = re.find(r'''load_image\(([0-9]+)''', html)
103+
if cid: #6186
104+
url_api = urljoin(page.url, f'/app/manga/controllers/cont.listImg.php?cid={cid}')
105+
soup = downloader.read_soup(url_api, page.url, session=session)
122106

123107
imgs = []
124108
for img in soup.findAll('img', class_='chapter-img'):
@@ -140,9 +124,12 @@ def get_imgs_page(page, referer, session, cw=None):
140124
continue
141125
if '/uploads/lazy_loading.gif' in src:
142126
continue
127+
if '/xstaff.jpg.pagespeed.ic.gPQ2SGcYaN.webp' in src:
128+
continue
143129
src = src.replace('\n', '').replace('\r', '') #5238
144-
if 'proxy.php?link=' not in src: #5351
145-
src = 'https://welovekai.com/proxy.php?link=' + src #5238
130+
#6105
131+
## if 'proxy.php?link=' not in src: #5351
132+
## src = 'https://welovekai.com/proxy.php?link=' + src #5238
146133
if not imgs:
147134
print_(src0)
148135
print_(src)
@@ -174,9 +161,8 @@ def get_pages(url, session, soup=None, cw=None):
174161

175162

176163
@page_selector.register('lhscan')
177-
@try_n(4)
178-
def f(url):
179-
soup, session = get_soup_session(url)
164+
def f(url, win):
165+
soup, session = get_soup_session(url, win=win)
180166
pages = get_pages(url, session, soup=soup)
181167
return pages
182168

src/extractor/likee_downloader.py

Lines changed: 0 additions & 117 deletions
This file was deleted.

0 commit comments

Comments
 (0)