rebasing
This commit is contained in:
152
runner/runner.go
Normal file
152
runner/runner.go
Normal file
@@ -0,0 +1,152 @@
|
||||
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, -7)
|
||||
hours := weekago.Hour()
|
||||
weekago = weekago.Add(time.Duration(-hours) * time.Hour)
|
||||
r.weekago = weekago
|
||||
|
||||
currentTime := time.Now()
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user