[patreon] raise proper exception if creator/post doesn't exist
This commit is contained in:
@@ -9,7 +9,7 @@
|
|||||||
"""Extractors for https://www.patreon.com/"""
|
"""Extractors for https://www.patreon.com/"""
|
||||||
|
|
||||||
from .common import Extractor, Message
|
from .common import Extractor, Message
|
||||||
from .. import text
|
from .. import text, exception
|
||||||
from ..cache import memcache
|
from ..cache import memcache
|
||||||
import collections
|
import collections
|
||||||
import json
|
import json
|
||||||
@@ -173,7 +173,8 @@ class PatreonCreatorExtractor(PatreonExtractor):
|
|||||||
pattern = (r"(?:https?://)?(?:www\.)?patreon\.com"
|
pattern = (r"(?:https?://)?(?:www\.)?patreon\.com"
|
||||||
r"/(?!(?:home|join|posts|login|signup)(?:$|[/?&#]))"
|
r"/(?!(?:home|join|posts|login|signup)(?:$|[/?&#]))"
|
||||||
r"([^/?&#]+)/?")
|
r"([^/?&#]+)/?")
|
||||||
test = ("https://www.patreon.com/koveliana", {
|
test = (
|
||||||
|
("https://www.patreon.com/koveliana", {
|
||||||
"range": "1-25",
|
"range": "1-25",
|
||||||
"count": ">= 25",
|
"count": ">= 25",
|
||||||
"keyword": {
|
"keyword": {
|
||||||
@@ -189,7 +190,11 @@ class PatreonCreatorExtractor(PatreonExtractor):
|
|||||||
"published_at" : str,
|
"published_at" : str,
|
||||||
"title" : str,
|
"title" : str,
|
||||||
},
|
},
|
||||||
})
|
}),
|
||||||
|
("https://www.patreon.com/kovelianot", {
|
||||||
|
"exception": exception.NotFoundError,
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
|
||||||
def __init__(self, match):
|
def __init__(self, match):
|
||||||
PatreonExtractor.__init__(self, match)
|
PatreonExtractor.__init__(self, match)
|
||||||
@@ -197,9 +202,12 @@ class PatreonCreatorExtractor(PatreonExtractor):
|
|||||||
|
|
||||||
def posts(self):
|
def posts(self):
|
||||||
url = "{}/{}".format(self.root, self.creator)
|
url = "{}/{}".format(self.root, self.creator)
|
||||||
page = self.request(url).text
|
page = self.request(url, notfound="creator").text
|
||||||
campaign_id = text.extract(page, "/campaign/", "/")[0]
|
campaign_id = text.extract(page, "/campaign/", "/")[0]
|
||||||
|
|
||||||
|
if not campaign_id:
|
||||||
|
raise exception.NotFoundError("creator")
|
||||||
|
|
||||||
url = self._build_url("posts", (
|
url = self._build_url("posts", (
|
||||||
"&sort=-published_at"
|
"&sort=-published_at"
|
||||||
"&filter[is_draft]=false"
|
"&filter[is_draft]=false"
|
||||||
@@ -228,9 +236,14 @@ class PatreonPostExtractor(PatreonExtractor):
|
|||||||
subcategory = "post"
|
subcategory = "post"
|
||||||
pattern = (r"(?:https?://)?(?:www\.)?patreon\.com"
|
pattern = (r"(?:https?://)?(?:www\.)?patreon\.com"
|
||||||
r"/posts/[^/?&#]*?(\d+)")
|
r"/posts/[^/?&#]*?(\d+)")
|
||||||
test = ("https://www.patreon.com/posts/precious-metal-23563293", {
|
test = (
|
||||||
|
("https://www.patreon.com/posts/precious-metal-23563293", {
|
||||||
"count": 4,
|
"count": 4,
|
||||||
})
|
}),
|
||||||
|
("https://www.patreon.com/posts/not-found-123", {
|
||||||
|
"exception": exception.NotFoundError,
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
|
||||||
def __init__(self, match):
|
def __init__(self, match):
|
||||||
PatreonExtractor.__init__(self, match)
|
PatreonExtractor.__init__(self, match)
|
||||||
@@ -238,7 +251,7 @@ class PatreonPostExtractor(PatreonExtractor):
|
|||||||
|
|
||||||
def posts(self):
|
def posts(self):
|
||||||
url = "{}/posts/{}".format(self.root, self.post_id)
|
url = "{}/posts/{}".format(self.root, self.post_id)
|
||||||
page = self.request(url).text
|
page = self.request(url, notfound="post").text
|
||||||
data = text.extract(page, "window.patreon.bootstrap,", "\n});")[0]
|
data = text.extract(page, "window.patreon.bootstrap,", "\n});")[0]
|
||||||
post = json.loads(data + "}")["post"]
|
post = json.loads(data + "}")["post"]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user