krz/devianter

A DeviantArt guest API library for Go.

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

v0.1.0: comments.go · raw

 1package devianter
 2
 3import (
 4	"encoding/json"
 5	"strconv"
 6	"strings"
 7)
 8
 9type comments struct {
10	Cursor           string
11	PrevOffset       int
12	HasMore, HasLess bool
13
14	Total  int
15	Thread []struct {
16		Replies, Likes int
17		ID             int `json:"commentId"`
18		Parent         int `json:"ParrentId"`
19
20		Posted time
21		Author bool `json:"isAuthorHighlited"`
22
23		Desctiption string
24		Comment     string
25
26		TextContent text
27
28		User struct {
29			Username string
30			Banned   bool `json:"isBanned"`
31		}
32	}
33}
34
35// функция для обработки комментариев поста, пользователя, группы и многого другого
36func Comments(
37	postid string,
38	cursor string,
39	page int,
40	typ int, // 1 - комментарии поста; 4 - комментарии на стене группы или пользователя
41) (cmmts comments) {
42	for x := 0; x <= page; x++ {
43		ujson(
44			"dashared/comments/thread?typeid="+strconv.Itoa(typ)+
45				"&itemid="+postid+"&maxdepth=1000&order=newest"+
46				"&limit=50&cursor="+strings.ReplaceAll(cursor, "+", `%2B`),
47			&cmmts,
48		)
49
50		cursor = cmmts.Cursor
51
52		// парсинг json внутри json
53		for i := 0; i < len(cmmts.Thread); i++ {
54			m, l := cmmts.Thread[i].TextContent.Html.Markup, len(cmmts.Thread[i].TextContent.Html.Markup)
55			cmmts.Thread[i].Comment = m
56
57			// если начало строки {, а конец }, то срабатывает этот иф
58			if m[0] == 123 && m[l-1] == 125 {
59				var content struct {
60					Blocks []struct {
61						Text string
62					}
63				}
64
65				e := json.Unmarshal([]byte(m), &content)
66				err(e)
67
68				for _, a := range content.Blocks {
69					cmmts.Thread[i].Comment = a.Text
70				}
71			}
72		}
73	}
74
75	return
76}