Compare commits

..

No commits in common. "master" and "main" have entirely different histories.
master ... main

5 changed files with 43 additions and 90 deletions

View File

@ -35,9 +35,9 @@ type Comments struct {
} }
// 1 - комментарии поста; 4 - комментарии на стене группы или пользователя // 1 - комментарии поста; 4 - комментарии на стене группы или пользователя
func GetComments(postid string, cursor string, page int, typ int) (cmmts Comments, err Error) { func GetComments(postid string, cursor string, page int, typ int) (cmmts Comments) {
for x := 0; x <= page; x++ { for x := 0; x <= page; x++ {
err = ujson( ujson(
"dashared/comments/thread?typeid="+strconv.Itoa(typ)+ "dashared/comments/thread?typeid="+strconv.Itoa(typ)+
"&itemid="+postid+"&maxdepth=1000&order=newest"+ "&itemid="+postid+"&maxdepth=1000&order=newest"+
"&limit=50&cursor="+url.QueryEscape(cursor), "&limit=50&cursor="+url.QueryEscape(cursor),

View File

@ -58,7 +58,6 @@ type Deviation struct {
// её выпердыши // её выпердыши
type Media struct { type Media struct {
BaseUri string BaseUri string
Name string `json:"prettyName"`
Token []string Token []string
Types []struct { Types []struct {
T string T string
@ -91,7 +90,7 @@ type Post struct {
} }
// преобразование урла в правильный // преобразование урла в правильный
func UrlFromMedia(m Media, thumb ...int) (urlParsed, wellFormattedFilename string) { func UrlFromMedia(m Media, thumb ...int) string {
var url strings.Builder var url strings.Builder
subtractWidthHeight := func(to int, target ...*int) { subtractWidthHeight := func(to int, target ...*int) {
@ -105,19 +104,18 @@ func UrlFromMedia(m Media, thumb ...int) (urlParsed, wellFormattedFilename strin
for _, t := range m.Types { for _, t := range m.Types {
if t.T == "fullview" { if t.T == "fullview" {
url.WriteString(m.BaseUri) url.WriteString(m.BaseUri)
if l := len(m.BaseUri); l != 0 && (m.BaseUri[l-3:] != "gif" && t.W*t.H < 33177600) { if m.BaseUri[len(m.BaseUri)-3:] != "gif" && t.W*t.H < 33177600 {
if len(thumb) != 0 { if len(thumb) != 0 {
subtractWidthHeight(thumb[0], &t.W, &t.H) subtractWidthHeight(thumb[0], &t.W, &t.H)
} }
wellFormattedFilename = m.Name + m.BaseUri[l-4:]
url.WriteString("/v1/fit/w_") url.WriteString("/v1/fit/w_")
url.WriteString(strconv.Itoa(t.W)) url.WriteString(strconv.Itoa(t.W))
url.WriteString(",h_") url.WriteString(",h_")
url.WriteString(strconv.Itoa(t.H)) url.WriteString(strconv.Itoa(t.H))
url.WriteString("/") url.WriteString("/")
url.WriteString(wellFormattedFilename) url.WriteString("image")
url.WriteString(".gif")
} }
if len(m.Token) > 0 { if len(m.Token) > 0 {
url.WriteString("?token=") url.WriteString("?token=")
@ -126,19 +124,18 @@ func UrlFromMedia(m Media, thumb ...int) (urlParsed, wellFormattedFilename strin
} }
} }
urlParsed = url.String() return url.String()
return
} }
// для работы функции нужно ID поста и имя пользователя. // для работы функции нужно ID поста и имя пользователя.
func GetDeviation(id string, user string) (st Post, err Error) { func GetDeviation(id string, user string) Post {
err = ujson( var st Post
ujson(
"dadeviation/init?deviationid="+id+"&username="+user+"&type=art&include_session=false&expand=deviation.related&preload=true", "dadeviation/init?deviationid="+id+"&username="+user+"&type=art&include_session=false&expand=deviation.related&preload=true",
&st, &st,
) )
st.IMG, _ = UrlFromMedia(st.Deviation.Media) st.IMG = UrlFromMedia(st.Deviation.Media)
// базовая обработка описания // базовая обработка описания
txt := st.Deviation.TextContent.Html.Markup txt := st.Deviation.TextContent.Html.Markup
@ -154,7 +151,8 @@ func GetDeviation(id string, user string) (st Post, err Error) {
txt = a.Text txt = a.Text
} }
} }
st.Description = txt st.Description = txt
return return st
} }

35
misc.go
View File

@ -64,8 +64,8 @@ type DailyDeviations struct {
Deviations []Deviation Deviations []Deviation
} }
func GetDailyDeviations(page int) (dd DailyDeviations, err Error) { func GetDailyDeviations(page int) (dd DailyDeviations) {
err = ujson("dabrowse/networkbar/rfy/deviations?page="+strconv.Itoa(page), &dd) ujson("dabrowse/networkbar/rfy/deviations?page="+strconv.Itoa(page), &dd)
return return
} }
@ -78,8 +78,9 @@ type Search struct {
ResultsGalleryTemp []Deviation `json:"results"` ResultsGalleryTemp []Deviation `json:"results"`
} }
func PerformSearch(query string, page int, scope rune, user ...string) (ss Search, err error, daError Error) { func PerformSearch(query string, page int, scope rune, user ...string) (ss Search, e error) {
var buildurl strings.Builder var buildurl strings.Builder
e = nil
// о5 построение ссылок. // о5 построение ссылок.
switch scope { switch scope {
@ -87,23 +88,17 @@ func PerformSearch(query string, page int, scope rune, user ...string) (ss Searc
buildurl.WriteString("dabrowse/search/all?q=") buildurl.WriteString("dabrowse/search/all?q=")
case 't': // поиск артов по тегам case 't': // поиск артов по тегам
buildurl.WriteString("dabrowse/networkbar/tag/deviations?tag=") buildurl.WriteString("dabrowse/networkbar/tag/deviations?tag=")
case 'g', 'f': // поиск артов пользователя или группы case 'g': // поиск артов пользователя или группы
if user == nil { if user != nil {
err = errors.New("missing username (last argument)") buildurl.WriteString("dashared/gallection/search?username=")
buildurl.WriteString(user[0])
buildurl.WriteString("&type=gallery&order=most-recent&init=true&limit=50&q=")
} else {
e = errors.New("missing username (last argument)")
return return
} }
buildurl.WriteString("dashared/gallection/search?username=")
buildurl.WriteString(user[0])
buildurl.WriteString("&type=")
if scope == 'g' {
buildurl.WriteString("gallery")
} else {
buildurl.WriteString("collection")
}
buildurl.WriteString("&order=most-recent&init=true&limit=50&q=")
default: default:
log.Fatalln("Invalid type.\n- 'a' -- all;\n- 't' -- tag;\n- 'g' - gallery\n- 'f' - folders.") log.Fatalln("Invalid type.\n- 'a' -- all;\n- 't' -- tag;\n- 'g' - gallery.")
} }
buildurl.WriteString(url.QueryEscape(query)) buildurl.WriteString(url.QueryEscape(query))
@ -115,13 +110,13 @@ func PerformSearch(query string, page int, scope rune, user ...string) (ss Searc
} }
buildurl.WriteString(strconv.Itoa(page)) buildurl.WriteString(strconv.Itoa(page))
daError = ujson(buildurl.String(), &ss) ujson(buildurl.String(), &ss)
if ss.Results == nil { if scope == 'g' {
ss.Results = ss.ResultsGalleryTemp ss.Results = ss.ResultsGalleryTemp
} }
// расчёт, сколько всего страниц по запросу. без токена, 417 страниц - максимум // расчёт, сколько всего страниц по запросу. без токена 417 страниц - максимум
totalfloat := int(math.Round(float64(ss.Total / 25))) totalfloat := int(math.Round(float64(ss.Total / 25)))
for x := 0; x < totalfloat; x++ { for x := 0; x < totalfloat; x++ {
if x <= 417 { if x <= 417 {

View File

@ -46,11 +46,10 @@ type Gallery struct {
Folders struct { Folders struct {
HasMore bool HasMore bool
Results []struct { Results []struct {
Deviations int `json:"totalItemCount"` FolderId int
FolderId int Size int
Size int Name string
Name string Thumb Deviation
Thumb Deviation
} }
} }
@ -75,44 +74,19 @@ type Group struct {
} }
// подходит как группа, так и пользователь // подходит как группа, так и пользователь
func (s Group) Get() (g GRuser, err error, daError Error) { func (s Group) GetGroup() (g GRuser, err error) {
if s.Name == "" { if s.Name == "" {
return g, errors.New("missing Name field"), daError return g, errors.New("missing Name field")
} }
daError = ujson("dauserprofile/init/about?username="+s.Name, &g) ujson("dauserprofile/init/about?username="+s.Name, &g)
return return
} }
func (s Group) Favourites(page int, all bool, folderid ...int) (g Group, err Error) {
var url strings.Builder
if fid := folderid[0]; fid > 0 || all {
url.WriteString("dashared/gallection/contents")
if all {
url.WriteString("?all_folder=true")
} else {
url.WriteString("?folderid=")
url.WriteString(strconv.Itoa(fid))
}
url.WriteString("&type=collection&")
} else {
url.WriteString("dauserprofile/init/favourites?deviations_")
}
url.WriteString("limit=50&username=")
url.WriteString(s.Name)
url.WriteString("&with_subfolders=true&offset=")
url.WriteString(strconv.Itoa(page * 50))
err = ujson(url.String(), &g.Content)
return
}
// гарелея пользователя или группы // гарелея пользователя или группы
func (s Group) Gallery(page int, folderid ...int) (g Group, err error, daError Error) { func (s Group) GetGallery(page int, folderid ...int) (g Group, err error) {
if s.Name == "" { if s.Name == "" {
return g, errors.New("missing Name field"), daError return g, errors.New("missing Name field")
} }
var url strings.Builder var url strings.Builder
@ -135,7 +109,7 @@ func (s Group) Gallery(page int, folderid ...int) (g Group, err error, daError E
url.WriteString("limit=50") url.WriteString("limit=50")
url.WriteString("&with_subfolders=false") url.WriteString("&with_subfolders=false")
daError = ujson(url.String(), &g.Content) ujson(url.String(), &g.Content)
return return
} }

22
util.go
View File

@ -15,25 +15,11 @@ func try(txt error) {
} }
} }
func ujson(data string, output any) Error { // сокращение для вызова щенка и парсинга жсона
func ujson(data string, output any) {
input, err := puppy(data) input, err := puppy(data)
if err == nil { try(err)
try(json.Unmarshal([]byte(input), output)) try(json.Unmarshal([]byte(input), output))
}
return APIError(err)
}
type Error struct {
Reason string `json:"error"`
Error string `json:"errorDescription"`
RAW []byte `json:"-"`
}
func APIError(inputError error) (err Error) {
if inputError != nil {
err.RAW = []byte(inputError.Error())
try(json.Unmarshal(err.RAW, &err))
}
return
} }
/* REQUEST SECTION */ /* REQUEST SECTION */