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}