Skip to content

Instantly share code, notes, and snippets.

@jdsteinbach
Last active August 29, 2015 14:24
Show Gist options
  • Save jdsteinbach/cb81e1d8dfa57be545e6 to your computer and use it in GitHub Desktop.
Save jdsteinbach/cb81e1d8dfa57be545e6 to your computer and use it in GitHub Desktop.
Self-Hosted Faux-API Script for Cotton Bureau Shirt Sales Data
<?php
header('Content-Type: application:json');
header("Access-Control-Allow-Origin: *");
/* CONFIG - EDIT THESE VARIABLEs TO YOUR HEART'S CONTENT */
$shirt_url = 'https://cottonbureau.com/products/your-shirt';
$cache_duration = 60; // in minutes
$notification_email = '[email protected]';
$notification_from_header = 'From: CB Notification <[email protected]>';
/* NOPE - DON'T EDIT ANYTHING BELOW THIS LINE! */
function trim_data($content, $str_start, $str_end) {
$t_length = strlen($str_start);
$start = strpos($content, $str_start) + $t_length;
$end = strpos($content, $str_end, $start);
$length = $end - $start;
$data = substr($content, $start, $length) ? substr($content, $start, $length) : null;
return $data;
}
function curl_download($Url){
if (!function_exists('curl_init')){
die('cURL is not installed. Install and try again.');
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $Url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
curl_close($ch);
$sold = trim_data($output, 'data-sold="', '"');
$days_left = trim_data($output, '<span class="Meter-num">', '</span');
$return = array(
'sold' => $sold,
'days_left' => $days_left);
$return['meta']['cached'] = true;
$return['meta']['cache_time'] = date("Y-m-d H:i:s");
return $return;
}
$json = json_decode( file_get_contents('cb.json') );
$current_time = new DateTime('now');
$cache_time = new DateTime($json->meta->cache_time);
$interval = $current_time->diff($cache_time, true);
if ( $interval->i > $cache_duration ) :
$cb = curl_download( $shirt_url );
chmod('cb.json', 0777);
file_put_contents('cb.json', json_encode($cb));
chmod('cb.json', 0664);
echo json_encode($cb);
$cb['meta']['cached'] = false;
if ( $json->sold !== $cb['sold'] ) :
$address = $notification_email;
$subject = sprintf('CB Shirt Update: %s', $cb['sold']);
$msg = sprintf('You’re up to %s shirts!', $cb['sold']);
$from = $notification_from_header;
mail($address, $subject, $msg, $from);
endif;
else :
echo file_get_contents('cb.json');
endif;
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment