From 73aef6f6e98e361f252f97d3a48e19fc56d76f23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Sverre=20Lien=20Sell=C3=A6g?= Date: Sun, 30 May 2021 15:32:12 +0200 Subject: [PATCH] add facebook page and facebook event endpoitns --- src/constants.js | 1 - src/facebook-event.js | 43 ++++++++++++++++ ...acebook-api.js => facebook-page-events.js} | 49 +------------------ src/facebook-request.js | 41 ++++++++++++++++ src/scrape.js | 2 +- 5 files changed, 87 insertions(+), 49 deletions(-) delete mode 100644 src/constants.js create mode 100644 src/facebook-event.js rename src/{facebook-api.js => facebook-page-events.js} (75%) create mode 100644 src/facebook-request.js diff --git a/src/constants.js b/src/constants.js deleted file mode 100644 index d2df7a3..0000000 --- a/src/constants.js +++ /dev/null @@ -1 +0,0 @@ -exports.graphql_endpoint = 'https://www.facebook.com/api/graphql/'; diff --git a/src/facebook-event.js b/src/facebook-event.js new file mode 100644 index 0000000..56b2ea0 --- /dev/null +++ b/src/facebook-event.js @@ -0,0 +1,43 @@ +const { get_event } = require('./logic'); + +const { do_request } = require('./facebook-request'); + +const do_event_request = async (doc_id, event_id) => { + let variables = { + eventID: `${event_id}`, + }; + const res = await do_request(doc_id, variables); + return get_event(res); +}; + +/// EventsAboutTheVenueCardRendererQuery +const do_event_location_request = (event_id) => { + const doc_id = '1634531006589990'; + return do_event_request(doc_id, event_id); +}; + +/// EventsRelayTicketButtonCallableQuery +const do_event_ticket_request = (event_id) => { + const doc_id = '3806351372819867'; + return do_event_request(doc_id, event_id); +}; + +/// EventsEventDetailsCardRendererQuery +const do_event_desc_request = (event_id) => { + const doc_id = '4360465050633785'; + return do_event_request(doc_id, event_id); +}; + +const get_event_details = async (event_id) => { + const res = await Promise.all([ + do_event_ticket_request(event_id), + do_event_location_request(event_id), + do_event_desc_request(event_id), + ]); + const event = res.reduce((acc, event) => ({ ...acc, ...event }), {}); + return event; +}; + +module.exports = { + get_event_details, +}; diff --git a/src/facebook-api.js b/src/facebook-page-events.js similarity index 75% rename from src/facebook-api.js rename to src/facebook-page-events.js index f773c2f..ea66e3d 100644 --- a/src/facebook-api.js +++ b/src/facebook-page-events.js @@ -1,59 +1,14 @@ -const { graphql_endpoint } = require('./constants'); const { get_edges, - get_event, get_page_info, get_past_events_from_page, get_upcoming_events_from_page, map_event, sleep, } = require('./logic'); -const fetch = require('node-fetch'); -const last = require('ramda/src/last'); - -const do_request = async (doc_id, variables) => { - const params = new URLSearchParams(); - params.append('doc_id', doc_id); - params.append('variables', JSON.stringify(variables)); - - const fetch_options = { - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - }, - body: params, - method: 'POST', - }; - let res = null; - try { - res = await fetch(graphql_endpoint, fetch_options); - } catch (e) { - console.error(e); - return null; - } - - if (!res.ok) { - return null; - } - - try { - res = await res.json(); - } catch (e) { - console.error(e); - return null; - } - - return res; -}; - -const do_event_location_request = async (event_id) => { - const doc_id = '1634531006589990'; - let variables = { - eventID: `${event_id}`, - }; - const res = await do_request(doc_id, variables); - return get_event(res); -}; +const { do_request } = require('./facebook-request'); +const last = require('ramda/src/last'); const do_events_request = async (page_id, doc_id, cursor = null) => { let variables = { diff --git a/src/facebook-request.js b/src/facebook-request.js new file mode 100644 index 0000000..da21300 --- /dev/null +++ b/src/facebook-request.js @@ -0,0 +1,41 @@ +const fetch = require('node-fetch'); +const graphql_endpoint = 'https://www.facebook.com/api/graphql/'; + +const do_request = async (doc_id, variables) => { + const params = new URLSearchParams(); + params.append('doc_id', doc_id); + params.append('variables', JSON.stringify(variables)); + + const fetch_options = { + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + body: params, + method: 'POST', + }; + + let res = null; + try { + res = await fetch(graphql_endpoint, fetch_options); + } catch (e) { + console.error(e); + return null; + } + + if (!res.ok) { + return null; + } + + try { + res = await res.json(); + } catch (e) { + console.error(e); + return null; + } + + return res; +}; + +module.exports = { + do_request, +}; diff --git a/src/scrape.js b/src/scrape.js index c72b67c..223f119 100644 --- a/src/scrape.js +++ b/src/scrape.js @@ -7,7 +7,7 @@ const { write_events, } = require('./logic'); -const { get_page_events } = require('./facebook-api'); +const { get_page_events } = require('./facebook-page-events'); const options = parse_args(process.argv.slice(2));