如何从网页上进行数据挖掘的PHP脚本工作?

时间:2018-03-02 18:14:28

标签: php json freeboard

[编辑以获得更好的解释和代码]

嗨!我在我的网络服务器上有一个PHP脚本,它登录到我的热泵网络界面nibeuplink.com并获取我所有的温度读数等等,并以json格式返回它们。

freeboard.io是一个可视化数据的免费服务,所以我正在为我的热泵值制作一个freeboard.io。在freeboard.io中我可以添加任何json数据作为数据源,所以我添加了链接到我的php脚本。它只获取一次数据,但似乎之后会使用某种缓存值,因此它们不会使用脚本中的新值进行更新。 freeboard.io使用get函数来获取url。如果我使用普通的Web浏览器来运行php脚本并刷新它,则值会更新 - 并且还会立即在freeboard.io中更新。 Freeboard.io有一个设置,每5秒自动更新一次数据源。

似乎有一些东西在从我的网络浏览器中获取时会正确触发脚本,但是当从每隔5秒钟使用get函数获取新数据的freeboard.io中获取脚本时,它就不会被触发。

在freeboard中我可以在get请求中添加标题,是否有一些标题可以帮助我放弃任何缓存数据?

我希望能更好地解释我的问题。

我可以在开头添加任何内容以始终强制覆盖任何缓存数据吗?

<?php
/* 
 * read nibe heatpump values from nibeuplink status web page and return them in json format. 
 * based on: https://www.symcon.de/forum/threads/25663-Heizung-Nibe-F750-Nibe-Uplink-auslesen-auswerten 
 * to get the code which is required as parameter, log into nibe uplink, open status page of your heatpump, and check url: 
 * https://www.nibeuplink.com/System/<code>/Status/Overview 
 * 
 * usage: nibe.php?email=<email>&password=<password>&code=<code> 
 */ 

// to add additional debug output to the resulting page: 

$debug = false; 

date_default_timezone_set('Europe/Helsinki');
$date = time();

// Create temp file to store cookies 
$ckfile = tempnam ("/tmp", "CURLCOOKIE"); 

// URL to login page 
$url = "https://www.nibeuplink.com/LogIn"; 

// Get Login page and its cookies and save cookies in the temp file 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Accepts all CAs 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile); // Stores cookies in the temp file 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$output = curl_exec($ch); 

// Now you have the cookie, you can POST login values 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_POST, 2); 
curl_setopt($ch, CURLOPT_POSTFIELDS, "Email=".$_GET['email']."&Password=".$_GET['password']); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile); // Uses cookies from the temp file 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Tells cURL to follow redirects 
$output = curl_exec($ch); 

curl_setopt($ch, CURLOPT_URL, "https://www.nibeuplink.com/System/".$_GET['code']."/Status/ServiceInfo"); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile); 
curl_setopt($ch, CURLOPT_POST, 0); 
$result = curl_exec($ch); 


$pattern = '/<h3>(.*?)<\/h3>\s*<table[^>]*>.+?<tbody>(.+?)<\/tbody>\s*<\/table>/s'; 
if ($debug) echo "pattern: <xmp>".$pattern."</xmp><br>"; 

$pattern2 = '/<tr>\s*<td>(.+?)<span[^>]*>[^<]*<\/span>\s*<\/td>\s*<td>\s*<span[^>]*>([^<]*)<\/span>\s*<\/td>\s*<\/tr>/s'; 
if ($debug) echo "pattern2: <xmp>".$pattern2."</xmp><br>"; 

preg_match_all($pattern, $result, $matches); 

// build json format from matches 
echo '{'; 
$first = true; 
foreach ($matches[1] as $i => $title) { 
        echo ($first ? '"' : ',"').trim($title).'":{'; 
        $content = $matches[2][$i]; 
        preg_match_all($pattern2, $content, $values); 
        $nestedFirst = true; 
        foreach ($values[1] as $j => $field) { 
                echo ($nestedFirst ? '"' : ',"').trim($field).'":"'.$values[2][$j].'"'; 
                $nestedFirst = false; 
        } 
        echo "}"; 
        $first = false; 
} 

echo ",\"time\":{\"Last fetch\":\"$date\"}";

echo "}";

  

if ($debug) { 
        echo "<pre><xmp>"; 
        echo print_r($matches); 
        echo "<br><br>"; 
        echo $result; 
        echo "</xmp></pre>"; 
} 
?>

1 个答案:

答案 0 :(得分:0)

您可以对php脚本进行ajax调用以刷新网页的一部分。我不明白你的意思是什么,即你是在谈论从数据库中获取数据,如果数据库中发生了任何变化,那么只能获取新添加的记录。如果你的意思是那么你就可以使用cookie来跟踪添加到数据库中的任何新记录,只有当它找到新记录时,它才能调用php脚本来对获取的总数据集运行算法。