summaryrefslogtreecommitdiffstats
path: root/gallery_dl/extractor/mangoxo.py
diff options
context:
space:
mode:
Diffstat (limited to 'gallery_dl/extractor/mangoxo.py')
-rw-r--r--gallery_dl/extractor/mangoxo.py37
1 files changed, 21 insertions, 16 deletions
diff --git a/gallery_dl/extractor/mangoxo.py b/gallery_dl/extractor/mangoxo.py
index 5d240d4..d45fbc9 100644
--- a/gallery_dl/extractor/mangoxo.py
+++ b/gallery_dl/extractor/mangoxo.py
@@ -36,12 +36,16 @@ class MangoxoExtractor(Extractor):
def _login_impl(self, username, password):
self.log.info("Logging in as %s", username)
+ url = self.root + "/login"
+ page = self.request(url).text
+ token = text.extract(page, 'id="loginToken" value="', '"')[0]
+
url = self.root + "/api/login"
headers = {
"X-Requested-With": "XMLHttpRequest",
"Referer": self.root + "/login",
}
- data = self._sign_by_md5(username, password)
+ data = self._sign_by_md5(username, password, token)
response = self.request(url, method="POST", headers=headers, data=data)
data = response.json()
@@ -50,11 +54,12 @@ class MangoxoExtractor(Extractor):
return {"SESSION": self.session.cookies.get("SESSION")}
@staticmethod
- def _sign_by_md5(username, password):
+ def _sign_by_md5(username, password, token):
# https://dns.mangoxo.com/libs/plugins/phoenix-ui/js/phoenix-ui.js
params = [
("username" , username),
("password" , password),
+ ("token" , token),
("timestamp", str(int(time.time()))),
]
query = "&".join("=".join(item) for item in sorted(params))
@@ -79,8 +84,8 @@ class MangoxoAlbumExtractor(MangoxoExtractor):
"url": "ad921fe62663b06e7d73997f7d00646cab7bdd0d",
"keyword": {
"channel": {
- "id": "Jpw9ywQ4",
- "name": "绘画艺术赏析",
+ "id": "gaxO16d8",
+ "name": "Phoenix",
"cover": str,
},
"album": {
@@ -116,14 +121,14 @@ class MangoxoAlbumExtractor(MangoxoExtractor):
def metadata(self, page):
"""Return general metadata"""
- title, pos = text.extract(page, '<title>', '</title>')
- _ , pos = text.extract(page, 'class="desc"', '', pos)
- cid , pos = text.extract(page, '//www.mangoxo.com/channel/', '"', pos)
- cname, pos = text.extract(page, '>', '<', pos)
- count, pos = text.extract(page, 'id="pic-count">', '<', pos)
- cover, pos = text.extract(page, ' src="', '"', pos)
- date , pos = text.extract(page, '</i>', '<', pos)
- descr, pos = text.extract(page, '<pre>', '</pre>', pos)
+ extr = text.extract_from(page)
+ title = extr('<title>', '</title>')
+ count = extr('id="pic-count">', '<')
+ cid = extr('<img alt="', '"')
+ cover = extr(' src="', '"')
+ cname = extr('target="_blank">', '<')
+ date = extr('</i>', '<')
+ descr = extr('<pre>', '</pre>')
return {
"channel": {
@@ -157,8 +162,8 @@ class MangoxoAlbumExtractor(MangoxoExtractor):
class MangoxoChannelExtractor(MangoxoExtractor):
"""Extractor for all albums on a mangoxo channel"""
subcategory = "channel"
- pattern = r"(?:https?://)?(?:www\.)?mangoxo\.com/channel/(\w+)"
- test = ("https://www.mangoxo.com/channel/QeYKRkO0", {
+ pattern = r"(?:https?://)?(?:www\.)?mangoxo\.com/(\w+)/album"
+ test = ("https://www.mangoxo.com/phoenix/album", {
"pattern": MangoxoAlbumExtractor.pattern,
"range": "1-30",
"count": "> 20",
@@ -166,12 +171,12 @@ class MangoxoChannelExtractor(MangoxoExtractor):
def __init__(self, match):
MangoxoExtractor.__init__(self, match)
- self.channel_id = match.group(1)
+ self.user = match.group(1)
def items(self):
self.login()
num = total = 1
- url = "{}/channel/{}/album/".format(self.root, self.channel_id)
+ url = "{}/{}/album/".format(self.root, self.user)
data = {"_extractor": MangoxoAlbumExtractor}
while True: