Compare commits
No commits in common. '4c167c5ba76ceb3fa71887d2eeee0c8408195657' and '48fe506f8d143a409cd7ce8d24f6673015444754' have entirely different histories.
4c167c5ba7
...
48fe506f8d
5 changed files with 171 additions and 210 deletions
@ -1,100 +0,0 @@ |
|||||||
package db |
|
||||||
|
|
||||||
import ( |
|
||||||
"encoding/json" |
|
||||||
"log" |
|
||||||
"ssender/internal/models" |
|
||||||
|
|
||||||
"github.com/boltdb/bolt" |
|
||||||
) |
|
||||||
|
|
||||||
func InitDb(rss models.Rss2, dbpath string) error { |
|
||||||
log.Println("Initialize DB") |
|
||||||
db, err := bolt.Open(dbpath, 0600, nil) |
|
||||||
if err != nil { |
|
||||||
log.Fatal(err) |
|
||||||
} |
|
||||||
defer db.Close() |
|
||||||
|
|
||||||
err = db.Update(func(tx *bolt.Tx) error { |
|
||||||
b, err := tx.CreateBucketIfNotExists([]byte("rss")) |
|
||||||
if err != nil { |
|
||||||
return err |
|
||||||
} |
|
||||||
for _, v := range rss.ItemList { |
|
||||||
encoded, err := json.Marshal(v) |
|
||||||
if err != nil { |
|
||||||
return err |
|
||||||
} |
|
||||||
err = b.Put([]byte(v.Link), encoded) |
|
||||||
if err != nil { |
|
||||||
return err |
|
||||||
} |
|
||||||
} |
|
||||||
return nil |
|
||||||
}) |
|
||||||
if err != nil { |
|
||||||
return err |
|
||||||
} |
|
||||||
return nil |
|
||||||
} |
|
||||||
|
|
||||||
func FindItems(rss models.Rss2, dbpath string) (*models.SendItems, error) { |
|
||||||
var sendItems models.SendItems |
|
||||||
db, err := bolt.Open(dbpath, 0600, nil) |
|
||||||
if err != nil { |
|
||||||
return nil, err |
|
||||||
} |
|
||||||
defer db.Close() |
|
||||||
|
|
||||||
for _, v := range rss.ItemList { |
|
||||||
err = db.View(func(tx *bolt.Tx) error { |
|
||||||
// Assume bucket exists and has keys
|
|
||||||
b := tx.Bucket([]byte("rss")) |
|
||||||
c := b.Cursor() |
|
||||||
flag := false |
|
||||||
for key, _ := c.First(); key != nil; key, _ = c.Next() { |
|
||||||
if v.Link == string(key) { |
|
||||||
flag = true |
|
||||||
break |
|
||||||
} |
|
||||||
} |
|
||||||
if flag { |
|
||||||
sendItems.ItemList = append(sendItems.ItemList, v) |
|
||||||
} |
|
||||||
return nil |
|
||||||
}) |
|
||||||
if err != nil { |
|
||||||
return nil, err |
|
||||||
} |
|
||||||
} |
|
||||||
return &sendItems, nil |
|
||||||
} |
|
||||||
|
|
||||||
func UpdateDb(dbpath string, senditems *models.SendItems) error { |
|
||||||
log.Println("Update DB") |
|
||||||
db, err := bolt.Open(dbpath, 0600, nil) |
|
||||||
if err != nil { |
|
||||||
log.Fatal(err) |
|
||||||
} |
|
||||||
defer db.Close() |
|
||||||
|
|
||||||
err = db.Update(func(tx *bolt.Tx) error { |
|
||||||
b := tx.Bucket([]byte("rss")) |
|
||||||
for _, v := range senditems.ItemList { |
|
||||||
encoded, err := json.Marshal(v) |
|
||||||
if err != nil { |
|
||||||
return err |
|
||||||
} |
|
||||||
err = b.Put([]byte(v.Link), encoded) |
|
||||||
if err != nil { |
|
||||||
return err |
|
||||||
} |
|
||||||
} |
|
||||||
return nil |
|
||||||
}) |
|
||||||
if err != nil { |
|
||||||
return err |
|
||||||
} |
|
||||||
return nil |
|
||||||
} |
|
||||||
@ -1,27 +0,0 @@ |
|||||||
package rss |
|
||||||
|
|
||||||
import ( |
|
||||||
"encoding/xml" |
|
||||||
"os" |
|
||||||
"ssender/internal/models" |
|
||||||
) |
|
||||||
|
|
||||||
func NewRSS(rssPath string) (*models.Rss2, error) { |
|
||||||
rss := &models.Rss2{} |
|
||||||
|
|
||||||
// Open rss2 file
|
|
||||||
file, err := os.Open(rssPath) |
|
||||||
if err != nil { |
|
||||||
return nil, err |
|
||||||
} |
|
||||||
defer file.Close() |
|
||||||
|
|
||||||
d := xml.NewDecoder(file) |
|
||||||
|
|
||||||
// Start RSS decoding from file
|
|
||||||
if err := d.Decode(&rss); err != nil { |
|
||||||
return nil, err |
|
||||||
} |
|
||||||
|
|
||||||
return rss, nil |
|
||||||
} |
|
||||||
@ -1,48 +0,0 @@ |
|||||||
package send |
|
||||||
|
|
||||||
import ( |
|
||||||
"log" |
|
||||||
"ssender/internal/models" |
|
||||||
|
|
||||||
"github.com/SevereCloud/vksdk/v2/api" |
|
||||||
tgbotapi "github.com/go-telegram-bot-api/telegram-bot-api/v5" |
|
||||||
) |
|
||||||
|
|
||||||
func RunSend(senditems *models.SendItems, config models.Config) error { |
|
||||||
for _, v := range senditems.ItemList { |
|
||||||
if config.Telegram.Send { |
|
||||||
log.Println("Send to telegram") |
|
||||||
bot, err := tgbotapi.NewBotAPI(config.Telegram.Token) |
|
||||||
if err != nil { |
|
||||||
return err |
|
||||||
} |
|
||||||
bot.Debug = config.Telegram.SendDebug |
|
||||||
|
|
||||||
// s := "<b>" + string(v.Title) + "</b>\n" + html.UnescapeString(string(v.Description)) +
|
|
||||||
// "\nhttps://t.me/iv?url=" + v.Link + "&rhash=da76512d0ff2a2" +
|
|
||||||
// "\n\nСсылка на пост: " + v.Link
|
|
||||||
msg := tgbotapi.NewMessage(config.Telegram.ChatId, v.Link) |
|
||||||
msg.ParseMode = "Html" |
|
||||||
_, err = bot.Send(msg) |
|
||||||
if err != nil { |
|
||||||
return err |
|
||||||
|
|
||||||
} |
|
||||||
log.Println("Sended to telegram") |
|
||||||
} |
|
||||||
if config.VK.Send { |
|
||||||
log.Println("Send to VK") |
|
||||||
vk := api.NewVK(config.VK.Token) |
|
||||||
_, err := vk.WallPost(api.Params{ |
|
||||||
"owner_id": config.VK.OwnerId, |
|
||||||
"attachments": v.Link, |
|
||||||
}) |
|
||||||
if err != nil { |
|
||||||
return err |
|
||||||
} |
|
||||||
log.Println("Sended to VK") |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
return nil |
|
||||||
} |
|
||||||
Loading…
Reference in new issue