This commit is contained in:
2021-11-01 18:38:58 -05:00
commit 0d2d278260
19 changed files with 875 additions and 0 deletions

102
runner/facebook.go Normal file
View File

@@ -0,0 +1,102 @@
package runner
import (
_ "embed"
"encoding/json"
"fmt"
"time"
)
//go:embed js/facebook_data.js
var facebook_data string
const (
facebook_login_url = "https://m.facebook.com/login/?ref=dbl&fl"
)
type FacebookRes struct {
Followers int `json:"followers"`
Posts []FacebookPost `json:"posts"`
}
type FacebookPost struct {
Engagement int `json:"engagement"`
Body string `json:"body"`
Timestamp time.Time `json:"timestamp"`
URL string `json:"url"`
}
func (r *Runner) CheckFacebook() {
r.page.MustNavigate(facebook_login_url)
r.page.WaitLoad()
time.Sleep(time.Millisecond * 113)
location := r.page.MustEval("window.location.href").Str()
if location == facebook_login_url {
r.page.MustElement(`input[name="email"]`).Input(r.FacebookEmail)
time.Sleep(time.Millisecond * 113)
r.page.MustElement(`input[name="pass"]`).Input(r.FacebookPass)
time.Sleep(time.Millisecond * 72)
r.page.MustElement(`button[name="login"]`).MustClick()
time.Sleep(time.Millisecond * 5000)
}
}
func (r *Runner) GetFacebookData() []Result {
var results []Result
for i := range r.Targets {
fmt.Println("Processing " + r.Targets[i].Name + "'s Facebook")
results = append(results, r.GetFacebookDataByIndex(i))
}
return results
}
//Navigate with random stops
func (r *Runner) FacebookPageNavigate(index int) {
r.page.MustNavigate(r.Targets[index].Facebook)
r.page.MustWaitLoad()
r.Scroll(30, longTimeOut)
}
func (r *Runner) FacebookPagePullData() FacebookRes {
data := r.page.MustEval(facebook_data).JSON("", "")
var res FacebookRes
err := json.Unmarshal([]byte(data), &res)
checkErr(err)
return res
}
func (r *Runner) calcFacebookPostData(posts []FacebookPost) (int, int) {
total_engagement := 0
total_posts := 0
for _, elm := range posts {
if elm.Timestamp.After(r.weekago) && elm.Timestamp.Before(r.currentTime) {
total_engagement += elm.Engagement
total_posts += 1
}
}
return total_engagement, total_posts
}
func (r *Runner) GetFacebookDataByIndex(index int) Result {
r.FacebookPageNavigate(index)
data := r.FacebookPagePullData()
total_engagement, total_posts := r.calcFacebookPostData(data.Posts)
r.logger.LogFacebookRes(data, r.Targets[index].Name)
result := Result{
r.Targets[index].Name,
"Facebook",
data.Followers,
total_engagement,
total_posts,
}
r.logger.LogResult(result, "Facebook")
return result
}