2016年7月12日 星期二

抓取天氣數據


香港天文台的氣候資料服務提供了由 1885 起的天氣數據。內容以 JSON 格式儲存。要抓取數據作為分析之用,最理想是把資料放進數據庫。但在這個動作之前,我希望先把數據按照原本的形式儲存,之後才解讀當中的內容。

利用 Chrome 的 Network 工具得出天氣數據儲存在一個叫 dailyExtract_2016.xml。檔案儲存了一整年的數據。於是我編寫了以下 PHP 程式把所有年份的 XML 檔案下載到伺服器:
<?php
//----------------------------------------------------------------------------------------
//  Weather Data Grabber Version 1.00
//----------------------------------------------------------------------------------------
//  Platform: PHP
//  Written by Pacess HO
//  Copyright 2016 Pacess Studio.  All rights reserved.
//----------------------------------------------------------------------------------------

date_default_timezone_set("Asia/Hong_Kong");

//  Weather data come from Hong Kong Observatory
$urlFormat = "http://www.hko.gov.hk/cis/dailyExtract/dailyExtract_####.xml";

//  Start from 1885 to now
$currentYear = date("Y");
$year = 1885;

print("\n");
print("-----------------------------------------------------------\n");
print("--  Weather Data Grabber Version 1.00                    --\n");
print("--  Written by Pacess HO                                 --\n");
print("--  Copyright 2016 Pacess Studio.  All rights reserved.  --\n");
print("-----------------------------------------------------------\n\n");

//  Download all weather data
for ($y=$year; $y<=$currentYear; $y++)  {

   //  Prepare save file
   $savePath = "./files/dailyExtract_$y.xml";

   //  Check if exists, if not then download, otherwise skip
   if (file_exists($savePath) == true)  {
      print("$savePath...skip\n");
      continue;
   }

   //  Construct download URL
   $url = str_replace("####", $y, $urlFormat);

   //  Get content from URL
   $content = file_get_contents($url);

   //  Save it to local folder
   $result = file_put_contents($savePath, $content);

   //  Print the result (file size)
   print("$savePath...$result\n");
}

?>

沒有留言: