「サンプルプログラム/週間天気予報取得」の編集履歴(バックアップ)一覧はこちら
追加された行は緑色になります。
削除された行は赤色になります。
*週間天気予報取得
**概要
週間天気予報を気象庁のデータより取得します。
-データ取得先:気象庁 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()
----