AIR
 

週間天気予報取得

概要

週間天気予報を気象庁のデータより取得します。

メモ

天気予報取得先は、HTMLのパースが必要ですが、無償で取得可能な気象庁のデータを使用しています。
XMLで提供していただいているサイト(http://www.drk7.jp/weather/など)もあります。
サイトが無くなった時や通信障害が起きた時用に、
一次サイトから取得する方法として記載します。
気象庁のデータはYahoo Japanなども利用しています。

HTMLの構文解析はHTML 5や高速性を考えてJsoupにしています。

HTTPの送受信は他ツールとの再利用性を考えて、Apache HttpComponentsを利用しています。

ソースコード

  1. package sample.air.wether.jma.get;
  2.  
  3. import java.io.IOException;
  4. import java.nio.charset.StandardCharsets;
  5. import java.util.ListIterator;
  6.  
  7. import org.apache.http.HttpEntity;
  8. import org.apache.http.HttpStatus;
  9. import org.apache.http.client.methods.CloseableHttpResponse;
  10. import org.apache.http.client.methods.HttpGet;
  11. import org.apache.http.impl.client.CloseableHttpClient;
  12. import org.apache.http.impl.client.HttpClients;
  13. import org.apache.http.util.EntityUtils;
  14. import org.jsoup.Jsoup;
  15. import org.jsoup.nodes.Document;
  16. import org.jsoup.nodes.Element;
  17. import org.jsoup.select.Elements;
  18.  
  19. public class GetJMA {
  20.  
  21. /**
  22. * 気象庁から週間天気予報を取得
  23. */
  24. public void executeGetJMAweeklyWeather() {
  25.  
  26. String url = "http://www.jma.go.jp/jp/week/319.html"; // 東京の週間天気予報のページ
  27.  
  28. try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
  29.  
  30. HttpGet getMethod = new HttpGet(url);
  31.  
  32. try (CloseableHttpResponse response = httpClient.execute(getMethod)) {
  33. if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
  34. HttpEntity entity = response.getEntity();
  35. String contents = EntityUtils.toString(entity,
  36. StandardCharsets.UTF_8);
  37. this.executeParseJMAweeklyWeather(contents); //HTML構造解析メソッドに渡す
  38. }
  39. }
  40. } catch (IOException e) {
  41. e.printStackTrace();
  42. }
  43.  
  44. System.out.println("=== AIR Sample End : airGetWetherFromJMA ===");
  45. }
  46.  
  47. /**
  48. * 取得したHTMLの文字列を構造解析、出力
  49. */
  50. public void executeParseJMAweeklyWeather(String contents) {
  51.  
  52. String[] item = new String[4];
  53. item[0] = "天気予報";
  54. item[1] = "降水確率";
  55. item[2] = "最高気温";
  56. item[3] = "最低気温";
  57.  
  58. Document document = Jsoup.parse(contents);
  59. System.out.println(document.html()); //取得したHTML全文
  60.  
  61. /* 地方 */
  62. Elements elementsArea = document.select("th.normal"); // <th class="nomal">を取得
  63. ListIterator<Element> elementArea = elementsArea.listIterator();
  64. while (elementArea.hasNext()) {
  65. System.out.print(elementArea.next().text());
  66.  
  67. System.out.println();
  68.  
  69. /* 日付の取得 */
  70. Elements elementsDay = document
  71. .select("th.weekday, th.satday, th.sunday");// <th class="weekday">を取得
  72. ListIterator<Element> elementDay = elementsDay.listIterator();
  73. elementDay.next();
  74. while (elementDay.hasNext()) {
  75. System.out.print(elementDay.next().text());
  76. System.out.print(",");
  77. }
  78.  
  79. System.out.println();
  80.  
  81. /* 各地方の天気 天気(7日分),降水確率,最高気温,最低気温 */
  82. Elements elementsWether = document.select("td.for");// <th class="for">を取得
  83. int num = (elementArea.previousIndex()) * 7 * 4;
  84. ListIterator<Element> elementWether = elementsWether
  85. .listIterator(num);
  86.  
  87. /* 7日間の天気予報、降水確率、最高気温、最低気温 */
  88. for (int i = 0; i < 4; i++) {
  89. System.out.print(item[i].toString() + ",");
  90. for (int j = 0; j < 7; j++) {
  91. System.out.print(elementWether.next().text());
  92. System.out.print(",");
  93. }
  94. System.out.println();
  95. }
  96. System.out.println();
  97. }
  98. }
  99. }
  100.  
  101.  
  102.  
  103.  

実行結果


=== 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 ===


更新日時:2014-06-07

最終更新:2014年06月07日 17:27