diff --git a/README.md b/README.md index 8f70404..1c2e10f 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Devianter -[![Please don't upload to GitHub](https://nogithub.codeberg.page/badge.svg)](https://nogithub.codeberg.page) +[![Please don't upload to GitHub](https://nogithub.codeberg.page/badge.svg)](https://nogithub.codeberg.page) [![Go Reference](https://pkg.go.dev/badge/git.macaw.me/skunky/devianter.svg)](https://pkg.go.dev/git.macaw.me/skunky/devianter) [![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0) A DeviantART API library for Go. diff --git a/comments.go b/comments.go index 47a0136..928de44 100644 --- a/comments.go +++ b/comments.go @@ -2,48 +2,45 @@ package devianter import ( "encoding/json" + "net/url" "strconv" - "strings" ) +type Thread struct { + Replies, Likes int + ID int `json:"commentId"` + Parent int `json:"parentId"` + + Posted time + Author bool `json:"isAuthorHighlited"` + + Desctiption string + Comment string + + TextContent Text + + User struct { + Username string + Banned bool `json:"isBanned"` + } +} + type Comments struct { Cursor string PrevOffset int HasMore, HasLess bool Total int - Thread []struct { - Replies, Likes int - ID int `json:"commentId"` - Parent int `json:"parentId"` - - Posted time - Author bool `json:"isAuthorHighlited"` - - Desctiption string - Comment string - - TextContent Text - - User struct { - Username string - Banned bool `json:"isBanned"` - } - } + Thread []Thread } -// функция для обработки комментариев поста, пользователя, группы и многого другого -func CommentsFunc( - postid string, - cursor string, - page int, - typ int, // 1 - комментарии поста; 4 - комментарии на стене группы или пользователя -) (cmmts Comments) { +// 1 - комментарии поста; 4 - комментарии на стене группы или пользователя +func CommentsFunc(postid string, cursor string, page int, typ int) (cmmts Comments) { for x := 0; x <= page; x++ { ujson( "dashared/comments/thread?typeid="+strconv.Itoa(typ)+ "&itemid="+postid+"&maxdepth=1000&order=newest"+ - "&limit=50&cursor="+strings.ReplaceAll(cursor, "+", `%2B`), + "&limit=50&cursor="+url.QueryEscape(cursor), &cmmts, ) diff --git a/misc.go b/misc.go index 6584479..400ac8b 100644 --- a/misc.go +++ b/misc.go @@ -7,6 +7,7 @@ import ( "log" "math" "net/http" + u "net/url" "strconv" "strings" ) @@ -131,10 +132,11 @@ func DailyDeviationsFunc(page int) (dd DailyDeviations) { /* SEARCH */ type Search struct { - Total int `json:"estTotal"` - Pages int // only for 'a' and 'g' scope. - HasMore bool - Results []Deviation `json:"deviations,results"` + Total int `json:"estTotal"` + Pages int // only for 'a' and 'g' scope. + HasMore bool + Results []Deviation `json:"deviations"` + ResultsGalleryTemp []Deviation `json:"results"` } func SearchFunc(query string, page int, scope rune, user ...string) (ss Search, e error) { @@ -162,7 +164,7 @@ func SearchFunc(query string, page int, scope rune, user ...string) (ss Search, log.Fatalln("Invalid type.\n- 'a' -- all;\n- 't' -- tag;\n- 'g' - gallery.") } - url.WriteString(query) + url.WriteString(u.QueryEscape(query)) if scope != 'g' { // если область поиска не равна поиску по группам, то активируется этот код url.WriteString("&page=") } else { // иначе вместо страницы будет оффсет и страница умножится на 50 @@ -173,6 +175,10 @@ func SearchFunc(query string, page int, scope rune, user ...string) (ss Search, ujson(url.String(), &ss) + if scope == 'g' { + ss.Results = ss.ResultsGalleryTemp + } + // расчёт, сколько всего страниц по запросу. без токена 417 страниц - максимум totalfloat := int(math.Round(float64(ss.Total / 25))) for x := 0; x < totalfloat; x++ {