summaryrefslogtreecommitdiff
path: root/app/wrapper.go
diff options
context:
space:
mode:
authorlost+skunk <[email protected]>2024-07-09 12:54:15 +0300
committerlost+skunk <[email protected]>2024-07-09 12:54:15 +0300
commit0f528ee9fa8b84c5e7532e22480b8b4b3ff7d5ba (patch)
tree2609896980f76fc47b6a04fc9ddc9e344ae99641 /app/wrapper.go
parente07e1a25b26d3fd2b8fd097491d055fe7b002d2b (diff)
downloadskunky-art-0f528ee9fa8b84c5e7532e22480b8b4b3ff7d5ba.tar.gz
skunky-art-0f528ee9fa8b84c5e7532e22480b8b4b3ff7d5ba.tar.bz2
skunky-art-0f528ee9fa8b84c5e7532e22480b8b4b3ff7d5ba.zip
Поиск по группам
Diffstat (limited to 'app/wrapper.go')
-rw-r--r--app/wrapper.go64
1 files changed, 53 insertions, 11 deletions
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(`<div class="admin"><img src="`)
- htm.WriteString(UrlBuilder("media", "emojitar", z.User.Username, "?type=a"))
- htm.WriteString(`"><a href="`)
- htm.WriteString(UrlBuilder("group_user", "?type=about&q=", z.User.Username))
- htm.WriteString(`">`)
- htm.WriteString(z.User.Username)
- htm.WriteString(`</a></div>`)
+ 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 += `<div class="content plates">`
+ for x := 0; x < len(usernames); x++ {
+ ss.List += BuildUserPlate(usernames[x])
+ }
+ ss.List += `</div>`
+ 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)
}