2016-08-22 2 views
0

Ich habe eine Curl-Funktion, die Daten auf Asteroiden anfordert und erhalten Ergebnisse zurück. Momentan bin ich nur hart in den Datumsparametern für das Ergebnis zu kodieren, ich möchte, dass der Benutzer in der Lage ist, ihre ausgewählten Daten einzugeben und das Ergebnis zu erhalten, wie könnte ich das hinzufügen, ich bin neu mit Curl und halte eine Wand, die code so weit ist unten,Übergabe Curl-Parameter als Parameter

<?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>"; 
} 
?> 

Antwort

0

Sie waren in der Nähe. Ich habe deinen Code etwas modifiziert. Das Datumsformat, das Sie hatten, war ebenfalls falsch. Sie haben das Format mm/dd/yyyy angegeben, wenn die API eine format von yyyy-mm-dd anfordert (beachten Sie, dass das Jahr vorausgeht und Sie Bindestriche anstelle von Schrägstrichen benötigen).

Ich habe GET-Werte für das Start- und Enddatum verwendet (beachten Sie, dass die API nur 7 days zwischen dem Start- und Enddatum erlaubt). So können Sie das Datum ändern ?start=2015-05-01&end=2015-05-05 zum Ende der URL durch Hinzufügen Sie diesen Code für den Zugriff verwenden (auch als GET-Methode Form umgesetzt werden könnte):

<?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>"; 
} 

Die Termine können in einem beliebigen Format eingegeben werden dieses strtotime versteht. Im Falle eines ungültigen Datums wird das Datum auf das heutige Datum zurückgesetzt. Wenn die API einen Fehler auslöst (z. B. wenn der Datumsbereich länger als 7 Tage ist), wird nur ein Fehler ausgegeben. Möglicherweise möchten Sie eine Fehlererkennung hinzufügen.

+0

HI Jim Danke für die Hilfe, war wirklich fest auf, Wenn ich möchte, dass der Benutzer in der Lage sein, Daten auf der Seite einzugeben würde die GET-Methode etwas wie diese sein

+0

Die Eingabe 'name =" startDate "' wäre 'name =" start "', es sei denn, Sie ändern den Code, um stattdessen startDate zu verwenden. – Jim

+0

HI Jim Ich frage mich, könntest du mir weiter helfen, ich habe eine Funktion hinzugefügt, die dem Benutzer erlaubt, das Startdatum einzugeben, und ich habe Code hinzugefügt, um das Enddatum auf 7 Tage zu setzen, aber die Seite wird geladen, bevor der Benutzer das Datum hinzugefügt hat Du hilfst. –

Verwandte Themen