diff --git a/GooglePlaces.php b/GooglePlaces.php new file mode 100644 index 0000000..fc0db7f --- /dev/null +++ b/GooglePlaces.php @@ -0,0 +1,151 @@ +key = $key; + } + + function __set($variable, $value) + { + // Compensates for mixed variable naming + $variable = str_replace('_', '', strtolower($variable)); + $this->$variable = $value; + } + + public function __call($method, $arguments) + { + $method = strtolower($method); + $url = implode('/', array($this->base_url, $method, $this->output)); + + $parameters = array(); + + // Loops through all of our variables to make a parameter list + foreach (get_object_vars($this) as $variable => $value) + { + // Except these variables + if (!in_array($variable, array('base_url', 'output'))) + { + // Assuming it's not null + if ($value !== null) + { + // Converts boolean to string + if (is_bool($value)) + { + $value = $value ? 'true' : 'false'; + } + + switch ($variable) + { + // Allows LatLng to be passed as an array + case 'location': + if (is_array($value)) + { + // Just in case it's an associative array + $value = array_values($value); + $value = $value[0] . ',' . $value[1]; + } + break; + + // Checks that it's a value rank by value + case 'rankby': + $value = strtolower($value); + + if (!in_array($value, array('prominence', 'distance'))) + { + throw new Exception('Invalid rank by value, please specify either "prominence" or "distance".'); + } + break; + + // Allows types to be passed as an array + case 'types': + if (is_array($value)) + { + $value = implode('|', $value); + } + break; + } + + $parameters[$variable] = $value; + } + } + } + + switch ($method) + { + case 'nearbysearch': + if (!isset($parameters['location'])) + { + throw new Exception('You must specify a location before calling nearbysearch.'); + } + elseif (isset($parameters['rankby'])) + { + if ($parameters['rankby'] == 'distance') + { + if (!isset($parameters['keyword']) && !isset($parameters['name']) && !isset($parameters['types'])) + { + throw new Exception('You much specify at least one of the following: keyword, name, types.'); + } + + if (isset($parameters['radius'])) + { + unset($parameters['radius']); + } + } + } + + break; + } + + $querystring = ''; + + foreach ($parameters as $variable => $value) + { + if ($querystring != '') + { + $querystring .= '&'; + } + + $querystring .= $variable . '=' . $value; + } + + echo $url . '?' . $querystring; + + $curl = curl_init(); + + $options = array( + CURLOPT_URL => $url . '?' . $querystring, + CURLOPT_HEADER => false, + CURLOPT_SSL_VERIFYPEER => true, + CURLOPT_RETURNTRANSFER => true, + ); + + curl_setopt_array($curl, $options); + + $response = curl_exec($curl); + + var_dump($response, curl_error($curl)); + curl_close($curl); + + exit; + } + + // @todo Method to sanity check passed types +} + +?>