从表单搜索中检索数据。使用基于JSON的API URL来检索数据

时间:2014-02-10 10:43:54

标签: php json forms api curl

我正在使用Expedia API建立一个酒店列表http://developer.ean.com/docs/hotel-list/目前我有一个json输出的酒店列表来自以下网址:

API Sample

然后我有一个简单的foreach循环来显示上面的网址:

<--! Form to search for hotels !-->
<form action="">

        <p> Rooms:
        <select name="rooms">
          <option value="value1" selected>1</option> 
          <option value="value2">2</option>
          <option value="value3">3</option>
        </select>
        </p>

        <p>Arrival Date: <input type="text" id="datepicker"></p>

        <p>Departure Date: <input type="text" id="datepicker2"></p>

        <input type="submit" value="Submit">

    </form>

    <?PHP
//use latest minorRev 14
    $url  ='http://api.ean.com/ean-services/rs/hotel/v3/list?minorRev=99';
    $url .= '&apiKey=7z6tduachrht362dpnsch34v';
    $url .= '&cid=55505';
    $url .= '&locale=en_US&city=Dallas&stateProvinceCode=TX&countryCode=US&numberOfResults=3';
    $url .= '&searchRadius=50';
//using the cache returns results much faster
    $url .= '&supplierCacheTolerance=MED_ENHANCED';
//dates and occupancy
    $url .='&arrivalDate=09/04/2014&departureDate=09/05/2014&room1=2';
    $header[] = "Accept: application/json";
    $header[] = "Accept-Encoding: gzip";
    $ch = curl_init();
    curl_setopt( $ch, CURLOPT_HTTPHEADER, $header );
    curl_setopt($ch,CURLOPT_ENCODING , "gzip");
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
    curl_setopt( $ch, CURLOPT_URL, $url );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    $response = json_decode(curl_exec($ch));
    $response = curl_exec($ch);

    ?>

        <h1>Hotels</h1>

        <?PHP

// Decode the json data

        $data_json = json_decode(file_get_contents($url));  
        $HotelListResponse = $data_json->{"HotelListResponse"};
        $HotelList = $HotelListResponse->{"HotelList"};
        $HotelSummary = $HotelList->{"HotelSummary"};

        print_r($url);

// Loop through the hotels

        foreach ($HotelSummary as $hotel): ?>

        <h2><?php echo $hotel->name; ?></h2>

        <img src="http://images.travelnow.com<?php echo $hotel->thumbNailUrl; ?>" alt="">

        <ul class="hotel-location">
            <li><?php echo $hotel->address1; ?></li>
            <li><?php echo $hotel->city; ?></li>
            <li><?php echo $hotel->stateProvinceCode; ?></li>
            <li><?php echo $hotel->postalCode; ?></li>
            <li><?php echo $hotel->countryCode; ?></li>
        </ul>

        <?php $cleartags = strip_tags($hotel->shortDescription); ?>

        <p><?php strip_tags($cleartags); ?></p>

        <a class href="<?php echo $hotel->deepLink; ?>" alt="">Book Now</a>

        <img src="<?php echo $hotel->tripAdvisorRatingUrl; ?>" alt="">

    <?php endforeach; ?>

以上显示的酒店列表可在以下网址中找到:http://kfdev.co.uk/dev/hotels/

但是,我现在需要自定义前端显示数据的输出。我基本上需要一个可以自定义搜索结果的表单。例如,用户应该能够更改其搜索的某些参数,例如房间大小,到达和出发日期。

我想知道如何将$ url选项变量放在可以动态更改的表单中。正如您所见,$ url变量中的信息(例如arrivalDate = 09/04 / 2014和room1 = 2)会影响json数据的输出。

我正在寻找有关如何以可以显示新数据的形式动态更改此数据的指导。现在我只是有一个静态网址,最终用户除了当前页面上的内容之外无法看到任何其他数据。

1 个答案:

答案 0 :(得分:1)

为了在最终用户填写表单时从服务器获取动态数据,您可以在表单的某些输入上绑定回调,例如onchange,onkeyup或任何您需要的,并通过ajax请求请求您的服务器,并显示相应的结果。

有一些指针,我假设你使用jquery:

修改

看到您的表单后,您可以执行类似

的操作
$("#datepicker").change(function() { 
  var arrival = $(this).val();
  $.getJSON( "data.php", {arrivalDate: arrival})
    .done(function(data) {
      // update your ui here
    }).fail(function(j,t,e) {
      // handle error here
    }); 
});

使用data.php,一个脚本,在调用api.ean.com之后返回一个json文件,其中包含显示所需的数据