5 changed files with 200 additions and 15 deletions
@ -0,0 +1,4 @@ |
|||||||
|
module.exports = { |
||||||
|
singleQuote: true, |
||||||
|
trailingComma: 'none' |
||||||
|
}; |
||||||
@ -0,0 +1,179 @@ |
|||||||
|
import { hasPath, pathOr, props, last } from 'ramda'; |
||||||
|
import { do_request } from './facebook-request.mjs'; |
||||||
|
const sleep = (s) => new Promise((res) => setTimeout(res, s * 1000)); |
||||||
|
|
||||||
|
const doPageEventsTabPastEventsCardRendererQuery = async ({ pageID }) => { |
||||||
|
const doc_id = '4421910857857782'; |
||||||
|
const renderer_query_result = await do_request(doc_id, { pageID }); |
||||||
|
const page = pathOr( |
||||||
|
null, |
||||||
|
['data', 'page', 'past_events'], |
||||||
|
renderer_query_result |
||||||
|
); |
||||||
|
|
||||||
|
if (page === null) { |
||||||
|
console.error('doPageEventsTabPastEventsCardRendererQuery returned null.'); |
||||||
|
} |
||||||
|
|
||||||
|
return page; |
||||||
|
}; |
||||||
|
|
||||||
|
const doPageEventsTabUpcomingEventsCardRendererQuery = async ({ pageID }) => { |
||||||
|
const doc_id = '5182274978466320'; |
||||||
|
const renderer_query_result = await do_request(doc_id, { pageID }); |
||||||
|
const page = pathOr( |
||||||
|
null, |
||||||
|
['data', 'page', 'upcoming_events'], |
||||||
|
renderer_query_result |
||||||
|
); |
||||||
|
|
||||||
|
if (page === null) { |
||||||
|
console.error( |
||||||
|
'doPageEventsTabUpcomingEventsCardRendererQuery returned null.' |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
return page; |
||||||
|
}; |
||||||
|
|
||||||
|
const doPageEventsTabPastEventsCardPaginationQuery = async ({ |
||||||
|
pageID, |
||||||
|
cursor |
||||||
|
}) => { |
||||||
|
const doc_id = '6953034388071359'; |
||||||
|
let count = 9; |
||||||
|
const renderer_query_result = await do_request(doc_id, { |
||||||
|
pageID, |
||||||
|
cursor, |
||||||
|
count |
||||||
|
}); |
||||||
|
const page = pathOr( |
||||||
|
null, |
||||||
|
['data', 'page', 'past_events'], |
||||||
|
renderer_query_result |
||||||
|
); |
||||||
|
|
||||||
|
if (page === null) { |
||||||
|
console.error( |
||||||
|
'doPageEventsTabPastEventsCardPaginationQuery returned null.' |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
return page; |
||||||
|
}; |
||||||
|
|
||||||
|
const doPageEventsTabUpcomingEventsCardPaginationQuery = async ({ |
||||||
|
pageID, |
||||||
|
cursor |
||||||
|
}) => { |
||||||
|
const doc_id = '6985622308176123'; |
||||||
|
let count = 9; |
||||||
|
const renderer_query_result = await do_request(doc_id, { |
||||||
|
pageID, |
||||||
|
cursor, |
||||||
|
count |
||||||
|
}); |
||||||
|
const page = pathOr( |
||||||
|
null, |
||||||
|
['data', 'page', 'upcoming_events'], |
||||||
|
renderer_query_result |
||||||
|
); |
||||||
|
|
||||||
|
if (page === null) { |
||||||
|
console.error( |
||||||
|
'doPageEventsTabUpcomingEventsCardPaginationQuery returned null.' |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
return page; |
||||||
|
}; |
||||||
|
|
||||||
|
// doPageEventsTabPastEventsCardPaginationQuery
|
||||||
|
const get_page_events = async ({ |
||||||
|
pageID, |
||||||
|
get_past_events, |
||||||
|
get_upcoming_events |
||||||
|
}) => { |
||||||
|
let past_events = []; |
||||||
|
|
||||||
|
if (get_past_events) { |
||||||
|
const result = await doPageEventsTabPastEventsCardRendererQuery({ pageID }); |
||||||
|
|
||||||
|
if (result !== null) { |
||||||
|
let { has_next_page, end_cursor: cursor } = result.page_info; |
||||||
|
|
||||||
|
let { edges } = result; |
||||||
|
while (has_next_page) { |
||||||
|
sleep(2); |
||||||
|
const paginationResult = |
||||||
|
await doPageEventsTabPastEventsCardPaginationQuery({ |
||||||
|
cursor, |
||||||
|
pageID |
||||||
|
}); |
||||||
|
if (paginationResult === null) { |
||||||
|
break; |
||||||
|
} |
||||||
|
edges = [...edges, ...paginationResult.edges]; |
||||||
|
has_next_page = paginationResult.page_info.has_next_page; |
||||||
|
cursor = paginationResult.page_info.end_cursor; |
||||||
|
} |
||||||
|
past_events = [...edges]; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
let upcoming_events = []; |
||||||
|
|
||||||
|
if (get_upcoming_events) { |
||||||
|
const result = await doPageEventsTabUpcomingEventsCardRendererQuery({ |
||||||
|
pageID |
||||||
|
}); |
||||||
|
if (result !== null) { |
||||||
|
upcoming_events = []; |
||||||
|
let { has_next_page, end_cursor: cursor } = result.page_info; |
||||||
|
let { edges } = result; |
||||||
|
while (has_next_page) { |
||||||
|
sleep(2); |
||||||
|
const paginationResult = |
||||||
|
await doPageEventsTabUpcomingEventsCardPaginationQuery({ |
||||||
|
cursor, |
||||||
|
pageID |
||||||
|
}); |
||||||
|
if (paginationResult === null) { |
||||||
|
break; |
||||||
|
} |
||||||
|
edges = [...edges, ...paginationResult.edges]; |
||||||
|
|
||||||
|
has_next_page = paginationResult.page_info.has_next_page; |
||||||
|
cursor = paginationResult.page_info.end_cursor; |
||||||
|
} |
||||||
|
upcoming_events = [...edges]; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return [...upcoming_events, ...past_events].map(({ node }) => node); |
||||||
|
}; |
||||||
|
|
||||||
|
/// const events = {
|
||||||
|
/// edges: [
|
||||||
|
/// {
|
||||||
|
/// node: {
|
||||||
|
/// __typename: "Event",
|
||||||
|
/// },
|
||||||
|
/// cursor:
|
||||||
|
/// "AQHRC7ZNKEqDS75jWJfLUWromnLVgAOGzVAZE7c7CcKfoEaLCcXFSvhMvoxN8yk_Yq6fFMTWjuHjitD5sE1IzW68sw",
|
||||||
|
/// },
|
||||||
|
/// ],
|
||||||
|
/// page_info: {
|
||||||
|
/// has_next_page: true,
|
||||||
|
/// end_cursor:
|
||||||
|
/// "AQHRAh7tKZowf3mdyxtYISP1LNVo45rFI8HJ4nT5SuVgl0NBUfZFslx5qy1eba3YXhdjJ-S2vfojcTGF4ygnt_DQiQ",
|
||||||
|
/// },
|
||||||
|
/// };
|
||||||
|
|
||||||
|
(async () => { |
||||||
|
const res = await get_page_events({ |
||||||
|
pageID: '149127815110411', |
||||||
|
get_upcoming_events: true |
||||||
|
}); |
||||||
|
console.log(res); |
||||||
|
})(); |
||||||
Loading…
Reference in new issue