1
0
mirror of https://github.com/mikf/gallery-dl.git synced 2024-11-22 02:32:33 +01:00

[subscribestar] add login capabilities (#852)

This commit is contained in:
Mike Fährmann 2020-07-17 19:42:32 +02:00
parent ecaecc4064
commit d5fcffcced
No known key found for this signature in database
GPG Key ID: 5680CA389D365A88
5 changed files with 46 additions and 4 deletions

View File

@ -206,7 +206,7 @@ a username & password pair. This is necessary for
``pixiv``, ``nijie``, and ``seiga``
and optional for
``danbooru``, ``e621``, ``exhentai``, ``idolcomplex``, ``instagram``,
``luscious``, ``sankaku``, ``tsumino``, and ``twitter``.
``luscious``, ``sankaku``, ``subscribestar``, ``tsumino``, and ``twitter``.
You can set the necessary information in your configuration file
(cf. gallery-dl.conf_)

View File

@ -231,6 +231,7 @@ Description The username and password to use when attempting to log in to
* ``instagram``
* ``luscious``
* ``sankaku``
* ``subscribestar``
* ``tsumino``
* ``twitter``

View File

@ -121,7 +121,7 @@ SlickPic https://www.slickpic.com/ Albums, User Profiles
SlideShare https://www.slideshare.net/ Presentations
SmugMug https://www.smugmug.com/ |smugmug-C| Optional (`OAuth <https://github.com/mikf/gallery-dl#oauth>`__)
Speaker Deck https://speakerdeck.com/ Presentations
SubscribeStar https://www.subscribestar.com/ Posts, User Profiles Optional (`Cookies <https://github.com/mikf/gallery-dl#cookies>`__)
SubscribeStar https://www.subscribestar.com/ Posts, User Profiles Optional
The /b/ Archive https://thebarchive.com/ Threads
Tsumino https://www.tsumino.com/ Galleries, Search Results Optional
Tumblr https://www.tumblr.com/ Likes, Posts, Tag Searches, User Profiles Optional (`OAuth <https://github.com/mikf/gallery-dl#oauth>`__)

View File

@ -9,7 +9,8 @@
"""Extractors for https://www.subscribestar.com/"""
from .common import Extractor, Message
from .. import text
from .. import text, exception
from ..cache import cache
import datetime
import json
@ -24,17 +25,21 @@ class SubscribestarExtractor(Extractor):
directory_fmt = ("{category}", "{author_name}")
filename_fmt = "{post_id}_{id}.{extension}"
archive_fmt = "{id}"
cookiedomain = "www.subscribestar.com"
cookienames = ("auth_token",)
def __init__(self, match):
tld, self.item = match.groups()
if tld == "adult":
self.root = "https://subscribestar.adult"
self.cookiedomain = "subscribestar.adult"
self.subcategory += "-adult"
Extractor.__init__(self, match)
self.metadata = self.config("metadata", False)
self._year = " " + str(datetime.date.today().year)
def items(self):
self.login()
for post_html in self.posts():
media = self._media_from_post(post_html)
if not media:
@ -49,6 +54,42 @@ class SubscribestarExtractor(Extractor):
def posts(self):
"""Yield HTML content of all relevant posts"""
def login(self):
if self._check_cookies(self.cookienames):
return
username, password = self._get_auth_info()
if username:
cookies = self._login_impl(username, password)
self._update_cookies(cookies)
@cache(maxage=28*24*3600, keyarg=1)
def _login_impl(self, username, password):
self.log.info("Logging in as %s", username)
url = "https://www.subscribestar.com/session.json"
headers = {
"Origin" : "https://www.subscribestar.com",
"Referer" : "https://www.subscribestar.com/login",
"X-Requested-With": "XMLHttpRequest",
}
data = {
"utf8" : "",
"email" : username,
"password": password,
}
response = self.request(
url, method="POST", headers=headers, data=data, fatal=False)
if response.json().get("errors"):
self.log.debug(response.json()["errors"])
raise exception.AuthenticationError()
return {
cookie.name: cookie.value
for cookie in response.cookies
if cookie.name.startswith("auth")
}
@staticmethod
def _media_from_post(html):
gallery = text.extract(html, 'data-gallery="', '"')[0]

View File

@ -172,7 +172,7 @@ AUTH_MAP = {
"sankaku" : "Optional",
"seiga" : "Required",
"smugmug" : "Optional" + _OAUTH,
"subscribestar" : "Optional" + _COOKIES,
"subscribestar" : "Optional",
"tsumino" : "Optional",
"tumblr" : "Optional" + _OAUTH,
"twitter" : "Optional",