潮汐(ちょうせき)情報をWebAPIを利用して取得する
ズバット引越し比較
Posted on 2022/11/17 at 04:50
今年の夏に義理父から使わなくなった釣り竿を譲り受けました。子供のころに父親と釣りに行って楽しかった思い出があったのと、子供たちの希望もあって何十年ぶりに行ってみることにしました。
サビキ釣りでサバ、イワシ、チカ。ちょい投げでハゼ、あと秋にはアキアジ(さけ)も釣れて、釣りの魅力にすっかりはまってしまいました。
そんなこんなであっという間に11月。北海道はかなり寒くて、寒がりな私は早くも釣りはシーズンオフしましたので来年に向けて釣りの勉強をすることに。
その中で潮の動きが重要だということを知り、さっそく「タイドグラフBI」というアプリをインストールしましたが、
他にもこの潮の動きである潮汐(ちょうせき)情報を調べる類似アプリやWebサイトがたくさんあったため私も何か作りたいっ!という衝動にかられ調べてみることに。
そして潮汐情報WebAPIを見つけたのでそこからJsonデータを取得するJAVAライブラリ「tide-api.jar」を作成しましたので、その紹介です。
WebAPIとは
以下の記事で簡単に説明していますので、参考にしてください。
フォートナイトWebAPIでアイテムショップ情報サイトを作成する
フォートナイト内の日替わりアイテムショップ情報をWebAPIを利用して取得する方法について。Javaサンプルコードもあります。
潮汐情報サイト
気象庁でもCSVデータの取得などできましたが、「日本沿岸736港の潮汐表-tide736.net」ではタイトルのとおりですが、
日本沿岸の736の港の潮汐データをJsonデータとして提供するWebAPIサービスを行ってくれています。
データに関しても自己責任において自由に利用可能ということでしたので、こちらを利用させていただくことにしました。
ライブラリの準備
jacksonライブラリの準備
Jsonデータの取り扱いにjacksonを利用していますので、プロジェクトでjacksonを使えるようにします。
1.Mavenの場合
pom.xmlのdependencies内に以下のコードを追記します。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.14.0</version>
</dependency>
2.jarファイルを直接ダウンロードする場合
jackson-core、jackson-annotations、jackson-databindをダウンロードしてクラスパスを通します。今回は最新バージョンである2.14.0をダウンロードしました。
jackson-annotations-2.14.0.jar
それぞれのリンク先ページ内の赤枠で囲った「bundle」をクリックしてそれぞれのjarファイルをダウンロードしてください。
tide-api.jarのダウンロード
潮汐データを取得するために作成したライブラリ「tide-api.jar」をダウンロードして、クラスパスを通します。
「tide-api」の使い方
潮汐ポイント情報の設定
潮汐情報のポイントはTidePointクラスとして登録しました。例として北海道の小樽のTidePointは以下のように取得できます。
TidePoint point = Prefecture.Hokkaidou.Otaru;
TideAPIインスタンスの生成
潮汐情報の取得クラスであるTideAPIクラスのインスタンスを生成します。コンストラクタにTidePointを引数に入れます。
TidePoint point = Prefecture.Hokkaidou.Otaru;
TideAPI api = new TideAPI(point);
潮汐情報の取得
特定の日付の潮汐情報はTideDataクラスとして取得できます。複数日数の潮汐情報を取得したい場合はTideDataMapクラスにて取得可能です。 TideDataMapはjava.sql.Dateクラスをキー、TideDataクラスを値としたHashMapクラスを継承しています。潮汐情報の取得メソッドには以下のようなものがあります。
1.TideData取得メソッド
TidePoint point = Prefecture.Hokkaidou.Otaru;
TideAPI api = new TideAPI(point);
// 今日の潮汐情報の取得
TideData data1 = api.getTodayTideData();
// 2022年12月31日の潮汐情報の取得
java.sql.Date date = ApiUtil.toSQLDate("2022/12/31");
TideData data2 = api.getTideData(date);
2.TideDataMap取得メソッド
TidePoint point = Prefecture.Hokkaidou.Otaru;
TideAPI api = new TideAPI(point);
// 今月の潮汐情報の取得
TideDataMap data1 = api.getMonthlyDataMap();
// 今週の潮汐情報の取得
TideDataMap data2 = api.getWeeklyDataMap();
// 2022年11月21日(月)から2022年11月27日(日)の週間潮汐情報
TideDataMap data3 = api.getWeeklyDataMap(2022, 11, 23);
// 2022年12月の潮汐情報の取得
TideDataMap data4 = api.getMonthlyDataMap(2022, 12);
// 2022年12月1日から2022年12月10日までの潮汐情報
java.sql.Date start = ApiUtil.toSQLDate("2022/12/1");
java.sql.Date end = ApiUtil.toSQLDate("2022/12/10");
TideDataMap data5 = api.getTideDataMap(start, end);
// 自分で取得したJsonインスタンスから潮汐情報に変換
// 2022年11月22日から30日分の潮汐情報を取得(getMonthlyDataMapではデータ分だけアクセスするので、こちらの方が高速で処理できます)
try {
URL url = new URL("https://api.tide736.net/get_tide.php?pc="
+point.getPrefecturecode()+"&hc="+point.getHarborcode()+"&yr=2022&mn=11&dy=22&rg=month");
JsonNode root = getJson(url);
TideDataMap data6 = api.getTideDataMap(root);
} catch (MalformedURLException e) {
e.printStackTrace();
}
サンプルコードと出力結果
今日の潮汐情報を取得して標準出力します。
import tide.api.Prefecture;
import tide.api.TideAPI;
import tide.api.TideData;
import tide.api.TidePoint;
public class TideApiSample {
public static void main(String[] args) {
TidePoint point = Prefecture.Hokkaidou.Hamamasu;
TideAPI api = new TideAPI(point);
TideData tide = api.getTodayTideData();
System.out.println(point);
System.out.println(tide);
}
}
出力結果
[ ポイント情報 ]
都道府県コード: 1
港コード: 32
港名: 小樽
港名(ローマ字): Otaru
緯度: 43.13
経度: 141.01
平均水面: 16
[潮汐情報]
観測日: 2022-11-17
[太陽情報]
日の出時刻: 06:31
正中時刻: 11:21
日の入時刻: 16:11
天文薄明(朝): 04:52
天文薄明(夕): 17:50
常用薄明(朝): 06:00
常用薄明(夕): 16:41
[月情報]
月の出時刻: 16日 22:35
正中時刻: 17日 06:00
月の入時刻: 17日 13:13
月齢: 22.7
潮名: 小潮
月の状態: null
[干潮情報]
[潮汐情報]
時刻: 15:42
unixTime: 1668667320000
水位: 7
[満潮情報]
[潮汐情報]
時刻: 04:00
unixTime: 1668625200000
水位: 20
[時間毎潮汐情報]
[潮汐情報]
時刻: 00:00
unixTime: 1668610800000
水位: 19
[潮汐情報]
時刻: 00:20
unixTime: 1668612000000
水位: 19
[潮汐情報]
時刻: 00:40
unixTime: 1668613200000
水位: 19
[潮汐情報]
時刻: 01:00
unixTime: 1668614400000
水位: 19
[潮汐情報]
時刻: 01:20
unixTime: 1668615600000
水位: 19
[潮汐情報]
時刻: 01:40
unixTime: 1668616800000
水位: 19
[潮汐情報]
時刻: 02:00
unixTime: 1668618000000
水位: 19
[潮汐情報]
時刻: 02:20
unixTime: 1668619200000
水位: 20
[潮汐情報]
時刻: 02:40
unixTime: 1668620400000
水位: 20
[潮汐情報]
時刻: 03:00
unixTime: 1668621600000
水位: 20
[潮汐情報]
時刻: 03:20
unixTime: 1668622800000
水位: 20
[潮汐情報]
時刻: 03:40
unixTime: 1668624000000
水位: 20
[潮汐情報]
時刻: 04:00
unixTime: 1668625200000
水位: 20
[潮汐情報]
時刻: 04:20
unixTime: 1668626400000
水位: 20
[潮汐情報]
時刻: 04:40
unixTime: 1668627600000
水位: 20
[潮汐情報]
時刻: 05:00
unixTime: 1668628800000
水位: 20
[潮汐情報]
時刻: 05:20
unixTime: 1668630000000
水位: 20
[潮汐情報]
時刻: 05:40
unixTime: 1668631200000
水位: 20
[潮汐情報]
時刻: 06:00
unixTime: 1668632400000
水位: 19
[潮汐情報]
時刻: 06:20
unixTime: 1668633600000
水位: 19
[潮汐情報]
時刻: 06:40
unixTime: 1668634800000
水位: 19
[潮汐情報]
時刻: 07:00
unixTime: 1668636000000
水位: 19
[潮汐情報]
時刻: 07:20
unixTime: 1668637200000
水位: 18
[潮汐情報]
時刻: 07:40
unixTime: 1668638400000
水位: 18
[潮汐情報]
時刻: 08:00
unixTime: 1668639600000
水位: 18
[潮汐情報]
時刻: 08:20
unixTime: 1668640800000
水位: 17
[潮汐情報]
時刻: 08:40
unixTime: 1668642000000
水位: 17
[潮汐情報]
時刻: 09:00
unixTime: 1668643200000
水位: 17
[潮汐情報]
時刻: 09:20
unixTime: 1668644400000
水位: 16
[潮汐情報]
時刻: 09:40
unixTime: 1668645600000
水位: 16
[潮汐情報]
時刻: 10:00
unixTime: 1668646800000
水位: 16
[潮汐情報]
時刻: 10:20
unixTime: 1668648000000
水位: 15
[潮汐情報]
時刻: 10:40
unixTime: 1668649200000
水位: 14
[潮汐情報]
時刻: 11:00
unixTime: 1668650400000
水位: 14
[潮汐情報]
時刻: 11:20
unixTime: 1668651600000
水位: 13
[潮汐情報]
時刻: 11:40
unixTime: 1668652800000
水位: 12
[潮汐情報]
時刻: 12:00
unixTime: 1668654000000
水位: 12
[潮汐情報]
時刻: 12:20
unixTime: 1668655200000
水位: 11
[潮汐情報]
時刻: 12:40
unixTime: 1668656400000
水位: 10
[潮汐情報]
時刻: 13:00
unixTime: 1668657600000
水位: 9
[潮汐情報]
時刻: 13:20
unixTime: 1668658800000
水位: 9
[潮汐情報]
時刻: 13:40
unixTime: 1668660000000
水位: 8
[潮汐情報]
時刻: 14:00
unixTime: 1668661200000
水位: 8
[潮汐情報]
時刻: 14:20
unixTime: 1668662400000
水位: 7
[潮汐情報]
時刻: 14:40
unixTime: 1668663600000
水位: 7
[潮汐情報]
時刻: 15:00
unixTime: 1668664800000
水位: 7
[潮汐情報]
時刻: 15:20
unixTime: 1668666000000
水位: 7
[潮汐情報]
時刻: 15:40
unixTime: 1668667200000
水位: 7
[潮汐情報]
時刻: 16:00
unixTime: 1668668400000
水位: 7
[潮汐情報]
時刻: 16:20
unixTime: 1668669600000
水位: 7
[潮汐情報]
時刻: 16:40
unixTime: 1668670800000
水位: 7
[潮汐情報]
時刻: 17:00
unixTime: 1668672000000
水位: 7
[潮汐情報]
時刻: 17:20
unixTime: 1668673200000
水位: 7
[潮汐情報]
時刻: 17:40
unixTime: 1668674400000
水位: 8
[潮汐情報]
時刻: 18:00
unixTime: 1668675600000
水位: 8
[潮汐情報]
時刻: 18:20
unixTime: 1668676800000
水位: 8
[潮汐情報]
時刻: 18:40
unixTime: 1668678000000
水位: 9
[潮汐情報]
時刻: 19:00
unixTime: 1668679200000
水位: 9
[潮汐情報]
時刻: 19:20
unixTime: 1668680400000
水位: 9
[潮汐情報]
時刻: 19:40
unixTime: 1668681600000
水位: 10
[潮汐情報]
時刻: 20:00
unixTime: 1668682800000
水位: 10
[潮汐情報]
時刻: 20:20
unixTime: 1668684000000
水位: 11
[潮汐情報]
時刻: 20:40
unixTime: 1668685200000
水位: 12
[潮汐情報]
時刻: 21:00
unixTime: 1668686400000
水位: 12
[潮汐情報]
時刻: 21:20
unixTime: 1668687600000
水位: 13
[潮汐情報]
時刻: 21:40
unixTime: 1668688800000
水位: 13
[潮汐情報]
時刻: 22:00
unixTime: 1668690000000
水位: 14
[潮汐情報]
時刻: 22:20
unixTime: 1668691200000
水位: 14
[潮汐情報]
時刻: 22:40
unixTime: 1668692400000
水位: 15
[潮汐情報]
時刻: 23:00
unixTime: 1668693600000
水位: 15
[潮汐情報]
時刻: 23:20
unixTime: 1668694800000
水位: 15
[潮汐情報]
時刻: 23:40
unixTime: 1668696000000
水位: 15
[潮汐情報]
時刻: 24:00
unixTime: 1668697200000
水位: 16
データの使用について
データの取得日付分だけアクセスするため、あまり多くのデータを1回で取得しようとするとサーバーに負荷がかかると思いますので、1ヶ月分ぐらいがいいのではないかと思います。
「tide-api」の利用はご自由にご利用いただいて構いませんが、本プログラムによって生じる不具合、トラブル、損害において責任は負いかねますので、自己責任でのご利用をお願いいたします。