2017-03-21 18 views
0

現在、Yelp API v3を使用しており、サンプルコードの一部をテスト中です。私は前にPHPを使用したことがないので、かなり混乱しますが、私はこのスクリプトでユーザーと同じように用語と場所を設定したいのですか?このスクリプトで$ term = inputTermと$ location = inputLocationを実行するhtmlのtermとlocationの入力があるとしますか?Yelp v3の使い方phpでのAPIサンプルの検索

`#!/usr/bin/php 
<?php 
/** 
* Yelp Fusion API code sample. 
* 
* This program demonstrates the capability of the Yelp Fusion API 
* by using the Business Search API to query for businesses by a 
* search term and location, and the Business API to query additional 
* information about the top result from the search query. 
* 
* Please refer to http://www.yelp.com/developers/v3/documentation 
* for the API documentation. 
* 
* Sample usage of the program: 
* `php sample.php --term="dinner" --location="San Francisco, CA"` 
*/ 
// OAuth credential placeholders that must be filled in by users. 
// You can find them on 
// https://www.yelp.com/developers/v3/manage_app 
$CLIENT_ID = "abcd"; 
$CLIENT_SECRET = "abcd"; 
// Complain if credentials haven't been filled out. 
assert($CLIENT_ID, "Please supply your client_id."); 
assert($CLIENT_SECRET, "Please supply your client_secret."); 
// API constants, you shouldn't have to change these. 
$API_HOST = "https://api.yelp.com"; 
$SEARCH_PATH = "/v3/businesses/search"; 
$BUSINESS_PATH = "/v3/businesses/"; // Business ID will come after slash. 
$TOKEN_PATH = "/oauth2/token"; 
$GRANT_TYPE = "client_credentials"; 
// Defaults for our simple example. 
$DEFAULT_TERM = "dinner"; 
$DEFAULT_LOCATION = "San Francisco, CA"; 
$SEARCH_LIMIT = 10; 

function getQuery(){ 
echo $_GET['latlon']; 
//echo $_GET['q']; 
$query = $_GET['q']; 
//break the query up into parts 
$first_space= strpos($query, " "); 
$term = substr($query, 0, $first_space); 
echo $term; 

} 
/** 
* Given a bearer token, send a GET request to the API. 
* 
* @return OAuth bearer token, obtained using client_id and client_secret. 
*/ 
function obtain_bearer_token() { 
try { 
    # Using the built-in cURL library for easiest installation. 
    # Extension library HttpRequest would also work here. 
    $curl = curl_init(); 
    if (FALSE === $curl) 
     throw new Exception('Failed to initialize'); 
    $postfields = "client_id=" . $GLOBALS['CLIENT_ID'] . 
     "&client_secret=" . $GLOBALS['CLIENT_SECRET'] . 
     "&grant_type=" . $GLOBALS['GRANT_TYPE']; 
    curl_setopt_array($curl, array(
     CURLOPT_URL => $GLOBALS['API_HOST'] . $GLOBALS['TOKEN_PATH'], 
     CURLOPT_RETURNTRANSFER => true, // Capture response. 
     CURLOPT_ENCODING => "", // Accept gzip/deflate/whatever. 
     CURLOPT_MAXREDIRS => 10, 
     CURLOPT_TIMEOUT => 30, 
     CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, 
     CURLOPT_CUSTOMREQUEST => "POST", 
     CURLOPT_POSTFIELDS => $postfields, 
     CURLOPT_HTTPHEADER => array(
      "cache-control: no-cache", 
      "content-type: application/x-www-form-urlencoded", 
     ), 
    )); 
    $response = curl_exec($curl); 
    if (FALSE === $response) 
     throw new Exception(curl_error($curl), curl_errno($curl)); 
    $http_status = curl_getinfo($curl, CURLINFO_HTTP_CODE); 
    if (200 != $http_status) 
     throw new Exception($response, $http_status); 
    curl_close($curl); 
} catch(Exception $e) { 
    trigger_error(sprintf(
     'Curl failed with error #%d: %s', 
     $e->getCode(), $e->getMessage()), 
     E_USER_ERROR); 
} 
$body = json_decode($response); 
$bearer_token = $body->access_token; 
return $bearer_token; 
} 
/** 
* Makes a request to the Yelp API and returns the response 
* 
* @param $bearer_token API bearer token from obtain_bearer_token 
* @param $host The domain host of the API 
* @param $path The path of the API after the domain. 
* @param $url_params Array of query-string parameters. 
* @return The JSON response from the request  
*/ 
function request($bearer_token, $host, $path, $url_params = array()) { 
// Send Yelp API Call 
try { 
    $curl = curl_init(); 
    if (FALSE === $curl) 
     throw new Exception('Failed to initialize'); 
    $url = $host . $path . "?" . http_build_query($url_params); 
    curl_setopt_array($curl, array(
     CURLOPT_URL => $url, 
     CURLOPT_RETURNTRANSFER => true, // Capture response. 
     CURLOPT_ENCODING => "", // Accept gzip/deflate/whatever. 
     CURLOPT_MAXREDIRS => 10, 
     CURLOPT_TIMEOUT => 30, 
     CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, 
     CURLOPT_CUSTOMREQUEST => "GET", 
     CURLOPT_HTTPHEADER => array(
      "authorization: Bearer " . $bearer_token, 
      "cache-control: no-cache", 
     ), 
    )); 
    $response = curl_exec($curl); 
    if (FALSE === $response) 
     throw new Exception(curl_error($curl), curl_errno($curl)); 
    $http_status = curl_getinfo($curl, CURLINFO_HTTP_CODE); 
    if (200 != $http_status) 
     throw new Exception($response, $http_status); 
    curl_close($curl); 
} catch(Exception $e) { 
    trigger_error(sprintf(
     'Curl failed with error #%d: %s', 
     $e->getCode(), $e->getMessage()), 
     E_USER_ERROR); 
} 
return $response; 
} 
/** 
* Query the Search API by a search term and location 
* 
* @param $bearer_token API bearer token from obtain_bearer_token 
* @param $term  The search term passed to the API 
* @param $location The search location passed to the API 
* @return The JSON response from the request 
*/ 
function search($bearer_token, $term, $location) { 
$url_params = array(); 

$url_params['term'] = $term; 
$url_params['location'] = $location; 
$url_params['limit'] = $GLOBALS['SEARCH_LIMIT']; 

return request($bearer_token, $GLOBALS['API_HOST'], $GLOBALS['SEARCH_PATH'], $url_params); 
} 
/** 
* Query the Business API by business_id 
* 
* @param $bearer_token API bearer token from obtain_bearer_token 
* @param $business_id The ID of the business to query 
* @return The JSON response from the request 
*/ 
function get_business($bearer_token, $business_id) { 
$business_path = $GLOBALS['BUSINESS_PATH'] . urlencode($business_id); 

return request($bearer_token, $GLOBALS['API_HOST'], $business_path); 
} 
/** 
* Queries the API by the input values from the user 
* 
* @param $term  The search term to query 
* @param $location The location of the business to query 
*/ 
function query_api($term, $location) {  
$bearer_token = obtain_bearer_token(); 
$response = json_decode(search($bearer_token, $term, $location)); 
$business_id = $response->businesses[0]->id; 

print sprintf(
    "%d businesses found, querying business info for the top result \"%s\"\n\n",   
    count($response->businesses), 
    $business_id 
); 

$response = get_business($bearer_token, $business_id); 

print sprintf("Result for business \"%s\" found:\n", $business_id); 
$pretty_response = json_encode(json_decode($response), JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); 
print "$pretty_response\n"; 
} 
/** 
* User input is handled here 
*/ 
$longopts = array(
"term::", 
"location::", 
); 

$options = getopt("", $longopts); 
$term = $options['term'] ?: $GLOBALS['DEFAULT_TERM']; 
$location = $options['location'] ?: $GLOBALS['DEFAULT_LOCATION']; 
//getQuery(); 
query_api($term, $location); 
?>` 

答えて

0

何かこれがあなたのためになります。この例では入力フィルタリングを考慮していないので、まず入力をmysql_real_escapeしたいと思うでしょう。

// Defaults for our simple example. 
$DEFAULT_TERM   = "Dinner"; 
$DEFAULT_LOCATION  = "White House, TN"; 
$SEARCH_LIMIT   = 0; 
$REVIEWS    = 0; 

if(isset($_GET['term'])) $DEFAULT_TERM = $_GET['term']; 
if(isset($_GET['loc']) && $_GET['loc'] !='') $DEFAULT_LOCATION = $_GET['loc'] ; 
if(isset($_GET['limit'])) $SEARCH_LIMIT = $_GET['limit']; 
if(isset($_GET['reviews'])) $REVIEWS = $_GET['reviews']; 

そして、あなたのフォームは、この

<form action="/" method="get"> 
    <input type="text" name="term" placeholder="search"/> 
    <input type="text" name="loc" placeholder="zipcode"/> 
    Results <select name="limit"> 
     <option value="3">3</option> 
     <option value="5">5</option> 
     <option value="7">7</option> 
     <option value="9">9</option> 
    </select> 
    Show reviews <input type="checkbox" name="reviews" value="1"/> 
    <input type="submit"/> 
</form> 
ようになります。
関連する問題