krz/devianter

A DeviantArt guest API library for Go.

clone: git clone https://gitbay.org/krz/devianter.git

949bef2c5d5ee53a5d6158e16921c698f8a6e266

unsigned

author: lost+skunk <skunky@ebloid.ru> · 2024-06-30T11:39:11Z

по мелочи
 README.md   |  2 +-
 comments.go | 51 ++++++++++++++++++++++++---------------------------
 misc.go     | 16 +++++++++++-----
 3 files changed, 36 insertions(+), 33 deletions(-)

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++ {