2016-09-06 260 views
1

我的管理界面上有一些小部件,其中之一就是天气。基于我的管理界面是如何编码的,它每60秒重新加载一次。天气情况下,每分钟呼叫的API数太多。仅更改天气小部件刷新率需要花费很多,所以如果我每60分钟从openweathermap.org复制数据并将数据放置在本地json中,可以通过weatehr小部件访问而不是对外部来源进行如此多的API调用。复制外部json数据并粘贴到本地json文件

如何使用jquery,javascript或php从网站地址复制如下所示的数据到本地JSON文件?

{"coord":{"lon":-0.13,"lat":51.51},"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04d"}],"base":"cmc stations","main":{"temp":296.2,"pressure":1023,"humidity":69,"temp_min":294.82,"temp_max":297.15},"wind":{"speed":1.5},"clouds":{"all":75},"dt":1473178865,"sys":{"type":1,"id":5091,"message":0.0074,"country":"GB","sunrise":1473139361,"sunset":1473186795},"id":2643743,"name":"London","cod":200} 
+0

你的意思是用javascript编写一个json文件吗? – brk

+0

使用角度或对其作出反应。 –

+0

@ user2181397是从外部源复制数据并将其写入json文件。我怀疑我能够使用JS,但我可能能够使用Ajax或PHP。 – Nxlevel

回答

2

我建议你创建一个运行的每个60秒通过API来获取气象数据的计划任务,然后将数据存储到本地文件和重定向管理界面从文件中读取,而不是API

您可以使用cron作业来创建计划任务,以便从api中检索数据。

这里是一个示例代码,用于使用PHP从api中检索天气数据并将结果存储到文本文件中。

<?php 

$curl = curl_init(); 

curl_setopt_array($curl, array(
    CURLOPT_URL => "http://api.openweathermap.org/data/2.5/forecast/city?id=524901&APPID=79191467e423ba376b1b72529788eeb8", 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_ENCODING => "", 
    CURLOPT_MAXREDIRS => 10, 
    CURLOPT_TIMEOUT => 30, 
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, 
    CURLOPT_CUSTOMREQUEST => "GET", 
)); 

$response = curl_exec($curl); 
$err = curl_error($curl); 

curl_close($curl); 

if ($err) { 
    echo "cURL Error #:" . $err; 
} else { 

    $weather_data = ($response); 
    // save $weather_data to local file 
    $file = 'weather_data.txt'; 

    // Write the contents to the file 
    file_put_contents($file, $weather_data); 
} 
+0

你显然没有正确阅读我的问题,只是想发布一些东西。我也需要60分钟而不是60秒。你基本上重复了我已经指出的一切。您没有按照我的问题要求提供适当的解决方案。我会标记你的帖子! – Nxlevel

+0

对不起,我用示例代码更新了我的帖子,用于检索数据并将其存储在文件中 – developer

+0

使用提供的代码保存文件,但其中没有数据! – Nxlevel

0

也许你想使用书签:

javascript:(function() { 


function httpGet() 
{ 
    if (window.XMLHttpRequest) 
    { 
     xmlhttp=new XMLHttpRequest(); 
    } 
    else 
    { 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    var theUrl = "http://api.openweathermap.org/data/2.5/weather?q=London"; 

    xmlhttp.onreadystatechange=function() 
    { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) 
     { 
      saveTextAsFile(xmlhttp.responseText); 
     }; 
    }; 
    xmlhttp.open("GET", theUrl, false); 
    xmlhttp.send();  
} 



function saveTextAsFile(textToSave) 
{ 


    var textToSaveAsBlob = new Blob([textToSave], {type:"text/plain"}); 
    var textToSaveAsURL = window.URL.createObjectURL(textToSaveAsBlob); 
    var fileNameToSaveAs = "weather.json"; 

    var downloadLink = document.createElement("a"); 
    downloadLink.download = fileNameToSaveAs; 
    downloadLink.innerHTML = "Download File"; 
    downloadLink.href = textToSaveAsURL; 
    downloadLink.onclick = destroyClickedElement; 
    downloadLink.style.display = "none"; 
    document.body.appendChild(downloadLink); 

    downloadLink.click(); 
} 

function destroyClickedElement(event) 
{ 
    document.body.removeChild(event.target); 
} 




httpGet(); 

})(); 

只需调用它装载http://api.openweathermap.org后(或包括在代码加载吧..),并添加脚本的网址您的API密钥。 ..

+0

此代码通过编译创建和下载文件来工作。但是,我如何将文件实际保存到我的服务器上的目录? – Nxlevel

+0

这取决于您正在使用的浏览器。一种方法是将浏览器的下载文件夹切换到JSON文件应该位于的(可能已安装的)文件夹。 – Maksim