2016-09-24 2 views
0

Mein Ziel ist es, der unter PHP-Skript alle 10 Minuten zu laufen und dann in der Lage sein, die $temp und $icon Werte in einem Website-Frontend zugreifen:Drehen PHP-API-Aufrufs in Cron-Job und den Zugriff auf zurückgegebenen Werte

$api_endpoint = 'https://api.forecast.io/forecast/'; 
$api_key = get_field('forecast_api_key', 'option'); 
$latitude = get_field('latitude', 'option'); 
$longitude = get_field('longitude', 'option'); 
$units = 'auto'; 
$lang = 'en'; 
$exclude = 'minutely,hourly,daily,alerts,flags'; 

// Build API call and parse data 

$url = $api_endpoint.$api_key.'/'.$latitude.','.$longitude.'?units='.$units.'&exclude='.$exclude; 
$response = file_get_contents($url); 
$weather_data = json_decode($response, true); 

// Output to front-end 

$temp = round($weather_data['currently']['temperature']); 
$icon = $weather_data['currently']['icon']; 

Könnte jemand bitte auf einer hohen Ebene erklären, was der beste Ansatz wäre, dies zu tun? Ich muss die Anzahl der API-Aufrufe pro Tag auf den Endpunkt begrenzen, und soweit ich weiß, sollte dieses Skript als Cron-Task ausgeführt werden, bin mir aber nicht sicher, wie man die Variablenwerte von einer Website in /var/www/ abrufen kann.

Wenn ich einen einfacheren Weg übersehen habe (d. H. Nicht Cron verwenden), um die Anzahl der Anrufe pro Periodenzeit zu begrenzen, wäre ich auch an alternativen Vorschlägen interessiert.

Die Serverumgebung ist ein Ubuntu 14.04 LTS VPS.

Vielen Dank für Ihre Hilfe.

Antwort

1

Ich glaube nicht, dass Sie überhaupt eine Cron-Aufgabe benötigen, wenn Sie den Rückgabewert für andere Zwecke benötigen (einige Berechnungen im Hintergrund Prozess zum Beispiel Dirigieren)

Was ich vorschlagen, ist eine Funktion zu schreiben, die ruft die API auf und speichert das Ergebnis in der Datenbank. Sie können eine einfache Caching-Logik implementieren, um den API-Aufruf bei jedem Laden der Seite zu vermeiden. Pseudocode könnte so aussehen:

function getAPIresult(){ 
    //Idea is to check for record in local db, before making the API call 
    //you can define the time schedule, AKA cache validity time as you want 
    $result = mysql_query("select from api_results where date='today'"); 
    if($result){ 
     return $result; // if valid record is found, use it on your website 
    } 
    else{ 
    return setAPIResult(); 
    } 
} 

function setAPIResult(){ 
    //API CALL goes here and inserts the result into the database 
    ..... 
    $weather_data = json_decode($response, true); 
    $result = mysql_insert('inserto into api_results ... values($weather_data)'); 
    return $result; // insert and return the value 
} 
+0

Danke, George. Ich stimme zu, dass Ihr Vorschlag ein viel vernünftigerer Weg ist, um dies zu erreichen, und genau das, was ich gesucht habe, als ich diese Frage gepostet habe. –

Verwandte Themen