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

问题描述 投票:0回答:1

我的目标是每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/的网站获取变量值/var/www/

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

服务器环境是Ubuntu 14.04 LTS VPS。

非常感谢您的帮助。

php cron cron-task
1个回答
1
投票

我认为您根本不需要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
}
© www.soinside.com 2019 - 2024. All rights reserved.