[deviantart] add "journal" extractor

(#14)
This commit is contained in:
Mike Fährmann
2017-05-10 17:21:33 +02:00
parent e5f79ae839
commit 677c8ced11
2 changed files with 38 additions and 5 deletions

View File

@@ -13,7 +13,7 @@ Supported Sites
+-------------------+---------------------------------------+----------------------------------------------------------+ +-------------------+---------------------------------------+----------------------------------------------------------+
|Danbooru |https://danbooru.donmai.us/ |Pools, Posts, Tag-Searches | |Danbooru |https://danbooru.donmai.us/ |Pools, Posts, Tag-Searches |
+-------------------+---------------------------------------+----------------------------------------------------------+ +-------------------+---------------------------------------+----------------------------------------------------------+
|DeviantArt |https://www.deviantart.com/ |Images from Users, Favorites, individual Images | |DeviantArt |https://www.deviantart.com/ |Deviations, Favorites, Galleries, Journals |
+-------------------+---------------------------------------+----------------------------------------------------------+ +-------------------+---------------------------------------+----------------------------------------------------------+
|Doki Reader |https://kobato.hologfx.com/ |Chapters, Manga | |Doki Reader |https://kobato.hologfx.com/ |Chapters, Manga |
+-------------------+---------------------------------------+----------------------------------------------------------+ +-------------------+---------------------------------------+----------------------------------------------------------+

View File

@@ -61,10 +61,18 @@ class DeviantartExtractor(Extractor):
dev = self.api.deviation_content(deviation["deviationid"]) dev = self.api.deviation_content(deviation["deviationid"])
deviation["extension"] = "htm" deviation["extension"] = "htm"
if "css" in dev:
css = dev["css"]
cssclass = "withskin"
else:
css = ""
cssclass = "journal-green"
html = JOURNAL_TEMPLATE.format( html = JOURNAL_TEMPLATE.format(
title=text.escape(deviation["title"]), title=text.escape(deviation["title"]),
html=dev["html"], html=dev["html"],
css=dev["css"] if "css" in dev else "", css=css,
cls=cssclass,
) )
yield Message.Url, html, deviation yield Message.Url, html, deviation
@@ -97,7 +105,7 @@ class DeviantartExtractor(Extractor):
class DeviantartGalleryExtractor(DeviantartExtractor): class DeviantartGalleryExtractor(DeviantartExtractor):
"""Extractor for all deviations from an artist's gallery""" """Extractor for all deviations from an artist's gallery"""
subcategory = "gallery" subcategory = "gallery"
pattern = [r"(?:https?://)?([^\.]+)\.deviantart\.com(?:/gallery)?/?$"] pattern = [r"(?:https?://)?([^.]+)\.deviantart\.com(?:/gallery)?/?$"]
test = [("http://shimoda7.deviantart.com/gallery/", { test = [("http://shimoda7.deviantart.com/gallery/", {
"url": "63bfa8efba199e27181943c9060f6770f91a8441", "url": "63bfa8efba199e27181943c9060f6770f91a8441",
"keyword": "b02f5487481142ca44c22542333191aa2cdfb7ee", "keyword": "b02f5487481142ca44c22542333191aa2cdfb7ee",
@@ -114,7 +122,8 @@ class DeviantartGalleryExtractor(DeviantartExtractor):
class DeviantartDeviationExtractor(DeviantartExtractor): class DeviantartDeviationExtractor(DeviantartExtractor):
"""Extractor for single deviations""" """Extractor for single deviations"""
subcategory = "deviation" subcategory = "deviation"
pattern = [r"(?:https?://)?([^\.]+\.deviantart\.com/art/.+-\d+)", pattern = [(r"(?:https?://)?([^\.]+\.deviantart\.com/"
r"(?:art|journal)/[^/?&#]+-\d+)"),
r"(?:https?://)?(sta\.sh/[a-z0-9]+)"] r"(?:https?://)?(sta\.sh/[a-z0-9]+)"]
test = [ test = [
(("http://shimoda7.deviantart.com/art/" (("http://shimoda7.deviantart.com/art/"
@@ -202,6 +211,23 @@ class DeviantartFavoriteExtractor(DeviantartExtractor):
deviation["collection"] = self.collection deviation["collection"] = self.collection
class DeviantartJournalExtractor(DeviantartExtractor):
"""Extractor for single deviations"""
subcategory = "journal"
pattern = [r"(?:https?://)?([^.]+)\.deviantart\.com/journal/?$"]
test = [("http://shimoda7.deviantart.com/journal/", {
"url": "05204bddf5ebba330d73cec76bcd55b1249c6159",
"keyword": "8434f8bdd4b38634e206c8689a0906ac10c3fa77",
})]
def __init__(self, match):
DeviantartExtractor.__init__(self)
self.user = match.group(1)
def deviations(self):
return self.api.browse_user_journals(self.user, self.offset)
class DeviantartAPI(): class DeviantartAPI():
"""Minimal interface for the deviantart API""" """Minimal interface for the deviantart API"""
def __init__(self, extractor, client_id="5388", def __init__(self, extractor, client_id="5388",
@@ -216,6 +242,13 @@ class DeviantartAPI():
if not isinstance(self.mature, str): if not isinstance(self.mature, str):
self.mature = "true" if self.mature else "false" self.mature = "true" if self.mature else "false"
def browse_user_journals(self, username, offset=0):
"""Yield all journal entries of a specific user"""
endpoint = "browse/user/journals"
params = {"username": username, "offset": offset, "limit": 10,
"mature_content": self.mature, "featured": "false"}
return self._pagination(endpoint, params)
def collections(self, username, folder_id, offset=0): def collections(self, username, folder_id, offset=0):
"""Yield all Deviation-objects contained in a collection folder""" """Yield all Deviation-objects contained in a collection folder"""
endpoint = "collections/" + folder_id endpoint = "collections/" + folder_id
@@ -343,7 +376,7 @@ roses/cssmin/desktop.css?1491362542749" >
<div class="dev-view-deviation"> <div class="dev-view-deviation">
<div class="journal-wrapper tt-a"> <div class="journal-wrapper tt-a">
<div class="journal-wrapper2"> <div class="journal-wrapper2">
<div class="journal withskin"> <div class="journal {cls}">
{html} {html}
</div> </div>
</div> </div>