FC2ブログ
    まとめ買いがお得なオンラインセレクトショップ ETERNITY
2009年08月13日 (木)
駿河湾を震源とする地震のニュースを見ていて、思いつきで地震感知情報APIを触ってみたメモです。

役に立つとか立たないとかは別にして、VBを勉強するためのお題としてはまぁいいんじゃないかということで。
(Visual Basic 2008 Express Editionを使用)

ぶっちゃけて言うと、ここのサイトを見てクールだと思ったというのもあるかな(笑)
http://d.hatena.ne.jp/haru-komugi/20080614/1213435582

地震感知情報APIについてはこちらを参照してください。
http://p2pquake.ddo.jp/p2pquake/EPSP/partA_010.html

地震感知情報APIのサイトに全て書いてあるので、そこに従えばデータの受信は簡単です。

VBの知識がほとんどない私にとってどうやってVBに取り込むとかそこからスタートでした。。
もっと簡単にやる方法あるんだろうけど、まあ動けばおkという気持ちで。

思いつきの仕様はこんな感じです。
(1)指定日の地震データを受信する
→ターゲットのURLへアクセスしてソースを取得する勉強

(2)震度4以上の最新の地震情報を1件だけ表示する
  →配列とかの勉強

(3)震源地をGoogleで表示する
  →WebBrowser コントロールの勉強

(4)震度5弱、5強、6弱、6強、7あたりの地震だったら初音ミクに何かしゃべらせる
  →オーディオリソースを再生する勉強


実際の画面はこんな感じ
Form1

受信する地震データの中から下記のようなQUAコードを含む行だけ取得して最新の情報だけ表示するという感じ。
07:53:31,QUA,11日07時45分/1/0/4/千葉県東方沖/約50km/3.4/0/N35.7/E140.8/気象庁地震火山部


とりあえず表示するところまではうまく動いたんですが、問題はGoogleMAP。
これはちょっと強敵ですねぇ。
PHPならすぐできるんだけど、VBだとどうしていいかわからないというか、VBだけじゃむりっぽくない?と思いつつ、ここで必殺技の手抜きコーディング炸裂。

緯度と経度などURLに含めてWebBrowser コントロールで表示すればいいじゃんって事にしました。
もう調べるのめんどくさい(笑)

あともうひとつ強烈にめんどくさいのが、ミクにしゃべらせるという部分。
リアルタイムでしゃべらせることができないので、数字などミクの音声データをパーツとして作っておいて
VBで再生する音声ファイルを組み合わせるって方法にしました。

しかし、ここで大問題が。。

ミクにしゃべらせるのめんどくさすぎる。。

これを買わずしてミクファンは語れないっ! みっくみくにされる可愛さ またまた再販決定! 4次再販:2009年9月 1500円以上国内配送無料(一部商品除く)



ということで途中で音声データ作るのやめましたorz
本来VBの勉強するはずでスタートしたのに、変な思いつきのせいでミクと戯れている時間の方がはるかに多くなってきた。。

さすがに思いつきで作ったこともあり、納得いかないプログラムなので配布はしません。。。
そもそも、こんなアプリいらないか(笑)


<以下、コーディングのメモ>
■ターゲットのURLにアクセスし、ページソースを取得する
Dim enc As Encoding = Encoding.GetEncoding("Shift_JIS")
Dim p2pquake_url As String = "http://p2pquake.ddo.jp/p2pquake/api_userquake.pl?date=08/11"
Dim req As WebRequest = WebRequest.Create(p2pquake_url)
Dim res As WebResponse = req.GetResponse()
Dim st As Stream = res.GetResponseStream()
Dim sr As StreamReader = New StreamReader(st, enc)
Dim html As String = sr.ReadToEnd()
sr.Close()
st.Close()

これでターゲットURLのソースを変数htmlに格納。


■マルチラインのテキストボックスの行を読み込む
Dim rs As New System.IO.StringReader(TextBox1.Text)
Dim rsLine As String
While rs.Peek() > -1
'// 一行読み込む
rsLine = rs.ReadLine()

・ここは適当に処理

End While
rs.Close()

変数rsLineに1行分のテキストが入っている。
Forで1行ずつ回すよりこのループの方が体感で早い気がする。


■"/"スラッシュ区切りで配列に放り込む
Dim strLine As String
Dim stArrayData As String() = strLine.Split("/"c)

一瞬で配列に入れてくれるのでこれ便利。

■オーディオリソースの再生
Dim strm As System.IO.Stream = My.Resources.test1
Dim player As New System.Media.SoundPlayer(strm)
player.PlaySync()
player.Dispose()

VBのリソースにtest1という名称で登録したwavファイルを再生する。







テーマ:プログラミング
ジャンル:コンピュータ
コメント
この記事へのコメント
コメントを投稿
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可
 
トラックバック
この記事のトラックバックURL
この記事へのトラックバック