Php 使用curl定期从远程服务器获取数据
我正在尝试使用curl从远程服务器获取JSON数据,并将其保存在数据库中。远程服务器上的数据每分钟更新一次 curl脚本在获取数据方面运行良好。但它大约每10秒提取一次数据。我想要的是它每分钟提取一次数据 我搜索了SO,发现cronjob和windows任务调度器是使用curl为调度作业提供的解决方案。我的问题是我不需要运行包含curl的网页,这样它就可以开始从服务器获取数据,但我必须每分钟读取一次数据 因为数据每分钟的第5秒都会更新,比如9:10:05->9:11:05->9:12:05->。。。一种选择是使用cronjob或windows scheduler在例如3秒时运行网页,并在例如7秒时关闭网页,以便每分钟读取一个值。但这对我来说似乎不是一个好的或可靠的解决方案,是吗 我的问题是如何使用curl每隔一分钟从远程服务器读取一次数据。是否有一些编程解决方案,或者选择使用cronjob/windows任务调度器Php 使用curl定期从远程服务器获取数据,php,html,postgresql,curl,web-development-server,Php,Html,Postgresql,Curl,Web Development Server,我正在尝试使用curl从远程服务器获取JSON数据,并将其保存在数据库中。远程服务器上的数据每分钟更新一次 curl脚本在获取数据方面运行良好。但它大约每10秒提取一次数据。我想要的是它每分钟提取一次数据 我搜索了SO,发现cronjob和windows任务调度器是使用curl为调度作业提供的解决方案。我的问题是我不需要运行包含curl的网页,这样它就可以开始从服务器获取数据,但我必须每分钟读取一次数据 因为数据每分钟的第5秒都会更新,比如9:10:05->9:11:05->9:12:05->。
我正在Windows工作站上进行开发,但我需要在运行Ubuntu的服务器上部署它 编辑 关于我的代码,我还有两个问题: 1) 正如我在上面的OP中所述,curl不断地从源代码获取数据,就像它是一个无限循环在运行一样。这是curl的默认行为,还是我需要进行一些配置来获取数据(例如,一次性获取) 2) 我需要保持浏览器窗口打开,以便curl开始获取数据。如果网页没有打开,它就不起作用。这是curl的默认行为还是它也可以作为后端作业运行,因此包含它的网页不应该一直保持打开状态
这是我的密码: Index.PhP
<!DOCTYPE html>
<html lang="en">
<head>
<title>Weather Data</title>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
</head>
<body>
<h2>Connect.php</h2>
<div>
<?php
require("Connection.php");
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://cors.io/?http://api.holfuy.com/live/?s=759&pw=h1u5l4kka&m=JSON&tu=C&su=m/s",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Cache-Control: no-cache"
),
));
$response = curl_exec($curl);
$Wdata = json_decode($response, true);
$tem = $Wdata["temperature"];
$hum = $Wdata["humidity"];
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
// Here code to save $response into database;
echo $response;
echo "<br>";
echo $tem;
echo "<br>";
echo $hum;
}
try{
$sql = "INSERT INTO weatherdata (humidity, temprature)
VALUES ('".$tem."','".$hum."')";
echo "<meta http-equiv='refresh' content='0'>";
($conn->query($sql));
//$conn = null;
}
catch(PDOException $e)
{
}
?>
</div>
</body>
</html>
用于数据输入和显示的HTML+PHP+JS
Connect.PhP
<!DOCTYPE html>
<html lang="en">
<head>
<title>Weather Data</title>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
</head>
<body>
<h2>Connect.php</h2>
<div>
<?php
require("Connection.php");
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://cors.io/?http://api.holfuy.com/live/?s=759&pw=h1u5l4kka&m=JSON&tu=C&su=m/s",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Cache-Control: no-cache"
),
));
$response = curl_exec($curl);
$Wdata = json_decode($response, true);
$tem = $Wdata["temperature"];
$hum = $Wdata["humidity"];
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
// Here code to save $response into database;
echo $response;
echo "<br>";
echo $tem;
echo "<br>";
echo $hum;
}
try{
$sql = "INSERT INTO weatherdata (humidity, temprature)
VALUES ('".$tem."','".$hum."')";
echo "<meta http-equiv='refresh' content='0'>";
($conn->query($sql));
//$conn = null;
}
catch(PDOException $e)
{
}
?>
</div>
</body>
</html>
数据库连接
RequestData.PhP
<!DOCTYPE html>
<html lang="en">
<head>
<title>Weather Data</title>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
</head>
<body>
<h2>Connect.php</h2>
<div>
<?php
require("Connection.php");
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://cors.io/?http://api.holfuy.com/live/?s=759&pw=h1u5l4kka&m=JSON&tu=C&su=m/s",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Cache-Control: no-cache"
),
));
$response = curl_exec($curl);
$Wdata = json_decode($response, true);
$tem = $Wdata["temperature"];
$hum = $Wdata["humidity"];
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
// Here code to save $response into database;
echo $response;
echo "<br>";
echo $tem;
echo "<br>";
echo $hum;
}
try{
$sql = "INSERT INTO weatherdata (humidity, temprature)
VALUES ('".$tem."','".$hum."')";
echo "<meta http-equiv='refresh' content='0'>";
($conn->query($sql));
//$conn = null;
}
catch(PDOException $e)
{
}
?>
</div>
</body>
</html>
天气数据
Connect.php
我想说使用cronjob是最好的方法!(假设您使用的是linux发行版)
在cron中,您可以选择间隔,但如果您愿意,可以使用sleep函数将命令运行延迟几秒钟:
*/1 * * * * sleep 5; mycommand
^^ ^^
every minute five seconds
编辑:你的帖子似乎不太清楚你在运行什么样的操作系统,我在帖子中建议使用cronjob,但这只适用于linux系统。如果您是从Windows系统运行Windows任务计划程序,则可以使用Windows任务计划程序,尽管我不确定该程序是如何工作的,因此我无法帮助您设置它。我认为使用cronjob是最好的方法!(假设您使用的是linux发行版)
在cron中,您可以选择间隔,但如果您愿意,可以使用sleep函数将命令运行延迟几秒钟:
*/1 * * * * sleep 5; mycommand
^^ ^^
every minute five seconds
编辑:你的帖子似乎不太清楚你在运行什么样的操作系统,我在帖子中建议使用cronjob,但这只适用于linux系统。如果您是从Windows系统运行Windows任务计划程序,则可以使用Windows任务计划程序,尽管我不确定该程序是如何工作的,因此我无法帮助您进行设置。如果您不想使用cron作业,如果您想通过浏览器直接使用此页面,请使用此代码
使用find content=300在五分钟后使用meta标记进行刷新
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="300">
<title>Weather Data</title>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js">
</script>
</head>
<body>
<h2>Connect.php</h2>
<div>
<?php
require("Connection.php");
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://cors.io/?http://api.holfuy.com/live/?s=759&pw=h1u5l4kka&m=JSON&tu=C&su=m/s",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Cache-Control: no-cache"
),
));
$response = curl_exec($curl);
$Wdata = json_decode($response, true);
$tem = $Wdata["temperature"];
$hum = $Wdata["humidity"];
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
// Here code to save $response into database;
echo $response;
echo "<br>";
echo $tem;
echo "<br>";
echo $hum;
}
try{
$sql = "INSERT INTO weatherdata (humidity, temprature)
VALUES ('".$tem."','".$hum."')";
echo "<meta http-equiv='refresh' content='0'>";
($conn->query($sql));
//$conn = null;
}
catch(PDOException $e)
{
}
?>
</div>
</body>
</html>
天气数据
Connect.php
如果您不想使用cron作业,并且希望通过浏览器直接使用此页面,请使用此代码
使用find content=300在五分钟后使用meta标记进行刷新
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="refresh" content="300">
<title>Weather Data</title>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js">
</script>
</head>
<body>
<h2>Connect.php</h2>
<div>
<?php
require("Connection.php");
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://cors.io/?http://api.holfuy.com/live/?s=759&pw=h1u5l4kka&m=JSON&tu=C&su=m/s",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"Cache-Control: no-cache"
),
));
$response = curl_exec($curl);
$Wdata = json_decode($response, true);
$tem = $Wdata["temperature"];
$hum = $Wdata["humidity"];
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
// Here code to save $response into database;
echo $response;
echo "<br>";
echo $tem;
echo "<br>";
echo $hum;
}
try{
$sql = "INSERT INTO weatherdata (humidity, temprature)
VALUES ('".$tem."','".$hum."')";
echo "<meta http-equiv='refresh' content='0'>";
($conn->query($sql));
//$conn = null;
}
catch(PDOException $e)
{
}
?>
</div>
</body>
</html>
天气数据
Connect.php
您可以使用nohup运行shell脚本,使用watch
的超时功能可以使用nohup运行shell脚本,我正在Windows工作站上进行开发,但我需要将它部署在运行Ubuntu的服务器上。非常感谢您的回复:)可能明天我会找到Ubuntu机器,所以我可以在那里部署它并做出响应。好的:)如果您想了解更多关于crontab的信息,请在askubuntu上查看此答案:我正在Windows工作站上进行开发,但我需要将其部署在运行Ubuntu的服务器上。非常感谢您的回复:)可能明天我会找到Ubuntu机器,以便在那里部署并响应。好的:)如果您想同时了解有关crontab的更多信息,在askubuntu上查看这个答案:非常感谢亲爱的Fahad:)这是一个非常方便的选择。唯一的问题是,正如我在作品中提到的,curl不断地获取数据,即大约每10秒一次。如果它以这种方式停止定期提取数据,我可以使用此选项。你能看到旋度代码吗。是否有任何配置可以控制它的行为,即它从服务器加载数据的次数或间隔?这也可以工作,但只有在有打开的浏览器实例时才会运行?这也是当前curl实现的行为。它仅在浏览器中打开页面时才获取数据。我想知道这是curl的默认行为,还是可以作为后端作业运行?ook如果服务器是linux,那么您可以在cron作业中使用此文件链接,否则您必须使用事件调度器。非常感谢亲爱的Fahad:)这是一个非常方便的选项。唯一的问题是,正如我在作品中提到的,curl不断地获取数据,即大约每10秒一次。如果它以这种方式停止定期提取数据,我可以使用此选项。你能看到旋度代码吗。是否有任何配置可以控制它的行为,即它从服务器加载数据的次数或间隔时间?这也可以工作,但这只会在有打开的浏览器实例时运行?这很简单