summaryrefslogtreecommitdiff
path: root/comments.go
diff options
context:
space:
mode:
Diffstat (limited to 'comments.go')
-rw-r--r--comments.go79
1 files changed, 79 insertions, 0 deletions
diff --git a/comments.go b/comments.go
new file mode 100644
index 0000000..f6a86c6
--- /dev/null
+++ b/comments.go
@@ -0,0 +1,79 @@
+package devianter
+
+import (
+ "encoding/json"
+ "strconv"
+ "strings"
+)
+
+type comments struct {
+ Cursor string
+ PrevOffset int
+ HasMore, HasLess bool
+
+ Total int
+ Thread []struct {
+ CommentId, ParentId, Replies, Likes int
+ Posted time
+ IsAuthorHighlited bool
+
+ Desctiption string
+
+ // упрощение структуры с комментами
+ Comment string
+
+ TextContent struct {
+ Html struct {
+ Markup string
+ }
+ }
+
+ User struct {
+ Username string
+ IsBanned bool
+ }
+ }
+}
+
+// функция для обработки комментариев поста, пользователя, группы и многого другого
+func Comments(
+ postid string,
+ cursor string,
+ page int,
+ typ int, // 1 - комментарии поста; 4 - комментарии на стене группы или пользователя
+) (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`),
+ &cmmts,
+ )
+
+ cursor = cmmts.Cursor
+
+ // парсинг json внутри json
+ for i := 0; i < len(cmmts.Thread); i++ {
+ m, l := cmmts.Thread[i].TextContent.Html.Markup, len(cmmts.Thread[i].TextContent.Html.Markup)
+ cmmts.Thread[i].Comment = m
+
+ // если начало строки {, а конец }, то срабатывает этот иф
+ if m[0] == 123 && m[l-1] == 125 {
+ var content struct {
+ Blocks []struct {
+ Text string
+ }
+ }
+
+ e := json.Unmarshal([]byte(m), &content)
+ err(e)
+
+ for _, a := range content.Blocks {
+ cmmts.Thread[i].Comment = a.Text
+ }
+ }
+ }
+ }
+
+ return
+}