AIR
AIR
 
※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

「サンプルプログラム/週間天気予報取得」の編集履歴(バックアップ)一覧はこちら

サンプルプログラム/週間天気予報取得」の最新版変更点

追加された行は青色になります。

削除された行は赤色になります。

 *週間天気予報取得
 **概要
 週間天気予報を気象庁のデータより取得します。
 -データ取得先:気象庁 2014/5 時点 : [[http://www.jma.go.jp/jma/]]
 -HTMLの構文解析 Jsoup 1.7.3 : [[http://jsoup.org/]]
 -HTTPでの送受信 Apache HttpComponents 4.3.2 : [[https://hc.apache.org/]]
 ***メモ
 天気予報取得先は、HTMLのパースが必要ですが、無償で取得可能な気象庁のデータを使用しています。
 XMLで提供していただいているサイト([[http://www.drk7.jp/weather/]]など)もあります。
 サイトが無くなった時や通信障害が起きた時用に、
 一次サイトから取得する方法として記載します。
 気象庁のデータはYahoo Japanなども利用しています。
 
 HTMLの構文解析はHTML 5や高速性を考えてJsoupにしています。
 
 HTTPの送受信は他ツールとの再利用性を考えて、Apache HttpComponentsを利用しています。
 
 **ソースコード
 #highlight(linenumber,java){{
 package sample.air.wether.jma.get;
 
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
 import java.util.ListIterator;
 
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpStatus;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClients;
 import org.apache.http.util.EntityUtils;
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
 import org.jsoup.nodes.Element;
 import org.jsoup.select.Elements;
 
 public class GetJMA {
 
 	/**
 	 * 気象庁から週間天気予報を取得
 	 */
 	public void executeGetJMAweeklyWeather() {
 
 		String url = "http://www.jma.go.jp/jp/week/319.html"; // 東京の週間天気予報のページ
 
 		try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
 
 			HttpGet getMethod = new HttpGet(url);
 
 			try (CloseableHttpResponse response = httpClient.execute(getMethod)) {
 				if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
 					HttpEntity entity = response.getEntity();
 					String contents = EntityUtils.toString(entity,
 							StandardCharsets.UTF_8);
 					this.executeParseJMAweeklyWeather(contents); //HTML構造解析メソッドに渡す
 				}
 			}
 		} catch (IOException e) {
 			e.printStackTrace();
 		}
 
-		System.out.println("=== AIR Sample Start : airGetWetherFromJMA ===");
+		System.out.println("=== AIR Sample End : airGetWetherFromJMA ===");
 	}
 
 	/**
 	 * 取得したHTMLの文字列を構造解析、出力
 	 */
 	public void executeParseJMAweeklyWeather(String contents) {
 
 		String[] item = new String[4];
 		item[0] = "天気予報";
 		item[1] = "降水確率";
 		item[2] = "最高気温";
 		item[3] = "最低気温";
 
 		Document document = Jsoup.parse(contents);
 		 System.out.println(document.html()); //取得したHTML全文
 
 		/* 地方 */
 		Elements elementsArea = document.select("th.normal"); // <th class="nomal">を取得
 		ListIterator<Element> elementArea = elementsArea.listIterator();
 		while (elementArea.hasNext()) {
 			System.out.print(elementArea.next().text());
 
 			System.out.println();
 
 			/* 日付の取得 */
 			Elements elementsDay = document
 					.select("th.weekday, th.satday, th.sunday");// <th class="weekday">を取得
 			ListIterator<Element> elementDay = elementsDay.listIterator();
 			elementDay.next();
 			while (elementDay.hasNext()) {
 				System.out.print(elementDay.next().text());
 				System.out.print(",");
 			}
 
 			System.out.println();
 
 			/* 各地方の天気 天気(7日分),降水確率,最高気温,最低気温 */
 			Elements elementsWether = document.select("td.for");// <th class="for">を取得
 			int num = (elementArea.previousIndex()) * 7 * 4;
 			ListIterator<Element> elementWether = elementsWether
 					.listIterator(num);
 
 			/* 7日間の天気予報、降水確率、最高気温、最低気温 */
 			for (int i = 0; i < 4; i++) {
 				System.out.print(item[i].toString() + ",");
 				for (int j = 0; j < 7; j++) {
 					System.out.print(elementWether.next().text());
 					System.out.print(",");
 				}
 				System.out.println();
 			}
 			System.out.println();
 		}
 	}
 }
 
 
 
 }}
 
 **実行結果
 #asciiart(blockquote){{
 === AIR Sample Start : airGetWetherFromJMA ===
 東京地方
 4 日,5 月,6 火,7 水,8 木,9 金,10 土,
 天気予報,晴のち曇,曇,曇,曇時々晴,晴時々曇,晴時々曇,曇,
 降水確率,-/0/0/10,30/30/20/30,40,30,20,20,40,
 最高気温,24,21,22 (20~25),23 (21~25),24 (23~26),24 (20~28),23 (19~26),
 最低気温,/,15,16 (14~17),14 (13~16),15 (14~17),16 (14~18),17 (14~19),
 
 伊豆諸島
 4 日,5 月,6 火,7 水,8 木,9 金,10 土,
 天気予報,晴のち曇,曇のち時々雨,曇時々雨,曇,晴時々曇,曇時々晴,曇一時雨,
 降水確率,-/10/10/20,30/20/60/60,70,40,20,30,50,
 最高気温,20,21,20 (19~22),21 (19~23),21 (20~23),22 (20~24),21 (20~23),
 最低気温,/,16,15 (12~17),14 (12~16),15 (13~17),15 (14~17),16 (14~17),
 
 小笠原諸島
 4 日,5 月,6 火,7 水,8 木,9 金,10 土,
 天気予報,晴,晴時々曇,晴時々曇,曇,曇,曇時々晴,曇時々晴,
 降水確率,-/0/0/0,10/0/0/10,20,40,40,30,20,
 最高気温,24,24,24 (23~25),24 (23~26),24 (22~26),24 (22~26),25 (23~26),
 最低気温,/,18,20 (18~22),20 (18~22),20 (17~21),19 (17~20),19 (17~22),
 
-=== AIR Sample Start : airGetWetherFromJMA ===
+=== AIR Sample End : airGetWetherFromJMA ===
 }}
 
 ----
 &link_up([ ページの上へ ])
 #right(){更新日時:&date()}
 タグ:&tags()
 ----