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 }