From 0f528ee9fa8b84c5e7532e22480b8b4b3ff7d5ba Mon Sep 17 00:00:00 2001 From: lost+skunk Date: Tue, 9 Jul 2024 12:54:15 +0300 Subject: Поиск по группам MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/wrapper.go | 64 ++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 53 insertions(+), 11 deletions(-) (limited to 'app/wrapper.go') diff --git a/app/wrapper.go b/app/wrapper.go index 0340aed..0303c6a 100644 --- a/app/wrapper.go +++ b/app/wrapper.go @@ -10,6 +10,7 @@ import ( "time" "git.macaw.me/skunky/devianter" + "golang.org/x/net/html" ) var wr = io.WriteString @@ -131,13 +132,7 @@ func (s skunkyart) GRUser() { case "group_admins": var htm strings.Builder for _, z := range x.ModuleData.GroupAdmins.Results { - htm.WriteString(`
`) - htm.WriteString(z.User.Username) - htm.WriteString(`
`) + htm.WriteString(BuildUserPlate(z.User.Username)) } group.Admins += htm.String() } @@ -270,15 +265,62 @@ func (s skunkyart) Search() { ss.Content, e = devianter.SearchFunc(s.Query, s.Page, s.Type) case 'g': ss.Content, e = devianter.SearchFunc(s.Query, s.Page, s.Type, s.Args.Get("usr")) + case 'r': // скраппер, поскольку девиантартовцы зажопили гостевое API для поиска групп + var ( + usernames = make(map[int]string) + url strings.Builder + num int + ) + + s.Page++ + + url.WriteString("https://www.deviantart.com/groups/?q=") + url.WriteString(s.Query) + if s.Page > 1 { + url.WriteString("&offset=") + url.WriteString(strconv.Itoa(10 * s.Page)) + } + + r, err := http.Get(url.String()) + if err != nil { + s.ReturnHTTPError(502) + } + defer r.Body.Close() + + for z := html.NewTokenizer(r.Body); ; { + if n, token := z.Next(), z.Token(); n == html.StartTagToken && token.Data == "a" { + for _, x := range token.Attr { + if x.Key == "class" && x.Val == "u regular username" { + usernames[num] = tagval(z) + num++ + } + } + } else if n == 0 { + break + } else { + continue + } + } + + if l := len(usernames); l != 0 { + ss.List += `
` + for x := 0; x < len(usernames); x++ { + ss.List += BuildUserPlate(usernames[x]) + } + ss.List += `
` + ss.List += s.NavBase(dlist{}) + } default: s.ReturnHTTPError(400) } err(e) - ss.List = s.DeviationList(ss.Content.Results, dlist{ - Pages: ss.Content.Pages, - More: ss.Content.HasMore, - }) + if s.Type != 'r' { + ss.List = s.DeviationList(ss.Content.Results, dlist{ + Pages: ss.Content.Pages, + More: ss.Content.HasMore, + }) + } s.ExecuteTemplate("html/search.htm", &s) } -- cgit v1.2.3