2016-09-06 85 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