2016-08-22 9 views
0

저는 소행성에 대한 데이터를 요청하고 결과를 얻는 컬 기능이 있습니다. 현재 나는 결과에 대한 날짜 매개 변수를 코딩하고 있습니다. 사용자가 선택한 날짜를 입력하고 결과를 얻을 수 있기를 바랍니다. 어떻게 이것을 추가 할 수 있을까요? Curl을 처음 사용하고 벽을 계속 칠 수 있습니다. 코드는 다음과 같습니다.Curl 매개 변수를 매개 변수로 전달합니다.

<?php 
session_start(); 
// Method: POST, PUT, GET etc 
// Data: array("param" => "value") ==> index.php?param=value 

function CallAPI($method, $url, $data = false) 
{ 
    $curl = curl_init(); 

    switch ($method) { 
     case "POST": 
      curl_setopt($curl, CURLOPT_POST, 1); 

      if ($data) 
       curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 
      break; 
     case "PUT": 
      curl_setopt($curl, CURLOPT_PUT, 1); 
      break; 
     default: 
      if ($data) 
       $url = sprintf("%s?%s", $url, http_build_query($data)); 
    } 
    curl_setopt($curl, CURLOPT_URL, $url); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
    $result = curl_exec($curl); 
    if ($result === FALSE) { 
     die(curl_error($curl)); 
    } 
    curl_close($curl); 
    return $result; 
} 
$params = array(
    'start_date' => '01/03/2016', 
    'end_date' => '02/03/2016', 
    'api_key' => 'demo key' 
); 
$data = json_decode(callAPI('GET', 'https://api.nasa.gov/neo/rest/v1/feed', $params)); 

//var_dump($data); 

echo "<h1>Near-Earth Object (NEO) Report between " . $params['start_date'] . " and " . $params['end_date'] . "</h1>"; 

foreach ($data->near_earth_objects as $date => $count) { 
    echo "<p>" . sizeof($count) . " objects detected on $date</p>"; 

    echo "<ol>"; 
    foreach ($data->near_earth_objects->$date as $near_earth_object) { 
     echo "<li>" . $near_earth_object->name . " <a href='" . $near_earth_object->nasa_jpl_url . "'>" . $near_earth_object->nasa_jpl_url . "</a><br>"; 
     echo "Estimated Diameter: " . $near_earth_object->estimated_diameter->meters->estimated_diameter_min . "-" . $near_earth_object->estimated_diameter->meters->estimated_diameter_max . " metres<br>"; 

     echo "<ul>"; 
     foreach ($near_earth_object->close_approach_data as $close_approach) { 
      echo "<li>Close approach on " . $close_approach->close_approach_date . " velocity " . $close_approach->relative_velocity->kilometers_per_hour . " km/h " . "missing " . $close_approach->orbiting_body . " by " . $close_approach->miss_distance->kilometers . " km</li> "; 
     } 
     echo "</ul></li>"; 
    } 
    echo "</ol>"; 
} 
?> 

답변

0

당신이 가까이있었습니다. 코드를 약간 수정했습니다. 당신이 가지고 있던 날짜 형식 또한 잘못되었습니다. API가 format (yyyy-mm-dd)을 호출 할 때 mm/dd/yyyy 형식을 제공하고있었습니다 (연도가 앞당겨지고 슬래시 대신 하이픈이 필요함을 알 수 있음).

시작일과 종료일에 GET 값을 사용했습니다 (API에서는 시작일과 종료일 사이에 7 days 만 허용). 어떤 형식으로 입력 할 수 있습니다

<?php 
session_start(); 
// Method: POST, PUT, GET etc 
// Data: array("param" => "value") ==> index.php?param=value 

function CallAPI($method, $url, $data = false) 
{ 
    $curl = curl_init(); 

    switch ($method) { 
     case "POST": 
      curl_setopt($curl, CURLOPT_POST, 1); 

      if ($data) 
       curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 
      break; 
     case "PUT": 
      curl_setopt($curl, CURLOPT_PUT, 1); 
      break; 
     default: 
      if ($data) 
       $url = sprintf("%s?%s", $url, http_build_query($data)); 
    } 
    curl_setopt($curl, CURLOPT_URL, $url); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
    $result = curl_exec($curl); 
    if ($result === FALSE) { 
     die(curl_error($curl)); 
    } 
    curl_close($curl); 
    return $result; 
} 

$startDate = date('Y-m-d', strtotime(isset($_GET['start']) ? $_GET['start'] : date('Y-m-d'))); 
$endDate = date('Y-m-d', strtotime(isset($_GET['end']) ? $_GET['end'] : date('Y-m-d'))); 

if(!$startDate) { 
    $startDate = date('Y-m-d'); 
} 

if(!$endDate) { 
    $endDate = date('Y-m-d'); 
} 

$params = array(
    'start_date' => $startDate, 
    'end_date' => $endDate, 
    'api_key' => 'NNKOjkoul8n1CH18TWA9gwngW1s1SmjESPjNoUFo' 
); 

$data = json_decode(callAPI('GET', 'https://api.nasa.gov/neo/rest/v1/feed', $params)); 

echo "<h1>Near-Earth Object (NEO) Report between " . $params['start_date'] . " and " . $params['end_date'] . "</h1>"; 

foreach ($data->near_earth_objects as $date => $count) { 
    echo "<p>" . sizeof($count) . " objects detected on $date</p>"; 

    echo "<ol>"; 
    foreach ($data->near_earth_objects->$date as $near_earth_object) { 
     echo "<li>" . $near_earth_object->name . " <a href='" . $near_earth_object->nasa_jpl_url . "'>" . $near_earth_object->nasa_jpl_url . "</a><br>"; 
     echo "Estimated Diameter: " . $near_earth_object->estimated_diameter->meters->estimated_diameter_min . "-" . $near_earth_object->estimated_diameter->meters->estimated_diameter_max . " metres<br>"; 

     echo "<ul>"; 
     foreach ($near_earth_object->close_approach_data as $close_approach) { 
      echo "<li>Close approach on " . $close_approach->close_approach_date . " velocity " . $close_approach->relative_velocity->kilometers_per_hour . " km/h " . "missing " . $close_approach->orbiting_body . " by " . $close_approach->miss_distance->kilometers . " km</li> "; 
     } 
     echo "</ul></li>"; 
    } 
    echo "</ol>"; 
} 

날짜를 : 그래서 당신은 (그것도 GET 방식의 형태로 구현 될 수 있음) URL의 끝에 ?start=2015-05-01&end=2015-05-05를 추가하는이 코드에 액세스하는 데 사용하여 날짜를 변경할 수 있습니다 그 strtotime 이해합니다. 날짜가 유효하지 않은 경우 오늘 날짜가 기본값으로 설정됩니다. API에서 오류가 발생하는 경우 (예 : 날짜 범위가 7 일보다 큰 경우) 오류가 발생합니다. 오류 검출을 추가 할 수 있습니다.

+0

HI Jim 도움을 주셔서 감사합니다. 사용자가 페이지에서 날짜를 입력 할 수있게하려면 GET 메서드를 다음과 같이 사용합니다.

\t \t \t \t \t \t \t \t

+0

startDate를 대신 사용하도록 코드를 변경하지 않는 한'name = "startDate"'입력은'name = "start"'가됩니다. – Jim

+0

안녕 짐 더 이상 도와 드릴까요? 사용자가 시작 날짜를 입력 할 수 있도록 함수를 추가하고 종료 날짜를 7 일로 설정하는 코드를 추가했지만 사용자가 날짜를 추가하기 전에 페이지가로드됩니다. 도와 줘. –

관련 문제