Skip to content

Commit 0ded94d

Browse files
committed
fetch all added friends
1 parent 19b49c4 commit 0ded94d

File tree

5 files changed

+170
-39
lines changed

5 files changed

+170
-39
lines changed

popup/tabs.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ const tabs = [
114114
s.fb_messengerCount,
115115
s.fb_searchGroupForOther,
116116
s.fb_searchPageForOther,
117+
s.fb_fetchAllAddedFriends,
117118
createTitle("--- UI ---", "--- Giao diện ---"),
118119
s.fb_toggleLight,
119120
s.fb_toggleNewFeed,

scripts/_test.js

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -12,31 +12,36 @@ export default {
1212
},
1313

1414
onClickExtension: async () => {
15-
let url = prompt("Nhập link facebook bạn bè: ");
16-
if (url == null) return;
17-
1815
let { setLoadingText, closeLoading } = showLoading("Đang chuẩn bị...");
1916
try {
20-
let { getUidFromUrl, getYourUserId, getFbdtsg, searchAllGroupForOther } =
21-
UsefulScriptGlobalPageContext.Facebook;
17+
let {
18+
getYourUserId,
19+
getFbdtsg,
20+
fetchAddedFriends,
21+
fetchAllAddedFriendsSince,
22+
} = UsefulScriptGlobalPageContext.Facebook;
2223

2324
setLoadingText("Đang lấy uid, token...");
24-
let other_uid = await getUidFromUrl(url);
2525
let uid = await getYourUserId();
2626
let dtsg = await getFbdtsg();
2727

28-
setLoadingText("Đang tải thông tin group...");
29-
let allGroups = await searchAllGroupForOther(
30-
other_uid,
28+
setLoadingText("Đang tải thông tin...");
29+
// let twoMonthAgo = parseInt(new Date() / 1e3 - 5184e3).toString();
30+
const allFriends = await fetchAllAddedFriendsSince(
3131
uid,
3232
dtsg,
33-
(groups, all) => {
33+
null, // twoMonthAgo
34+
(data, total) => {
35+
let lastest = data[data.length - 1];
3436
setLoadingText(
35-
"Đang tải thông tin group...\nTải được " + all.length + " group."
37+
`Đang lấy thông tin...<br/>` +
38+
`Tải được ${total.length} bạn.<br/>` +
39+
`Thời điểm: ` +
40+
new Date(lastest?.addedTime).toLocaleDateString()
3641
);
3742
}
3843
);
39-
console.log(allGroups);
44+
console.log(allFriends);
4045
} catch (e) {
4146
alert("ERROR: " + e);
4247
} finally {

scripts/content-scripts/scripts/ufs_global_webpage_context.js

Lines changed: 99 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,73 @@ const UsefulScriptGlobalPageContext = {
431431
}
432432
);
433433
},
434-
async fetchAddedFriends(uid, fb_dtsg, cursor) {},
434+
async fetchAddedFriends(uid, fb_dtsg, cursor) {
435+
let variables = JSON.stringify({
436+
count: 8,
437+
cursor: cursor ?? null,
438+
category_key: "FRIENDS",
439+
});
440+
const t = new URLSearchParams();
441+
t.append("__user", uid),
442+
t.append("__a", 1),
443+
t.append("dpr", 1),
444+
t.append("fb_dtsg", fb_dtsg),
445+
t.append("fb_api_caller_class", "RelayModern"),
446+
t.append("fb_api_req_friendly_name", "ActivityLogStoriesQuery"),
447+
t.append("doc_id", "2761528123917382"),
448+
t.append("variables", variables);
449+
450+
let res = await fetch("https://www.facebook.com/api/graphql/", {
451+
method: "POST",
452+
body: t,
453+
});
454+
let json = await res.json();
455+
456+
let { edges, page_info } =
457+
json.data.viewer.activity_log_actor.activity_log_stories;
458+
459+
return {
460+
nextCursor: page_info.end_cursor,
461+
data: edges
462+
.map((e) => {
463+
if (
464+
"UNFRIEND" === e.curation_options[0] ||
465+
e.node.attachments.length
466+
) {
467+
return {
468+
uid: e.node.attachments[0].target.id,
469+
name: e.node.attachments[0].title_with_entities.text,
470+
avatar: e.node.attachments[0].media.image.uri,
471+
addedTime: 1e3 * e.node.creation_time,
472+
};
473+
}
474+
return null;
475+
})
476+
.filter((_) => _),
477+
};
478+
},
479+
async fetchAllAddedFriendsSince(uid, fb_dtsg, since, pageFetchedCallback) {
480+
let cursor = "";
481+
let allFriends = [];
482+
try {
483+
while (true) {
484+
let { nextCursor, data } =
485+
await UsefulScriptGlobalPageContext.Facebook.fetchAddedFriends(
486+
uid,
487+
fb_dtsg,
488+
cursor
489+
);
490+
cursor = nextCursor;
491+
allFriends = allFriends.concat(data);
492+
await pageFetchedCallback?.(data, allFriends);
493+
494+
if (!nextCursor || (since && nextCursor < since)) break;
495+
}
496+
} catch (e) {
497+
console.log("ERROR fetch all added friends", e);
498+
}
499+
return allFriends;
500+
},
435501

436502
// Messages
437503
async messagesCount(fb_dtsg) {
@@ -508,20 +574,23 @@ const UsefulScriptGlobalPageContext = {
508574
async searchAllPageForOther(other_uid, uid, fb_dtsg, pageFetchedCallback) {
509575
let cursor = "";
510576
let allPages = [];
511-
while (true) {
512-
let { nextCursor, data } =
513-
await UsefulScriptGlobalPageContext.Facebook.searchPageForOther(
514-
other_uid,
515-
cursor,
516-
uid,
517-
fb_dtsg
518-
);
519-
if (!nextCursor) {
520-
break;
577+
try {
578+
while (true) {
579+
let { nextCursor, data } =
580+
await UsefulScriptGlobalPageContext.Facebook.searchPageForOther(
581+
other_uid,
582+
cursor,
583+
uid,
584+
fb_dtsg
585+
);
586+
cursor = nextCursor;
587+
allPages = allPages.concat(data);
588+
await pageFetchedCallback?.(data, allPages);
589+
590+
if (!cursor) break;
521591
}
522-
cursor = nextCursor;
523-
allPages = allPages.concat(data);
524-
await pageFetchedCallback?.(data, allPages);
592+
} catch (e) {
593+
console.log("ERROR search all page for other", e);
525594
}
526595
return allPages;
527596
},
@@ -602,20 +671,23 @@ const UsefulScriptGlobalPageContext = {
602671
async searchAllGroupForOther(other_uid, uid, fb_dtsg, pageFetchedCallback) {
603672
let cursor = "";
604673
let allGroups = [];
605-
while (true) {
606-
let { nextCursor, data } =
607-
await UsefulScriptGlobalPageContext.Facebook.searchGroupForOther(
608-
other_uid,
609-
cursor,
610-
uid,
611-
fb_dtsg
612-
);
613-
if (!nextCursor) {
614-
break;
674+
try {
675+
while (true) {
676+
let { nextCursor, data } =
677+
await UsefulScriptGlobalPageContext.Facebook.searchGroupForOther(
678+
other_uid,
679+
cursor,
680+
uid,
681+
fb_dtsg
682+
);
683+
cursor = nextCursor;
684+
allGroups = allGroups.concat(data);
685+
await pageFetchedCallback?.(data, allGroups);
686+
687+
if (!cursor) break;
615688
}
616-
cursor = nextCursor;
617-
allGroups = allGroups.concat(data);
618-
await pageFetchedCallback?.(data, allGroups);
689+
} catch (e) {
690+
console.log("ERROR search all group for other", e);
619691
}
620692
return allGroups;
621693
},

scripts/fb_fetchAllAddedFriends.js

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import { showLoading } from "./helpers/utils.js";
2+
3+
export default {
4+
icon: '<i class="fa-solid fa-user-group fa-lg"></i>',
5+
name: {
6+
en: "Facebook - Fetch all added friends",
7+
vi: "Facebook - Xem tất cả bạn bè đã thêm",
8+
},
9+
description: {
10+
en: "View all friends added to your Facebook account.",
11+
vi: "Xem danh sách tất cả bạn bè facebook đã kết bạn với bạn.",
12+
},
13+
14+
onClickExtension: async () => {
15+
let { setLoadingText, closeLoading } = showLoading("Đang chuẩn bị...");
16+
try {
17+
let {
18+
getYourUserId,
19+
getFbdtsg,
20+
fetchAddedFriends,
21+
fetchAllAddedFriendsSince,
22+
} = UsefulScriptGlobalPageContext.Facebook;
23+
24+
setLoadingText("Đang lấy uid, token...");
25+
let uid = await getYourUserId();
26+
let dtsg = await getFbdtsg();
27+
28+
setLoadingText("Đang tải thông tin...");
29+
// let twoMonthAgo = parseInt(new Date() / 1e3 - 5184e3).toString();
30+
const allFriends = await fetchAllAddedFriendsSince(
31+
uid,
32+
dtsg,
33+
null, // twoMonthAgo
34+
(data, total) => {
35+
let lastest = data[data.length - 1];
36+
setLoadingText(
37+
`Đang lấy thông tin...<br/>` +
38+
`Tải được ${total.length} bạn.<br/>` +
39+
`Thời điểm: ` +
40+
new Date(lastest?.addedTime).toLocaleDateString()
41+
);
42+
}
43+
);
44+
console.log(allFriends);
45+
} catch (e) {
46+
alert("ERROR: " + e);
47+
} finally {
48+
closeLoading();
49+
}
50+
},
51+
};

scripts/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ import fb_removeFbclid from "./fb_removeFbclid.js";
165165
import fb_messengerCount from "./fb_messengerCount.js";
166166
import fb_searchGroupForOther from "./fb_searchGroupForOther.js";
167167
import fb_searchPageForOther from "./fb_searchPageForOther.js";
168+
import fb_fetchAllAddedFriends from "./fb_fetchAllAddedFriends.js";
168169

169170
// inject badges
170171
const allScripts = {
@@ -348,6 +349,7 @@ const allScripts = {
348349
fb_messengerCount: addBadge(fb_messengerCount, BADGES.new),
349350
fb_searchGroupForOther: addBadge(fb_searchGroupForOther, BADGES.new),
350351
fb_searchPageForOther: addBadge(fb_searchPageForOther, BADGES.new),
352+
fb_fetchAllAddedFriends: addBadge(fb_fetchAllAddedFriends, BADGES.new),
351353
};
352354

353355
// alert(Object.keys(allScripts).length);

0 commit comments

Comments
 (0)