krz/devianter

A DeviantArt guest API library for Go.

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

v0.3.0: comments.go · raw

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