0

ユーザー入力からデータを取得するために Zillow API を使用しています。これまでのところ、API を正しく使用して、単一の入力から必要なデータを取得できました。

私が直面している問題は、単純なコード ブロックを複数の入力で複数回再利用できる関数に変換しようとしたときです。最終的には、ユーザーが CSV ファイルなどをアップロードしてこれを実行できるようにしたいと考えています。複数の入力を介して機能します。

以下は、正しく機能している私のコードです。

HTML

<form action="logic.php" method="post">
    <p>Address: <input type="text" name="address"></p>
    <p>City/State: <input type="text" name="csz"></p>
    <input type="submit">
</form>

PHP

//API Key
$api_key = 'XXXxxXXX';


//User Inputs
$search = $_POST['address'];
$citystate = $_POST['csz'];
//User Inputs Fromatted
$address = urlencode($search);
$citystatezip = urlencode($citystate);



//Get Address ID From API
$url = "http://www.zillow.com/webservice/GetSearchResults.htm?zws-id=".$api_key."&address=".$address."&citystatezip=".$citystatezip;
$result = file_get_contents($url);
$data = simplexml_load_string($result);
$addressID = $data->response->results->result[0]->zpid;



//Get Estimate from API (using adressID)
$estimate_url = "http://www.zillow.com/webservice/GetZestimate.htm?zws-id=".$api_key."&zpid=".$addressID;
$estimate_result = file_get_contents($zurl);
$estimate_data = simplexml_load_string($zresult);
$estimate = $zdata->response->zestimate->amount;

echo $estimate;

問題は、これらの両方を複数の入力に使用するために、これらの両方を 2 つの別個の関数にまとめようとするときです。

$api_key = 'XXXxxXXX';

//User Inputs
$search = $_POST['address'];
$citystate = $_POST['csz'];
//User Inputs Fromatted
$address = urlencode($search);
$citystatezip = urlencode($citystate);


function getAddressID($ad,$cs){

    //Get Address ID From API
    $url = "http://www.zillow.com/webservice/GetSearchResults.htm?zws-id=".$api_key."&address=".$ad."&citystatezip=".$cs;
    $result = file_get_contents($url);
    $data = simplexml_load_string($result);
    $addressID = $data->response->results->result[0]->zpid;
    return $addressID;

}

$addressID = getAddressID($address, $citystatezip);




function getEstimate($aID){
    //Get Estimate from API (using adressID)
    $estimate_url = "http://www.zillow.com/webservice/GetZestimate.htm?zws-id=".$api_key."&zpid=".$aID;
    $estimate_result = file_get_contents($estimate_url);
    $estimate_data = simplexml_load_string($estimate_result);
    $estimate = $estimate_data->response->zestimate->amount;
    return $estimate;

}

echo getEstimate($addressID); //Calling function doesn't return anything

本質的には、最初の PHP の例と同じことをしています。これが関数内から機能しないのはなぜですか? 私は何かを見落としましたか?

これに関するAntの助けをいただければ幸いです。

4

1 に答える 1

1

問題は、$api_key両方の関数内で変数を使用していて、その変数がそこで使用できないことです。PHP は、他の言語とは少し異なります。ここで読むことができます:http://php.net/manual/en/language.variables.scope.php

APIを呼び出す関数を抽出することをお勧めします。このようにして、その関数で API キーを宣言できます。また、コードの保守が容易になります (エラー処理を追加するか、curl などに切り替えることで、API 呼び出しを改善できます)。プログラマーの黄金律、Don't Repeat Yourself。

コードは次のようになります (未テスト)。

//User Inputs
$search    = $_POST['address'];
$citystate = $_POST['csz'];
//User Inputs Fromatted
$address      = urlencode($search);
$citystatezip = urlencode($citystate);

function callZillow($endpoint, array $params)
{
    $params['zws-id'] = 'XXX'; // this would be your api_key

    $url    = 'http://www.zillow.com/webservice/' . $endpoint . '.htm?' . http_build_query($params);
    $result = file_get_contents($url);

    return simplexml_load_string($result);
}


function getAddressID($ad, $cs)
{
    //Get Address ID From API
    $data      = callZillow('GetSearchResults', ['address' => $ad, 'citystatezip' => $cs]);
    $addressID = $data->response->results->result[0]->zpid;

    return $addressID;
}

$addressID = getAddressID($address, $citystatezip);

function getEstimate($aID)
{
    //Get Estimate from API (using adressID)
    $estimate_data = callZillow('GetZestimate', ['zpid' => $aID]);
    $estimate      = $estimate_data->response->zestimate->amount;

    return $estimate;
}

echo getEstimate($addressID);
于 2016-06-24T21:43:49.867 に答える