将 PHP API 调用转换为 cron 作业并访问返回值

Turning PHP API call into cron job and accessing returned values

我的目标是每 10 分钟 运行 下面的 php 脚本,然后能够访问网站前端的 $temp$icon 值:

$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'];

有人可以高层次地解释一下执行此操作的最佳方法是什么吗?我需要限制每天对端点的 API 调用次数,据我所知,此脚本应作为 cron 任务执行,但我不确定如何从网站获取变量值/var/www/

如果我忽略了一种更简单的方法(即不使用 cron)来限制每个时间段的调用次数,我也会对其他建议感兴趣。

服务器环境是 Ubuntu 14.04 LTS VPS。

非常感谢您的帮助。

我认为你根本不需要 cron 任务,除非你需要返回值用于其他目的(例如在后台进程中进行一些计算)

我的建议是编写一个函数,它进行 API 调用并将结果存储到数据库中。您可以实现一个简单的缓存逻辑,以避免在每次页面加载时调用 API。伪代码可能如下所示:

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
}