vk-mailer/vk-to-smtp.go

114 lines
2.5 KiB
Go
Raw Normal View History

package main
import (
"fmt"
"log"
"os"
2024-08-27 21:50:34 +03:00
"path/filepath"
"strconv"
2024-08-27 21:50:34 +03:00
yaml "gopkg.in/yaml.v2"
"github.com/SevereCloud/vksdk/v2/api"
"github.com/SevereCloud/vksdk/v2/api/params"
)
2023-06-06 09:12:35 +03:00
/*
- json с конфигом
2024-01-11 21:14:11 +03:00
- json с ID последних постов из групп
2023-06-06 09:12:35 +03:00
Алгоритм:
- Читаем айди последнего поста
- Сохраняем в какую-нибудь переменную посты
- Формируем письмо из постов
- Отправляем письмо на почту
- При успешной отправке записываем айди последнего поста в жсон
*/
2024-08-27 21:50:34 +03:00
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() {
2024-08-27 21:50:34 +03:00
var cfg Config
configRead(&cfg)
if cfg.VK.Token == "" {
log.Fatal("token is empty")
os.Exit(2)
}
2023-06-06 09:12:35 +03:00
// Init VK
2024-08-27 21:50:34 +03:00
vk := api.NewVK(cfg.VK.Token)
2023-06-06 09:12:35 +03:00
// Fill params for wallGet
wallGetParams := params.NewWallGetBuilder()
wallGetParams.Count(10)
2024-08-27 21:50:34 +03:00
wallGetParams.Domain(cfg.VK.GroupId)
wallGetParams.Extended(true)
2023-06-06 09:12:35 +03:00
// Do WallGet
posts, err := vk.WallGet(wallGetParams.Params)
if err != nil {
log.Fatal(err)
}
2023-06-06 09:12:35 +03:00
// Cycle through posts
for _, item := range posts.Items {
2023-06-06 09:12:35 +03:00
if !item.IsPinned {
groupGetParams := params.NewGroupsGetByIDBuilder()
groupGetParams.GroupID(strconv.Itoa(item.OwnerID * -1))
2023-06-06 09:12:35 +03:00
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)
}
}
}
}
}
}
}
}