AIR
 

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

サンプルプログラム/週間天気予報取得」(2014/06/07 (土) 17:27:45) の最新版変更点

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

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

*週間天気予報取得 **概要 週間天気予報を気象庁のデータより取得します。 -データ取得先:気象庁 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 ==="); } /** * 取得した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 === }} ---- &link_up([ ページの上へ ]) #right(){更新日時:&date()} タグ:&tags() ----
*週間天気予報取得 **概要 週間天気予報を気象庁のデータより取得します。 -データ取得先:気象庁 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 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 End : airGetWetherFromJMA === }} ---- &link_up([ ページの上へ ]) #right(){更新日時:&date()} タグ:&tags() ----

表示オプション

横に並べて表示:
変化行の前後のみ表示: