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

106
runner/js/facebook_data.js Normal file
View File

@@ -0,0 +1,106 @@
() => {
function getTimeStamp(time_string) {
let d = new Date();
if (time_string.includes("Yesterday")) {
return (new Date(d.setDate(d.getDate() - 1)))
} else if (time_string.includes("AM") || time_string.includes("PM")) {
var date_strings = time_string.split(" ")
if (date_strings.length === 5) {
var month_string = date_strings[0]
var month = 0
switch (month_string) {
case "January":
month = 1
break
case "February":
month = 2
break
case "March":
month = 3
break
case "April":
month = 4
break
case "May":
month = 5
break
case "June":
month = 6
break
case "July":
month = 7
break
case "August":
month = 8
break
case "September":
month = 9
break
case "October":
month = 10
break
case "November":
month = 11
break
case "December":
month = 12
break
}
var day = parseInt(date_strings[1])
var year = d.getFullYear()
if (month === 12 && d.getMonth() !== month) {
year += 1
}
var hours = parseInt(date_strings[3].split(":")[0])
if (hours < 12 && date_strings[4] === "PM") {
hours += 12
}
var minutes = parseInt(date_strings[3].split(":")[1])
return new Date(year, month - 1, day, hours, minutes)
}
} else {
return (new Date())
}
}
function getURL(elm) {
res = elm.getElementsByTagName("a")
for (let i = 0; i < res.length; i++) {
if (res[i].href.includes("story.php?") && res[i].getAttribute("aria-label") == "Open story") {
return res[i].href
}
}
}
function getEngagement(elm) {
res = elm.getElementsByTagName("footer")[0]
engage_reg = /\d+/g
total = 0
try {
res.innerText.match(engage_reg).forEach(match => {
total += parseInt(match)
})
} catch (e) { return 0 }
return total
}
//Followers
followers = parseInt(document.getElementsByName("description")[0].getAttribute("content").replace(/,/g, '').match(/\d+/g)[0])
arts = document.getElementsByTagName("article")
posts = []
for (var i = 0; i < arts.length; i++) {
var timestamp = getTimeStamp(arts[i].getElementsByTagName("abbr")[0].innerText)
//Not accurate
var body = arts[i].innerText
var url = getURL(arts[i])
var engagement = getEngagement(arts[i])
if(url){
posts.push({ timestamp: timestamp.toISOString(), body: body, engagement: engagement, url: url })
}
}
return { followers: followers, posts: posts }
}

View File

@@ -0,0 +1,24 @@
() => {
follower_data = document.getElementsByTagName("span")
followers = 0
for (i = 0; i < follower_data.length; i++) {
if (!isNaN(parseInt(follower_data[i].title.replace(/,/g, "")))) {
followers = parseInt(follower_data[i].title.replace(/,/g, ""))
}
}
//Urls
res = document.getElementsByTagName("a")
insta_urls = []
for (let i = 0; i < res.length; i++) {
if (res[i].getAttribute("href").length == 15 && res[i].getAttribute("href").search("/p/") == 0) {
insta_urls.push(res[i].getAttribute("href"))
}
}
window["data"] = {
urls: insta_urls,
followers: followers
}
}

View File

@@ -0,0 +1,3 @@
() => {
return document.getElementsByTagName("main")[0].innerText.split("Follow\n").length
}

View File

@@ -0,0 +1,10 @@
() => {
res = document.getElementsByTagName("a")
for (i = 0; i < res.length; i++) {
if (res[i].href) {
if (res[i].href.includes("liked_by")) {
return res[i]
}
}
}
}

View File

@@ -0,0 +1,37 @@
() => {
//TimeStamp
res = document.getElementsByTagName("time")
timestamp = res[0].getAttribute("datetime")
//Engage
res = document.getElementsByTagName("article")
like_reg = /\d+ likes/
comment_reg = /\d+ comments/
view_reg = /\d+ views/
comma_reg = /,/g
engagement = 0
comments = 0
likes = 0
views = 0
try {
engagement += parseInt(res[0].innerText.replace(comma_reg, "").match(like_reg)[0])
likes += parseInt(res[0].innerText.replace(comma_reg, "").match(like_reg)[0])
} catch (e) { }
try {
engagement += parseInt(res[0].innerText.replace(comma_reg, "").match(comment_reg)[0])
comments += parseInt(res[0].innerText.replace(comma_reg, "").match(comment_reg)[0])
} catch (e) { }
try {
engagement += parseInt(res[0].innerText.replace(comma_reg, "").match(view_reg)[0])
views += parseInt(res[0].innerText.replace(comma_reg, "").match(view_reg)[0])
} catch (e) { }
//Text Content
start = res[0].innerText.search(like_reg)
finish = res[0].innerText.search(comment_reg)
body = res[0].innerText.substr(start, (finish - start)).split("\n")[1]
return {
timestamp: timestamp, body: body, engagement: engagement, likes: likes, comments: comments, views: views
}
}

26
runner/js/scroll.js Normal file
View File

@@ -0,0 +1,26 @@
async (limit,timeout) => {
const getScrollHeight = (element) => {
if (!element) return 0
const { scrollHeight, offsetHeight, clientHeight } = element
return Math.max(scrollHeight, offsetHeight, clientHeight)
}
const position = await new Promise((resolve) => {
let count = 0
let limit_counter = 0
const intervalId = setInterval(() => {
const { body } = document
const availableScrollHeight = getScrollHeight(body)
window.scrollBy(0, 250)
count += 250
limit_counter += 1
if (count >= availableScrollHeight || limit_counter > limit) {
clearInterval(intervalId)
resolve(count)
}
}, timeout)
})
return position
}