-- {"id":234,"ver":"1.0.2","libVer":"1.0.0","author":"Doomsdayrs","dep":["url>=1.0.0"]} local baseURL = "http://www.tangsanshu.com" local encode = Require("url").encode ---@param url string local function shrinkURL(url) return url:gsub(baseURL, "") end ---@param url string local function expandURL(url) return baseURL .. url end ---@param url string ---@return string @passage of chapter, If nothing can be parsed, then the text should describe why there isn't a chapter local function getPassage(url) return GETDocument(baseURL..url):selectFirst("div.showtxt"):html():gsub("
", "\n"):gsub("\n+", "\n"):gsub(" ", "") end ---@return NovelInfo local function parseNovel(url, loadChapters) local novelPage = NovelInfo() local document = GETDocument(baseURL..url) -- Info local info = document:selectFirst("div.info") novelPage:setTitle(info:selectFirst("h2"):text()) novelPage:setImageURL(baseURL .. info:selectFirst("img"):attr("src")) local items = info:selectFirst("div.small"):select("span") novelPage:setAuthors({ items:get(0):text():gsub("作者:", "") }) novelPage:setGenres({ items:get(1):text():gsub("分类:", ""):gsub("小说", "") }) local status = items:get(2):text():gsub("状态:", "") novelPage:setStatus(NovelStatus(status == "完本" and 1 or status == "连载中" and 0 or 3)) novelPage:setDescription(info:selectFirst("div.intro"):text():gsub("简介:", ""):gsub("
", "\n")) -- Chapters if loadChapters then local found = false local i = 0 novelPage:setChapters(AsList(mapNotNil(document:selectFirst("div.listmain"):selectFirst("dl"):children(), function(v) if found then local chapter = NovelChapter() chapter:setOrder(i) local data = v:selectFirst("a") chapter:setTitle(data:text()) chapter:setLink(data:attr("href")) i = i + 1 return chapter else if v:text():match("正文卷") then found = true end return nil end end))) end return novelPage end local function latest() local document = GETDocument(baseURL) return map(document:selectFirst("div.up"):selectFirst("div.l"):select("li"), function(v) local novel = Novel() local data = v:selectFirst("span.s2"):selectFirst("a") novel:setTitle(data:text()) novel:setLink(data:attr("href")) return novel end) end --- @param data table @Table of values. Always has "query" local function search(data) local url = baseURL .. "/s.php?ie=utf-8&q=" .. encode(data[QUERY]) local document = GETDocument(url) return map(document:select("div.bookbox"), function(v) local novel = Novel() local novelData = document:selectFirst("h4.bookname"):selectFirst("a") novel:setTitle(novelData:text()) novel:setLink(novelData:attr("href")) novel:setImageURL(baseURL .. document:selectFirst("a"):attr("href")) return novel end) end return { id = 234, name = "Tangsanshu", baseURL = baseURL, imageURL = "https://github.com/shosetsuorg/extensions/raw/dev/icons/Tangsanshu.png", listings = { Listing("Latest", false, latest) }, -- Default functions that had to be set getPassage = getPassage, parseNovel = parseNovel, search = search, shrinkURL = shrinkURL, expandURL = expandURL, updateSetting = function() end }