package main import ( "fmt" "log" "os" "path/filepath" "strconv" yaml "gopkg.in/yaml.v2" "github.com/SevereCloud/vksdk/v2/api" "github.com/SevereCloud/vksdk/v2/api/params" ) /* - json с конфигом - json с ID последних постов из групп Алгоритм: - Читаем айди последнего поста - Сохраняем в какую-нибудь переменную посты - Формируем письмо из постов - Отправляем письмо на почту - При успешной отправке записываем айди последнего поста в жсон */ type Config struct { VK struct { Token string `yaml:"token"` GroupId string `yaml:"group_id"` } `yaml:"VK"` } func configRead(cfg *Config) { userConfigDir, err := os.UserConfigDir() if err != nil { log.Fatal(err) } path := filepath.Join(userConfigDir, "vk-to-smtp.yaml") f, err := os.Open(path) if err != nil { log.Fatal(err) os.Create(path) } defer f.Close() decoder := yaml.NewDecoder(f) err = decoder.Decode(cfg) if err != nil { log.Fatal(err) } } func main() { var cfg Config configRead(&cfg) if cfg.VK.Token == "" { log.Fatal("token is empty") os.Exit(2) } // Init VK vk := api.NewVK(cfg.VK.Token) // Fill params for wallGet wallGetParams := params.NewWallGetBuilder() wallGetParams.Count(10) wallGetParams.Domain(cfg.VK.GroupId) wallGetParams.Extended(true) // Do WallGet posts, err := vk.WallGet(wallGetParams.Params) if err != nil { log.Fatal(err) } // Cycle through posts for _, item := range posts.Items { if !item.IsPinned { groupGetParams := params.NewGroupsGetByIDBuilder() groupGetParams.GroupID(strconv.Itoa(item.OwnerID * -1)) ownerName, err := vk.GroupsGetByID(groupGetParams.Params) if err != nil { log.Fatal(err) } fmt.Println("=====") fmt.Println("Group:") fmt.Println(ownerName[0].Name) fmt.Println("Text:") fmt.Println(item.Text) fmt.Println("Attach: ") // проходимся по аттачам если есть if item.Attachments != nil { //fmt.Println(item.Attachments) for _, attach := range item.Attachments { // если это фото - вытаскиваем урл photosObj := attach.Photo if photosObj.Sizes != nil { for _, photoSizeObj := range photosObj.Sizes { if photoSizeObj.Type == "y" { fmt.Println(photoSizeObj.URL) } } } } } } } }