From 0cb9847d31bbbfb04f76222c8b9acd9c923fbeec Mon Sep 17 00:00:00 2001 From: perennial Date: Thu, 10 Oct 2024 20:52:50 +1100 Subject: [PATCH] pixivision tag: display total number of articles --- assets/views/pixivisionTag.jet.html | 2 +- core/pixivision.go | 21 ++++++++++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/assets/views/pixivisionTag.jet.html b/assets/views/pixivisionTag.jet.html index 7fc2d19..0358a6b 100644 --- a/assets/views/pixivisionTag.jet.html +++ b/assets/views/pixivisionTag.jet.html @@ -10,7 +10,7 @@

{{ .Tag.Title }}

-

{{ len(.Tag.Articles) }} articles

+

{{ .Tag.Total }} articles

{{ .Tag.Description }}

diff --git a/core/pixivision.go b/core/pixivision.go index 02f12c7..a471af2 100644 --- a/core/pixivision.go +++ b/core/pixivision.go @@ -2,14 +2,15 @@ package core import ( "fmt" + "github.com/PuerkitoBio/goquery" "html" "io" "net/http" "regexp" + "strconv" + "strings" "time" - "github.com/PuerkitoBio/goquery" - "codeberg.org/vnpower/pixivfe/v2/i18n" ) @@ -86,6 +87,7 @@ type PixivisionTag struct { Title string Description string Articles []PixivisionArticle + Total int // The total number of articles } // PixivisionCategory represents a category page on Pixivision @@ -195,7 +197,20 @@ func PixivisionGetTag(r *http.Request, id string, page string, lang ...string) ( } tag.Title = doc.Find(".tdc__header h1").Text() - tag.Description = doc.Find(".tdc__description").Text() + + // Extract and process the description + fullDescription := doc.Find(".tdc__description").Text() + parts := strings.Split(fullDescription, "pixivision") // split once the boilerplate about "pixivision currently has ..." starts + tag.Description = strings.TrimSpace(parts[0]) + + // Extract total number of articles if available + if len(parts) > 1 { + re := regexp.MustCompile(`(\d+)\s+article\(s\)`) + matches := re.FindStringSubmatch(parts[1]) + if len(matches) > 1 { + tag.Total, _ = strconv.Atoi(matches[1]) + } + } // Parse each article in the tag page doc.Find("._article-card").Each(func(i int, s *goquery.Selection) {