Advertisement
Guest User

Eventbrite PHP API

a guest
Aug 13th, 2014
341
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.49 KB | None | 0 0
  1. <?php
  2.  
  3. date_default_timezone_set('GMT');
  4. $now = new DateTime();
  5.  
  6. function findById($id, $ticket_classes)
  7. {
  8.     foreach ($ticket_classes as &$ticket) {
  9.         if ($ticket->id == $id) {
  10.             return $ticket;
  11.         }
  12.     }
  13.     return null;
  14. }
  15.  
  16. function getTicketsLeft($ticket, $forceShow = false)
  17. {
  18.     if ($forceShow) // Do we actually need this data regardless, for calculation?
  19.         return $ticket->quantity_total - $ticket->quantity_sold;
  20.     elseif ( // Ignore these ticket types (sales too), never show the remaining quantity
  21.             stripos($ticket->name, 'General Admission') !== false ||
  22.             stripos($ticket->name, 'Box Seats') !== false ||
  23.             stripos($ticket->name, 'Foals 6-12') !== false ||
  24.             stripos($ticket->name, 'Foals 5-and-Under') !== false ||
  25.             stripos($ticket->name, 'Military Discount Admission') !== false ||
  26.             stripos($ticket->name, 'Senior Discount Admission') !== false
  27.             )
  28.         return null;
  29.     elseif ($ticket->quantity_total - $ticket->quantity_sold < 100) // Don't show unless we have less than 100 available
  30.         return $ticket->quantity_total - $ticket->quantity_sold;
  31.     else
  32.         return null;
  33. }
  34.  
  35. function checkTicketAvailability($ticket, $ticket_classes)
  36. {
  37.     global $now;
  38.  
  39.     if ($ticket->hidden) // Hidden from the public?
  40.         return false;
  41.     elseif (isset($ticket->sales_start_after)) { // Is there another ticket that we want to show instead of this? And if so, is it still available?
  42.         $ticketAfter = findById($ticket->sales_start_after, $ticket_classes);
  43.         if (isset($ticketAfter)) {
  44.             if (checkTicketAvailability($ticketAfter, $ticket_classes) && getTicketsLeft($ticketAfter, true) !== 0) {
  45.                 return false;
  46.             }
  47.         }
  48.     }
  49.     elseif (isset($ticket->sales_start) && new DateTime($ticket->sales_start) > $now) // Are we selling yet?
  50.         return false;
  51.     elseif (new DateTime($ticket->sales_end) < $now) // Are we still
  52.         return false;
  53.     else
  54.         return true;
  55. }
  56.  
  57. function refreshTicketData()
  58. {
  59.     // See http://developer.eventbrite.com/docs/ for details!
  60.  
  61.  
  62.     // Various request-related variables
  63.     $token = '3BS25F7EIU2IIB4YWQWF'; // Example OAuth Token
  64.     $eventID = '11109810743'; // Example Event ID
  65.  
  66.     // Build the request
  67.     $url = 'https://www.eventbriteapi.com/v3/events/' . $eventID . '/ticket_classes/?token=' . $token;
  68.  
  69.     // Run the request
  70.     $handle = curl_init($url);
  71.     curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1);
  72.     $output = curl_exec($handle);
  73.     $respInfo = curl_getinfo($handle);
  74.     curl_close($handle);
  75.  
  76.     // Parse the response
  77.     $outData = json_decode($output); // Outputs as an associative array
  78.     $respCode = $respInfo['http_code'];
  79.  
  80.  
  81.     if ($respCode == 404)
  82.     {
  83.         return json_encode(array("status_code" => 404));
  84.     }
  85.     elseif ($respCode == 400 || $respCode == 403)
  86.     {
  87.         return json_encode(array(
  88.                     "status_code" => $outData->status_code,
  89.                     "error" => $outData->error,
  90.                     "error_description" => $outData->error_description
  91.                 ));
  92.     }
  93.     elseif ($respCode == 200)
  94.     {
  95.         $outArr = array();
  96.         foreach ($outData->ticket_classes as &$ticket) {
  97.  
  98.             if (!checkTicketAvailability($ticket, $outData->ticket_classes))
  99.                 continue;
  100.  
  101.             $ticketData = array("name" => $ticket->name);
  102.  
  103.             if (isset($ticket->description))
  104.                 $ticketData['description'] = $ticket->description;
  105.             else
  106.                 $ticketData['description'] = NULL;
  107.  
  108.             $ticketData['quantity_remaining'] = getTicketsLeft($ticket);
  109.  
  110.             if ($ticket->free) {
  111.                 $ticketData['cost'] = "Free";
  112.                 $ticketData['cost_numeric'] = 0;
  113.             } else {
  114.                 $ticketData['cost'] = $ticket->cost->display;
  115.                 $ticketData['cost_numeric'] = $ticket->cost->value;
  116.             }
  117.  
  118.             $outArr[] = $ticketData;
  119.         }
  120.         return json_encode($outArr);
  121.     }
  122.     else
  123.     {
  124.         return json_encode(array(
  125.             "status_code" => $respCode,
  126.             "error" => "ERR_UNKNOWN_RESP",
  127.             "error_description" => "Unknown response code (see status_code)"
  128.         ));
  129.     }
  130. }
  131.  
  132. function getTickets() {
  133.     $user = 'test';
  134.     $pass = 'test';
  135.     $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
  136.     $query = $dbh->query('SELECT *, NOW() AS CurrTime FROM test LIMIT 1');
  137.     if ($query->rowCount() === 0) { // Does the cache even exist?
  138.  
  139.         $queryUpdate = $dbh->prepare('INSERT INTO `test`(`Value`, `CacheTime`, `IsUpdating`) VALUES ("[{}]",CURRENT_TIMESTAMP,1)');
  140.         $queryUpdate->execute();
  141.  
  142.         $output = refreshTicketData();
  143.  
  144.         $queryUpdate = $dbh->prepare('UPDATE `test` SET `Value`=:text,`CacheTime`=CURRENT_TIMESTAMP,`IsUpdating`=0 WHERE 1');
  145.         $queryUpdate->execute(array(':text'=>$output));
  146.  
  147.         //return "Cache data: " . $output . " (Re-Cached" . (isset($_GET['force']) && $_GET['force'] == 1 ? " - FORCED" : "") . ")";
  148.         return $output;
  149.     } else {
  150.         $data = $query->fetch(PDO::FETCH_ASSOC);
  151.         if ((isset($_GET['force']) && $_GET['force'] == 1) || (!$data['IsUpdating'] && date_sub(new DateTime($data['CurrTime']), new DateInterval('PT1M30S')) >= new DateTime($data['CacheTime']))) {
  152.             $queryUpdate = $dbh->prepare('UPDATE `test` SET `IsUpdating`=1 WHERE 1'); // Do we either want to force an update, or is the cache invalid/outdated?
  153.             $queryUpdate->execute();
  154.  
  155.             $output = refreshTicketData();
  156.  
  157.             $queryUpdate = $dbh->prepare('UPDATE `test` SET `Value`=:text,`CacheTime`=CURRENT_TIMESTAMP,`IsUpdating`=0 WHERE 1');
  158.             $queryUpdate->execute(array(':text'=>$output));
  159.  
  160.             //return "Cache data: " . $output . " (Re-Cached" . (isset($_GET['force']) && $_GET['force'] == 1 ? " - FORCED" : "") . ")";
  161.             return $output;
  162.         } else {
  163.             //return "Cache data: " . $data['Value'] . " (At " . $data['CacheTime'] . ")";
  164.             return $data['Value'];
  165.         }
  166.     }
  167.     $dbh = null; // Cus redundancy
  168. }
  169.  
  170. echo getTickets();
  171.  
  172. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement