46 lines
1.5 KiB
Python
46 lines
1.5 KiB
Python
import json
|
|
|
|
from catalog.common import *
|
|
from catalog.models import *
|
|
|
|
|
|
@SiteManager.register
|
|
class Ypshuo(AbstractSite):
|
|
SITE_NAME = SiteName.Ypshuo
|
|
ID_TYPE = IdType.Ypshuo
|
|
URL_PATTERNS = [
|
|
r"https://www\.ypshuo\.com/novel/(\d+)\.html",
|
|
]
|
|
WIKI_PROPERTY_ID = ""
|
|
DEFAULT_MODEL = Edition
|
|
|
|
@classmethod
|
|
def id_to_url(cls, id_value):
|
|
return f"https://www.ypshuo.com/novel/{id_value}.html"
|
|
|
|
def scrape(self):
|
|
api_url = f"https://www.ypshuo.com/api/novel/getInfo?novelId={self.id_value}"
|
|
o = BasicDownloader(api_url).download().json()
|
|
source = json.loads(o["data"]["source"])
|
|
lookup_ids = {}
|
|
for site in source:
|
|
match site["siteName"]:
|
|
case "起点中文网":
|
|
lookup_ids[IdType.Qidian] = site["bookId"]
|
|
case "晋江文学城":
|
|
lookup_ids[IdType.JJWXC] = site["bookPage"].rsplit("=", maxsplit=1)[
|
|
-1
|
|
]
|
|
|
|
return ResourceContent(
|
|
metadata={
|
|
"localized_title": [{"lang": "zh-cn", "text": o["data"]["novel_name"]}],
|
|
"author": [o["data"]["author_name"]],
|
|
"format": Edition.BookFormat.WEB,
|
|
"localized_description": [
|
|
{"lang": "zh-cn", "text": o["data"]["synopsis"]}
|
|
],
|
|
"cover_image_url": o["data"]["novel_img"],
|
|
},
|
|
lookup_ids=lookup_ids,
|
|
)
|