80 lines
1.7 KiB
Go
80 lines
1.7 KiB
Go
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
|
||
}
|