2015年5月5日 星期二

讀取 Yahoo 氣象資訊

Yahoo 網站提供免費的氣象資訊,包括溫度、濕度、風速、風向、能見度和大氣壓力...等,我們可以使用 Processing 取回這些資訊,將它顯示在電腦螢幕上,或是傳給 Arduino 等互動裝置。


下載 Library

切換到網頁 https://github.com/onformative/YahooWeather ,點選右下角落的「Download ZIP」按鈕。或是點按網址 http://www.onformative.com/uploads/googleWeather/YahooWeather.zip 直接下載。

下載後解壓縮,並將他複製到 <Processing>/libraries 資料夾內。最後,別忘了要退出 Processing 再重新啟動。


開啟範例圖檔

內建的範例程式可以讓您快速感受到取得氣象資訊是多麼容易的一件事。

點按下拉功能表 File > Examples...,再展開 Contributed Libraries > Yahoo Weather 並雙擊 WeatherSimpleExample。

程式碼如下:

import com.onformative.yahooweather.*;

YahooWeather weather;
int updateIntervallMillis = 30000;

void setup() {
  size(700, 300);
  fill(0);
  textFont(createFont("Arial", 14));
  // 2442047 = the WOEID of Berlin
  // use this site to find out about your WOEID : http://sigizmund.info/woeidinfo/
  weather = new YahooWeather(this, 638242, "c", updateIntervallMillis);
}

void draw() {
  weather.update();

  background(255);
  text("City: "+weather.getCityName()+"; Region: "+weather.getRegionName()+"; Country: "+weather.getCountryName()+"; Last updated: "+weather.getLastUpdated(), 20, 20);
  text("Lon: "+weather.getLongitude()+" Lat: "+weather.getLatitude(), 20, 40);
  text("WindTemp: "+weather.getWindTemperature()+" WindSpeed: "+weather.getWindSpeed()+" WindDirection: "+weather.getWindDirection(), 20, 60);
  text("Humidity: "+weather.getHumidity()+" visibility: "+weather.getVisibleDistance()+" pressure: "+weather.getPressure()+" rising: "+weather.getRising(), 20, 80);
  text("Sunrise: "+weather.getSunrise()+" sunset: "+weather.getSunset(), 20, 100);
}

public void keyPressed() {
  if (key == 'q') {
    weather.setWOEID(638242);
  }
  if (key == 'r') {
    weather.setWOEID(44418);
  }
}

點擊「Run」按鈕執行程式,就可以看到如下畫面:


目前顯示的是德國柏林(Berlin)的天氣,按下鍵盤的 'r' 鍵可以顯示英國倫敦(London)的天氣,按下鍵盤的 'q' 鍵可以再顯示柏林的天氣。



顯示台灣城市天氣資訊

要顯示各地區氣象資訊的關鍵是甚麼? 答案是「WOE ID」,只要改變 WOE ID 就可以顯示不同區域的氣象資訊。

範例程式中德國柏林(Berlin)的 WOEID 是 638242,英國倫敦(London)的 WOE ID 是 44418,那麼台北的 WOE ID 是多少呢? 您可以到這個網頁

https://weather.yahoo.com/taiwan/

選擇清單中的台灣各地區城市。

我們以台北為例,請您點按 Taipei City,在新頁面內再點按一次 Taipei City,網頁會跳到

https://weather.yahoo.com/taiwan/taipei-city/taipei-city-2306179/

網址最後面的數字就是台北的 WOE ID。



您可以用這組數字取代掉程式碼中的 638242,如下兩行:

weather = new YahooWeather(this, 638242, "c", updateIntervallMillis);

weather.setWOEID(638242);

如果要查其他地方的 WOEID,可以直接在搜尋欄位內鍵入地名或郵遞區號。


我們再以桃園為例,在搜尋欄位內鍵入「taoyuan」,就可以得到網址

https://weather.yahoo.com/taiwan/taoyuan-county/taoyuan-city-2298866/

所以桃園的 WOE ID 為 2298866。


最後,我們要顯示台北和桃園的氣象資訊,程式碼如下:

import com.onformative.yahooweather.*;

YahooWeather weather;
int updateIntervallMillis = 30000;

void setup() {
  size(700, 300);
  fill(0);
  textFont(createFont("Arial", 14));
  weather = new YahooWeather(this, 2298866, "c", updateIntervallMillis);
}

void draw() {
  weather.update();

  background(255);
  text("City: "+weather.getCityName()+"; Region: "+weather.getRegionName()+"; Country: "+weather.getCountryName()+"; Last updated: "+weather.getLastUpdated(), 20, 20);
  text("Lon: "+weather.getLongitude()+" Lat: "+weather.getLatitude(), 20, 40);
  text("WindTemp: "+weather.getWindTemperature()+" WindSpeed: "+weather.getWindSpeed()+" WindDirection: "+weather.getWindDirection(), 20, 60);
  text("Humidity: "+weather.getHumidity()+" visibility: "+weather.getVisibleDistance()+" pressure: "+weather.getPressure()+" rising: "+weather.getRising(), 20, 80);
  text("Sunrise: "+weather.getSunrise()+" sunset: "+weather.getSunset(), 20, 100);
}

public void keyPressed() {
  if (key == 'q') {
    weather.setWOEID(2298866);
  }
  if (key == 'r') {
    weather.setWOEID(2306179);
  }
}


相關文章

Onformative http://www.onformative.com/lab/google-weather-library-for-processing/

Python Weather API https://code.google.com/p/python-weather-api/





沒有留言:

張貼留言