153 lines
3.0 KiB
Go
153 lines
3.0 KiB
Go
package runner
|
|
|
|
import (
|
|
"os"
|
|
"os/signal"
|
|
"path"
|
|
"path/filepath"
|
|
"time"
|
|
|
|
"github.com/go-rod/rod"
|
|
"github.com/go-rod/rod/lib/devices"
|
|
"github.com/go-rod/rod/lib/launcher"
|
|
"github.com/xuri/excelize/v2"
|
|
)
|
|
|
|
const (
|
|
longTimeOut int = 2000
|
|
)
|
|
|
|
type Runner struct {
|
|
page *rod.Page
|
|
logger *Logger
|
|
Targets []Target
|
|
FacebookEmail string
|
|
FacebookPass string
|
|
InstaUser string
|
|
InstaPass string
|
|
work_dir string
|
|
weekago time.Time
|
|
currentTime time.Time
|
|
}
|
|
|
|
type Target struct {
|
|
Name string `json:"name"`
|
|
Facebook string `json:"facebook"`
|
|
Instagram string `json:"instagram"`
|
|
}
|
|
|
|
func getExecutablePath() string {
|
|
exe_path, err := os.Executable()
|
|
checkErr(err)
|
|
work_dir := filepath.Dir(exe_path)
|
|
return work_dir
|
|
}
|
|
|
|
func parseConfig(r *Runner) {
|
|
f, err := excelize.OpenFile(path.Join(r.work_dir, "config.xlsx"))
|
|
checkErr(err)
|
|
|
|
//Facebook
|
|
cell, err := f.GetCellValue("Sheet1", "E1")
|
|
checkErr(err)
|
|
r.FacebookEmail = cell
|
|
cell, err = f.GetCellValue("Sheet1", "E2")
|
|
checkErr(err)
|
|
r.FacebookPass = cell
|
|
|
|
//Insta
|
|
cell, err = f.GetCellValue("Sheet1", "E3")
|
|
checkErr(err)
|
|
r.InstaUser = cell
|
|
cell, err = f.GetCellValue("Sheet1", "E4")
|
|
checkErr(err)
|
|
r.InstaPass = cell
|
|
|
|
rows, err := f.GetRows("Sheet1")
|
|
checkErr(err)
|
|
var targets []Target
|
|
for i, row := range rows {
|
|
var target Target
|
|
if i != 0 {
|
|
for j, colCell := range row {
|
|
switch j {
|
|
case 0:
|
|
target.Name = colCell
|
|
case 1:
|
|
target.Facebook = colCell
|
|
case 2:
|
|
target.Instagram = colCell
|
|
}
|
|
}
|
|
}
|
|
if len(target.Name) > 0 {
|
|
targets = append(targets, target)
|
|
}
|
|
}
|
|
r.Targets = targets
|
|
}
|
|
|
|
func configRod(r *Runner) {
|
|
u := launcher.New().
|
|
Set("user-data-dir", path.Join(r.work_dir, "browser")).
|
|
Headless(false).
|
|
MustLaunch()
|
|
|
|
r.page = rod.New().ControlURL(u).MustConnect().MustPage()
|
|
r.page.MustEmulate(devices.IPhone6or7or8Plus)
|
|
}
|
|
|
|
func setTime(r *Runner) {
|
|
//Establish the date
|
|
weekago := time.Now().AddDate(0, 0, -14)
|
|
hours := weekago.Hour()
|
|
weekago = weekago.Add(time.Duration(-hours) * time.Hour)
|
|
r.weekago = weekago
|
|
|
|
currentTime := time.Now().AddDate(0, 0, -7)
|
|
hours = currentTime.Hour()
|
|
r.currentTime = currentTime.Add(time.Duration(-hours) * time.Hour)
|
|
}
|
|
|
|
func NewRunner() *Runner {
|
|
work_dir := getExecutablePath()
|
|
var runner = new(Runner)
|
|
runner.work_dir = work_dir
|
|
parseConfig(runner)
|
|
configRod(runner)
|
|
setTime(runner)
|
|
runner.logger = NewLogger(work_dir, runner.weekago, runner.currentTime)
|
|
|
|
return runner
|
|
}
|
|
|
|
func (r *Runner) RunAll() []Result {
|
|
r.CheckInstaGram()
|
|
idata := r.GetInstaData()
|
|
r.CheckFacebook()
|
|
fdata := r.GetFacebookData()
|
|
return append(idata, fdata...)
|
|
}
|
|
|
|
func (r *Runner) RunInsta() []Result {
|
|
r.CheckInstaGram()
|
|
idata := r.GetInstaData()
|
|
return idata
|
|
}
|
|
|
|
func (r *Runner) RunFacebook() []Result {
|
|
r.CheckFacebook()
|
|
fdata := r.GetFacebookData()
|
|
return fdata
|
|
}
|
|
|
|
func (r *Runner) Close() {
|
|
r.logger.Close()
|
|
}
|
|
|
|
func (r *Runner) JustOpen() {
|
|
signal_channel := make(chan os.Signal, 1)
|
|
signal.Notify(signal_channel, os.Interrupt)
|
|
<-signal_channel
|
|
}
|