Skip to content

Instantly share code, notes, and snippets.

@dvygolov
Last active November 20, 2023 12:48
Show Gist options
  • Save dvygolov/fdff8e43b61f4dd02fd9a4d28ad679dd to your computer and use it in GitHub Desktop.
Save dvygolov/fdff8e43b61f4dd02fd9a4d28ad679dd to your computer and use it in GitHub Desktop.
This script adds likes to one page from all of the other pages from your account, run it in the browser's console in Ads Manager
const GRAPH_API_URL = "https://graph.facebook.com/v18.0";
class FacebookManager {
constructor() {
this.adsManagerToken = __accessToken;
this.defaultFetchOptions = {
mode: "cors",
method: "GET",
credentials: "include",
redirect: "follow",
};
}
async fetchFromAPI(endpoint, options = {}, addDefaultOptions = true) {
const requestOptions = addDefaultOptions
? { ...this.defaultFetchOptions, ...options }
: { ...options };
const response = await fetch(
`${GRAPH_API_URL}/${endpoint}`,
requestOptions,
);
return await response.json();
}
async privateApiRequest(
variables,
docId,
url = null,
suppressEvaluation = true,
) {
if (url == null) url = "/api/graphql";
return new Promise(async (resolve, reject) => {
try {
let req = new AsyncRequest()
.setOption("suppressEvaluation", suppressEvaluation)
.setOption("asynchronous_DEPRECATED", !0)
.setOption("retries", 10)
.setAllowCrossOrigin(!0)
.setAllowCrossPageTransition(!0)
.setURI(url)
.setMethod("POST")
.setData({ doc_id: docId, variables: JSON.stringify(variables) })
.setHandler((e) => {
resolve(JSON.parse(e.payload.responseText));
});
req.send();
} catch (error) {
reject(error);
}
});
}
async likePage(sourcePageId, targetPageId) {
let uid = require("CurrentUserInitialData").USER_ID;
return await this.privateApiRequest(
{
input: {
source_page_id: sourcePageId,
targe_page_id: targetPageId,
actor_id: uid,
client_mutation_id: "1",
},
targetPageId: targetPageId,
isAdminView: false,
},
"6845219162200157",
);
}
async getPages() {
const data = await this.fetchFromAPI(
`me/accounts?access_token=${this.adsManagerToken}`,
);
if (data.data.length === 0) {
throw new Error("No pages accessible with this token!");
}
let selectedPageId = 0;
let useManual = confirm("Do you want to enter page id manually?");
if (useManual) {
selectedPageId = prompt("Enter page id to like:");
} else {
const pageNames = data.data.map((page) => page.name);
const pageIndex =
parseInt(
prompt(
`Page Liker by Yellow Web\nSelect a target page by entering its number:\n${pageNames
.map((name, idx) => `${idx + 1}. ${name}`)
.join("\n")}`,
),
10,
) - 1;
if (pageIndex < 0 || pageIndex >= data.data.length) {
throw new Error("Invalid page selection.");
}
selectedPageId = data.data[pageIndex].id;
}
return {
targetId: selectedPageId,
pagesIds: data.data.map((page) => page.id),
};
}
}
async function main() {
try {
const manager = new FacebookManager();
let res = await manager.getPages();
for (let index = 0; index < res.pagesIds.length; index++) {
const curPageId = res.pagesIds[index];
if (curPageId == res.targetId) continue;
console.log(await manager.likePage(curPageId, res.targetId));
console.log(`Liked ${res.targetId} from ${curPageId}`);
}
alert("All Done!");
} catch (error) {
console.error("Error:", error.message);
}
}
await main();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment