Last active
August 29, 2015 14:24
-
-
Save jdsteinbach/cb81e1d8dfa57be545e6 to your computer and use it in GitHub Desktop.
Self-Hosted Faux-API Script for Cotton Bureau Shirt Sales Data
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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