feat: add export data nsfw
This commit is contained in:
parent
25af28e5ff
commit
0897e80465
1 changed files with 100 additions and 21 deletions
|
@ -7,13 +7,17 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"git.wh64.net/muffin/goMuffin/configs"
|
||||||
"git.wh64.net/muffin/goMuffin/databases"
|
"git.wh64.net/muffin/goMuffin/databases"
|
||||||
"git.wh64.net/muffin/goMuffin/utils"
|
"git.wh64.net/muffin/goMuffin/utils"
|
||||||
"github.com/devproje/commando"
|
"github.com/devproje/commando"
|
||||||
"github.com/devproje/commando/option"
|
"github.com/devproje/commando/option"
|
||||||
"go.mongodb.org/mongo-driver/v2/bson"
|
"go.mongodb.org/mongo-driver/v2/bson"
|
||||||
|
"go.mongodb.org/mongo-driver/v2/mongo"
|
||||||
|
"go.mongodb.org/mongo-driver/v2/mongo/options"
|
||||||
)
|
)
|
||||||
|
|
||||||
var date time.Time = time.Now()
|
var date time.Time = time.Now()
|
||||||
|
@ -65,12 +69,6 @@ func saveFileToJSON(path, name string, data any) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
path += getDate()
|
|
||||||
err = checkDir(path)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
f, err := os.Create(fmt.Sprintf("%s/%s.json", path, name))
|
f, err := os.Create(fmt.Sprintf("%s/%s.json", path, name))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -92,12 +90,6 @@ func saveFileToTXT(path, name string, data []databases.Text) error {
|
||||||
content += data.Text + "\n"
|
content += data.Text + "\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
path += getDate()
|
|
||||||
err := checkDir(path)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
f, err := os.Create(fmt.Sprintf("%s/%s.txt", path, name))
|
f, err := os.Create(fmt.Sprintf("%s/%s.txt", path, name))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -113,8 +105,10 @@ func saveFileToTXT(path, name string, data []databases.Text) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func ExportData(n *commando.Node) error {
|
func ExportData(n *commando.Node) error {
|
||||||
ch := make(chan error)
|
var wg sync.WaitGroup
|
||||||
defer databases.Client.Disconnect(context.TODO())
|
ch := make(chan error, 2)
|
||||||
|
|
||||||
|
databases.Client.Disconnect(context.TODO()) // databases 패키지의 DB 연결은 필요 없음 (나중에 수정 예정)
|
||||||
fileType, err := option.ParseString(*n.MustGetOpt("type"), n)
|
fileType, err := option.ParseString(*n.MustGetOpt("type"), n)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -134,24 +128,48 @@ func ExportData(n *commando.Node) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
texts := databases.Texts
|
path += "/" + getDate()
|
||||||
// learns := databases.Learns
|
|
||||||
|
err = checkDir(path)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
wg.Add(2)
|
||||||
|
|
||||||
// 머핀 데이터 추출
|
// 머핀 데이터 추출
|
||||||
go func() {
|
go func() {
|
||||||
|
defer wg.Done()
|
||||||
|
|
||||||
var data []databases.Text
|
var data []databases.Text
|
||||||
|
|
||||||
cur, err := texts.Find(context.TODO(), bson.D{{Key: "persona", Value: "muffin"}})
|
conn, err := mongo.Connect(options.Client().ApplyURI(configs.Config.DatabaseURL))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ch <- err
|
ch <- err
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
cur.All(context.TODO(), &data)
|
defer conn.Disconnect(context.TODO())
|
||||||
|
|
||||||
|
cur, err := conn.Database(configs.Config.DBName).Collection("text").Find(context.TODO(), bson.D{{Key: "persona", Value: "muffin"}})
|
||||||
|
if err != nil {
|
||||||
|
ch <- err
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
defer cur.Close(context.TODO())
|
||||||
|
|
||||||
|
err = cur.All(context.TODO(), &data)
|
||||||
|
if err != nil {
|
||||||
|
ch <- err
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if refined {
|
if refined {
|
||||||
for i, text := range data {
|
for i, text := range data {
|
||||||
if utils.EmojiRegexp.Match([]byte(text.Text)) {
|
if utils.EmojiRegexp.Match([]byte(text.Text)) {
|
||||||
data = append(data[:i], data[i+1:]...)
|
data = append(data[:i], data[i+1:]...)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
text.Text = strings.TrimPrefix(text.Text, "머핀아 ")
|
text.Text = strings.TrimPrefix(text.Text, "머핀아 ")
|
||||||
|
@ -159,11 +177,72 @@ func ExportData(n *commando.Node) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
if fileType == "json" {
|
if fileType == "json" {
|
||||||
ch <- saveFileToJSON(path, "muffin", data)
|
err = saveFileToJSON(path, "muffin", data)
|
||||||
|
if err != nil {
|
||||||
|
ch <- err
|
||||||
|
return
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
fmt.Println("NOTE: 파일 형식이 'txt'인 경우 머핀 데이터만 txt형식으로 저장되고, 나머지는 json으로 저장됩니다.")
|
fmt.Println("NOTE: 파일 형식이 'txt'인 경우 머핀 데이터만 txt형식으로 저장되고, 나머지는 json으로 저장됩니다.")
|
||||||
ch <- saveFileToTXT(path, "muffin", data)
|
err = saveFileToTXT(path, "muffin", data)
|
||||||
|
if err != nil {
|
||||||
|
ch <- err
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("머핀 데이터 추출 완료")
|
||||||
}()
|
}()
|
||||||
return <-ch
|
|
||||||
|
// nsfw 데이터 추출
|
||||||
|
go func() {
|
||||||
|
defer wg.Done()
|
||||||
|
|
||||||
|
var data []databases.Text
|
||||||
|
|
||||||
|
conn, err := mongo.Connect(options.Client().ApplyURI(configs.Config.DatabaseURL))
|
||||||
|
if err != nil {
|
||||||
|
ch <- err
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
defer conn.Disconnect(context.TODO())
|
||||||
|
|
||||||
|
cur, err := conn.Database(configs.Config.DBName).Collection("text").Find(context.TODO(), bson.D{
|
||||||
|
{
|
||||||
|
Key: "persona",
|
||||||
|
Value: bson.M{
|
||||||
|
"$regex": "^user",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
ch <- err
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
defer cur.Close(context.TODO())
|
||||||
|
|
||||||
|
err = cur.All(context.TODO(), &data)
|
||||||
|
if err != nil {
|
||||||
|
ch <- err
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
err = saveFileToJSON(path, "nsfw", data)
|
||||||
|
if err != nil {
|
||||||
|
ch <- err
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println("nsfw 데이터 추출 완료")
|
||||||
|
}()
|
||||||
|
|
||||||
|
wg.Wait()
|
||||||
|
close(ch)
|
||||||
|
|
||||||
|
for err = range ch {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue