7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

国産Web APIAdvent Calendar 2018

Day 2

【地震情報配信】なまずが素晴らしいと思う件

Last updated at Posted at 2018-12-12

※カレンダーが空いてたのでショボイですが書きました

0.初めに

私はエンジニアではないただのドシロウトです。

  • ドシロウトなのでAPIの外の人になります。
  • ドシロウトなのでプログラミングの能力は低いです。
  • ドシロウトなので簡単に利用出来て、使い方も簡単なAPIが好きです。
  • せっかくAPIを利用したプログラムを作ったら長く使いたいです。

この記事では国産でとても長くAPIを提供されていて登録不要で使い方も簡単な地震情報配信APIをご紹介します。(ご存知でしょうが…(^_^;))

1.【地震情報配信】なまず

他にも地震情報を配信してるAPIはあると思いますが5年以上継続しているすばらしいサイトです。

【地震情報配信】なまず - PCからモバイルまでサポートするリアルタイム地震情報サービス
http://nmzu.jp/

検索した限りでは2013年2月に以下のネット記事でも紹介されてました。

Bing Maps上に地震の震源地を表示するプログラムを作る
https://thinkit.co.jp/story/2013/02/20/3971

APIエンドポイント:
http://api.nmzu.jp/history.xml

APIエンドポイントを見て頂ければわかる通り直近の地震情報が時系列で並んだ以下の項目を含んだXMLが返されます。

項目:地震情報のURL、発生日、緯度、経度、地域名、震度、マグニチュード

2.サンプル

ドシロウトらしく世界一簡単な言語BASIC!でのサンプルを載せておきます。

BASIC!はAndroidで動くBASICインタープリタです。詳細は以下をどうぞ

AndroidでBASICを使う( BASIC プログラミング )
https://qiita.com/basictomonokai/items/25bcb21ec69c00e9ad23

私がBASIC!のプログラムで作成した画面は以下。

BASIC!アプリ

Androidのスマホやタブレットで見れるのでとても便利です。

3.サンプルプログラムのコード

BASIC!プログラムのコードのAPI取得部分が以下です。

jisgin.bas
REM 地震情報取得

! API呼出
console.title "地震情報取得中…"
graburl eqwk$,"http://api.nmzu.jp/history.xml"

! 改行で取得したデータを分割
split eqa$[],eqwk$,"\n"
array.length leqa,eqa$[]        

! 行ごとの処理
outall$=""
for i=1 to leqa
   msx$="地震情報処理中… ( "+str$(int(i/leqa*100))+" %)"
   console.title msx$

! URLを抽出
   if IS_IN("<url>",eqa$[i])>0 then
     equrl$=replace$(eqa$[i],"<url>","")
     equrl$=replace$(equrl$,"</url>","")
     equrl$=replace$(equrl$,"\t","")
   endif

! 発生日時を抽出
   if IS_IN("<detection_date>",eqa$[i])>0 then
     eqdat$=replace$(eqa$[i],"<detection_date>","")
     eqdat$=replace$(eqdat$,"</detection_date>","")
     eqdat$=replace$(eqdat$,"\t","")
   endif

! 緯度経度を抽出
   if IS_IN("<latitude>",eqa$[i])>0 then
     eqlat$=replace$(eqa$[i],"<latitude>","")
     eqlat$=replace$(eqlat$,"</latitude>","")
     eqlat$=replace$(eqlat$,"\t","")
   endif

   if IS_IN("<longitude>",eqa$[i])>0 then
     eqlon$=replace$(eqa$[i],"<longitude>","")
     eqlon$=replace$(eqlon$,"</longitude>","")
     eqlon$=replace$(eqlon$,"\t","")
   endif

! 地域名を抽出
   if IS_IN("<name>",eqa$[i])>0 then
     eqnam$=replace$(eqa$[i],"<name>","")
     eqnam$=replace$(eqnam$,"</name>","")
     eqnam$=replace$(eqnam$,"\t","")
   endif

! 震度を抽出
   if IS_IN("<intensity_no>",eqa$[i])>0 then
     eqint$=replace$(eqa$[i],"<intensity_no>","")
     eqint$=replace$(eqint$,"</intensity_no>","")
     eqint$=replace$(eqint$,"\t","")
   endif

! マグニチュードを抽出
   if IS_IN("<magnitude>",eqa$[i])>0 then
     eqmag$=replace$(eqa$[i],"<magnitude>","")
     eqmag$=replace$(eqmag$,"</magnitude>","")
     eqmag$=replace$(eqmag$,"\t","")
   endif

! 1件分まとめ
   if IS_IN("</entry>",eqa$[i])>0 then
     outall$=outall$+"発生日時:"+eqdat$+","
     outall$=outall$+"地域:"+eqnam$+","
     outall$=outall$+"震度:"+eqint$+","
     outall$=outall$+"url:"+equrl$+","
     outall$=outall$+"緯度:"+eqlat$+","
     outall$=outall$+"経度:"+eqlon$+","
     outall$=outall$+"マグニチュード:"+eqmag$+"\n"
   endif

next i

array.delete eqa$[]


とても簡単だと思います。

4.まとめ

地震情報のような災害系のAPIはいつ発生するかわからないので情報提供の継続性が重要だと思います。

「なまず」さんはその意味で素晴らしく今後も続けて頂けるといいなぁと思っています。

以 上

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?