[aryion] add 'watch' extractor (#8705)
This commit is contained in:
@@ -286,7 +286,7 @@ Consider all listed sites to potentially be NSFW.
|
|||||||
<tr id="aryion" title="aryion">
|
<tr id="aryion" title="aryion">
|
||||||
<td>Eka's Portal</td>
|
<td>Eka's Portal</td>
|
||||||
<td>https://aryion.com/</td>
|
<td>https://aryion.com/</td>
|
||||||
<td>Favorites, Galleries, Posts, Search Results, Tag Searches</td>
|
<td>Favorites, Galleries, Posts, Search Results, Tag Searches, Watches</td>
|
||||||
<td>Supported</td>
|
<td>Supported</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="eporner" title="eporner">
|
<tr id="eporner" title="eporner">
|
||||||
|
|||||||
@@ -77,20 +77,20 @@ class AryionExtractor(Extractor):
|
|||||||
def metadata(self):
|
def metadata(self):
|
||||||
"""Return general metadata"""
|
"""Return general metadata"""
|
||||||
|
|
||||||
def _pagination_params(self, url, params=None, needle=None):
|
def _pagination_params(self, url, params=None, needle=None, quote="'"):
|
||||||
if params is None:
|
if params is None:
|
||||||
params = {"p": 1}
|
params = {"p": 1}
|
||||||
else:
|
else:
|
||||||
params["p"] = text.parse_int(params.get("p"), 1)
|
params["p"] = text.parse_int(params.get("p"), 1)
|
||||||
|
|
||||||
if needle is None:
|
if needle is None:
|
||||||
needle = "class='gallery-item' id='"
|
needle = "class='gallery-item' id=" + quote
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
page = self.request(url, params=params).text
|
page = self.request(url, params=params).text
|
||||||
|
|
||||||
cnt = 0
|
cnt = 0
|
||||||
for post_id in text.extract_iter(page, needle, "'"):
|
for post_id in text.extract_iter(page, needle, quote):
|
||||||
cnt += 1
|
cnt += 1
|
||||||
yield post_id
|
yield post_id
|
||||||
|
|
||||||
@@ -108,6 +108,37 @@ class AryionExtractor(Extractor):
|
|||||||
return
|
return
|
||||||
url = self.root + text.rextr(page, "href='", "'", pos)
|
url = self.root + text.rextr(page, "href='", "'", pos)
|
||||||
|
|
||||||
|
def _pagination_folders(self, url, folder=None):
|
||||||
|
if folder is None:
|
||||||
|
self.kwdict["folder"] = ""
|
||||||
|
else:
|
||||||
|
url = f"{url}/{folder}"
|
||||||
|
self.kwdict["folder"] = folder = text.unquote(folder)
|
||||||
|
self.log.debug("Descending into folder '%s'", folder)
|
||||||
|
|
||||||
|
params = {"p": 1}
|
||||||
|
while True:
|
||||||
|
page = self.request(url, params=params).text
|
||||||
|
|
||||||
|
cnt = 0
|
||||||
|
for item in text.extract_iter(
|
||||||
|
page, "<li class='gallery-item", "</li>"):
|
||||||
|
cnt += 1
|
||||||
|
if text.extr(item, 'data-item-type="', '"') == "Folders":
|
||||||
|
folder = text.extr(item, "href='", "'").rpartition("/")[2]
|
||||||
|
if self.recursive:
|
||||||
|
yield from self._pagination(url, folder)
|
||||||
|
else:
|
||||||
|
self.log.debug("Skipping folder '%s'", folder)
|
||||||
|
else:
|
||||||
|
yield text.extr(item, "data-item-id='", "'")
|
||||||
|
|
||||||
|
if cnt < 40 and ">Next >><" not in page:
|
||||||
|
break
|
||||||
|
params["p"] += 1
|
||||||
|
|
||||||
|
self.kwdict["folder"] = ""
|
||||||
|
|
||||||
def _parse_post(self, post_id):
|
def _parse_post(self, post_id):
|
||||||
url = f"{self.root}/g4/data.php?id={post_id}"
|
url = f"{self.root}/g4/data.php?id={post_id}"
|
||||||
with self.request(url, method="HEAD", fatal=False) as response:
|
with self.request(url, method="HEAD", fatal=False) as response:
|
||||||
@@ -202,7 +233,6 @@ class AryionFavoriteExtractor(AryionExtractor):
|
|||||||
subcategory = "favorite"
|
subcategory = "favorite"
|
||||||
directory_fmt = ("{category}", "{user!l}", "favorites", "{folder}")
|
directory_fmt = ("{category}", "{user!l}", "favorites", "{folder}")
|
||||||
archive_fmt = "f_{user}_{id}"
|
archive_fmt = "f_{user}_{id}"
|
||||||
categorytransfer = True
|
|
||||||
pattern = rf"{BASE_PATTERN}/favorites/([^/?#]+)(?:/([^?#]+))?"
|
pattern = rf"{BASE_PATTERN}/favorites/([^/?#]+)(?:/([^?#]+))?"
|
||||||
example = "https://aryion.com/g4/favorites/USER"
|
example = "https://aryion.com/g4/favorites/USER"
|
||||||
|
|
||||||
@@ -211,38 +241,24 @@ class AryionFavoriteExtractor(AryionExtractor):
|
|||||||
|
|
||||||
def posts(self):
|
def posts(self):
|
||||||
url = f"{self.root}/g4/favorites/{self.user}"
|
url = f"{self.root}/g4/favorites/{self.user}"
|
||||||
return self._pagination(url, self.groups[1])
|
return self._pagination_folders(url, self.groups[1])
|
||||||
|
|
||||||
def _pagination(self, url, folder=None):
|
|
||||||
if folder is None:
|
|
||||||
self.kwdict["folder"] = ""
|
|
||||||
else:
|
|
||||||
url = f"{url}/{folder}"
|
|
||||||
self.kwdict["folder"] = folder = text.unquote(folder)
|
|
||||||
self.log.debug("Descending into folder '%s'", folder)
|
|
||||||
|
|
||||||
params = {"p": 1}
|
class AryionWatchExtractor(AryionExtractor):
|
||||||
while True:
|
"""Extractor for your watched users and tags"""
|
||||||
page = self.request(url, params=params).text
|
subcategory = "watch"
|
||||||
|
directory_fmt = ("{category}", "{user!l}",)
|
||||||
|
pattern = rf"{BASE_PATTERN}/messagepage\.php()"
|
||||||
|
example = "https://aryion.com/g4/messagepage.php"
|
||||||
|
|
||||||
cnt = 0
|
def posts(self):
|
||||||
for item in text.extract_iter(
|
if not self.cookies_check(self.cookies_names):
|
||||||
page, "<li class='gallery-item", "</li>"):
|
raise exception.AuthRequired(
|
||||||
cnt += 1
|
("username & password", "authenticated cookies"),
|
||||||
if text.extr(item, 'data-item-type="', '"') == "Folders":
|
"watched Submissions")
|
||||||
folder = text.extr(item, "href='", "'").rpartition("/")[2]
|
self.cookies.set("g4p_msgpage_style", "plain", domain="aryion.com")
|
||||||
if self.recursive:
|
url = self.root + "/g4/messagepage.php"
|
||||||
yield from self._pagination(url, folder)
|
return self._pagination_params(url, None, 'data-item-id="', '"')
|
||||||
else:
|
|
||||||
self.log.debug("Skipping folder '%s'", folder)
|
|
||||||
else:
|
|
||||||
yield text.extr(item, "data-item-id='", "'")
|
|
||||||
|
|
||||||
if cnt < 40 and ">Next >><" not in page:
|
|
||||||
break
|
|
||||||
params["p"] += 1
|
|
||||||
|
|
||||||
self.kwdict["folder"] = ""
|
|
||||||
|
|
||||||
|
|
||||||
class AryionTagExtractor(AryionExtractor):
|
class AryionTagExtractor(AryionExtractor):
|
||||||
|
|||||||
@@ -167,4 +167,9 @@ __tests__ = (
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"#url" : "https://aryion.com/g4/messagepage.php",
|
||||||
|
"#class" : aryion.AryionWatchExtractor,
|
||||||
|
},
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user