[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,23 +173,28 @@ 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 = (
|
||||||
"range": "1-25",
|
("https://www.patreon.com/koveliana", {
|
||||||
"count": ">= 25",
|
"range": "1-25",
|
||||||
"keyword": {
|
"count": ">= 25",
|
||||||
"attachments": list,
|
"keyword": {
|
||||||
"comment_count": int,
|
"attachments" : list,
|
||||||
"content": str,
|
"comment_count": int,
|
||||||
"creator": dict,
|
"content" : str,
|
||||||
"date": "type:datetime",
|
"creator" : dict,
|
||||||
"id": int,
|
"date" : "type:datetime",
|
||||||
"images": list,
|
"id" : int,
|
||||||
"like_count": int,
|
"images" : list,
|
||||||
"post_type": str,
|
"like_count" : int,
|
||||||
"published_at": str,
|
"post_type" : str,
|
||||||
"title": str,
|
"published_at" : 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 = (
|
||||||
"count": 4,
|
("https://www.patreon.com/posts/precious-metal-23563293", {
|
||||||
})
|
"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