<?php /** * Proof of concept, retrieve publicly-available Facebook page event data. * Chris Hardie <chris@chrishardie.com> * * To use, first add Guzzle as a dependency: * $ commposer require guzzlehttp/guzzle * */ require 'vendor/autoload.php'; use GuzzleHttp\Client; define( 'FB_UPCOMING_EVENT_DOC_ID', 2343886202319301 ); $facebook_pages = array( '50650939390' => array( 'page_name' => 'Richmond Parks Department', 'page_url' => 'https://www.facebook.com/richmondparks/', 'category' => 'outdoor', ), ); $facebook_base_params = array( 'fb_api_req_friendly_name' => 'PageEventsTabUpcomingEventsCardRendererQuery', '__req' => '8', '__user' => '0', 'av' => '0', '__a' => '1', '__be' => '1', 'dpr' => '2', 'fb_api_caller_class' => 'RelayModern', '__pc:PHASED' => 'DEFAULT', '__comet_req' => 'false', ); $client = new Client( [ // Base URI is used with relative requests 'base_uri' => 'https://www.facebook.com', // You can set any number of default request options. 'timeout' => 2.0, ] ); $headers = [ 'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36', 'Content-Type' => 'application/x-www-form-urlencoded', 'Origin' => 'https://www.facebook.com', ]; foreach ( $facebook_pages as $facebook_page_id => $facebook_page ) { $facebook_variable_value = '{"pageID":"' . $facebook_page_id . '"}'; $facebook_form_params = array_merge( $facebook_base_params, array( 'variables' => $facebook_variable_value, 'doc_id' => FB_UPCOMING_EVENT_DOC_ID, ) ); $upcoming_event_response = $client->request( 'POST', '/api/graphql/', [ 'headers' => $headers, 'form_params' => $facebook_form_params, ] ); $response_code = $upcoming_event_response->getStatusCode(); if ( ! empty( $response_code ) && ( 200 === $response_code ) ) { $body = $upcoming_event_response->getBody(); if ( null !== $body ) { $fb_response = json_decode( $body, true ); $fb_events = $fb_response['data']['page']['upcoming_events']['edges']; } } if ( ! empty( $fb_events ) && ( 0 < count( $fb_events ) ) ) { foreach ( $fb_events as $fb_event ) { $event = $fb_event['node']; echo $event['id'] . PHP_EOL; echo $event['name'] . PHP_EOL; echo $event['time_range']['start'] . PHP_EOL; echo $event['event_place']['contextual_name'] . PHP_EOL; echo $event['event_place']['city']['contextual_name'] . PHP_EOL; echo $event['event_buy_ticket_url'] . PHP_EOL; echo PHP_EOL; } } } exit;