ORCA APIを利用する(Post)


仕事が少し落ち着いたので前回に引き継き日医オープンソースORCAの話題である。
前回はGetの場合であるが、殆どのAPIがPostでのリクエストに対応しているのでその場合のサンプルです。
例によって厳密なエラー処理などしていないので流用する場合は注意してください。

以下は特定の患者の診療歴を取得する場合の例です。
bodyを変更する事ですべてのAPIが利用できます。

Dim body As String
body = “<data>” & vbCrLf & _
“<medicalgetreq type=””record””>” & vbCrLf & _
“<InOut type=””string””>O</InOut>” & vbCrLf & _
“<Patient_ID type=””string””>000001</Patient_ID>” & vbCrLf & _
“<Perform_Date type=””string””></Perform_Date>” & vbCrLf & _
“<For_Months type=””string””>99</For_Months>” & vbCrLf & _
“</medicalgetreq>” & vbCrLf & _
“</data>”

Dim oruser As String = “ormaster”
Dim orpasswd As String = “ormaster”
Dim URL As String = “http://192.168.0.2:8000/api01rv2/medicalgetv2?class=01”

Dim CONTENT_TYPE As String = “application/xml”
Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding(“UTF-8”)
Dim Result As String

Dim record_in_byte As Byte() = Encoding.UTF8.GetBytes(body)
Dim req As HttpWebRequest = CType(HttpWebRequest.Create(URL), HttpWebRequest)
req.ServicePoint.Expect100Continue = False

req.Method = “POST”
req.ContentType = CONTENT_TYPE
req.ContentLength = record_in_byte.Length
req.Credentials = New NetworkCredential(oruser, orpasswd)
req.PreAuthenticate = True
req.KeepAlive = False


Try
Dim reqstream As System.IO.Stream = req.GetRequestStream()
reqstream.Write(record_in_byte, 0, record_in_byte.Length)
reqstream.Close()

Dim res As WebResponse = req.GetResponse()
Dim str As System.IO.Stream = res.GetResponseStream()

Dim strread As New System.IO.StreamReader(str, enc)

Dim FOO As String = strread.ReadToEnd()
Result = FOO

strread.Close()
str.Close()
res.Close()

Catch exc As WebException
Result = “ERROR”
If exc.Status = WebExceptionStatus.ProtocolError Then
Dim err As HttpWebResponse = DirectCast(exc.Response, HttpWebResponse)

Dim errcode As Integer = CInt(err.StatusCode)

‘Console.WriteLine(err.ResponseUri)
‘Console.WriteLine(“{0}:{1}”, errcode, err.StatusDescription)

err.Close()
Else
‘Console.WriteLine(exc.Message)
End If
End Try

‘以降Resultをparseする()

 

ORCA APIを利用する(Get)


ニッチな話題ですがお仕事で扱っている日医がオープンソースとして主に診療所等など用に公開しているORCAについて外部アプリケーションから患者の氏名などのデータを利用する案件があったのでメモ。

ORCAからデータを取得するにはAPIを使用するかPostgresqlのDBから直接読み込む方法があるがスマートな方法であるAPIを使用する事にした。

以下VB.Netでのサンプル。
このサンプルは唯一getメソッド?でアクセルするタイプのAPIです。
(https://www.orca.med.or.jp/receipt/tec/api/patientget.html)

サンプルはエラー処理などキチンとしていないのでもし再利用する方がいましたらその辺注意してください。
またC#のサンプルが本家にありますのでそちらも参考にしてください。

Dim USER As String = “ormaster”
Dim PASSWD As String = “ormasterpass”
Dim URL As String

URL = “http://192.168.0.5:8000/api01rv2/patientgetv2?id=<ptnum>”
URL = Replace(URL, “<ptnum>”, “1”) ‘患者番号

Dim ResultXML As String

Dim req As HttpWebRequest = CType(HttpWebRequest.Create(URL), HttpWebRequest)
req.Method = “GET”
req.Credentials = New NetworkCredential(USER, PASSWD)
req.PreAuthenticate = True
Dim res As HttpWebResponse = Nothing

Try
res = DirectCast(req.GetResponse(), HttpWebResponse)

Catch wex As WebException
If wex.Status = WebExceptionStatus.ProtocolError Then
Dim err As HttpWebResponse = DirectCast(wex.Response, HttpWebResponse)

        Dim errcode As Integer = CInt(err.StatusCode)

        Console.WriteLine(err.ResponseUri)
Console.WriteLine(“Response server => {0}”, err.Server)
Console.WriteLine(“{0}:{1}”, errcode, err.StatusDescription)

        err.Close()
Else
Console.WriteLine(wex.Message)
End If
End Try

If res IsNot Nothing Then
Dim str As Stream = res.GetResponseStream()
Dim strread As New StreamReader(str)

    ResultXML = strread.ReadToEnd()

    strread.Close()
str.Close()
res.Close()
End If

GC.Collect()
req.Abort()

‘正常に取れたらResultXMLをparseする

Xojoでオンラインサインアップのようなものを作る


よくネットにあるオンラインサインアップのようなものをXojoで作ってみた。
テスト段階なので単純にフォームに入れられたメールアドレスにメールを送信するだけのものですがユーザーのデータを記録するDBと本登録の機構を追加すれば最低限使用できるような形になるかと思います。
実際にはhttps等を使用したほうがよろしいかと思いますがXojoであればこんな感じの物も簡単に構築できます。

デモサイトは↓

http://124.41.69.194/567/labo/testonlinesignup/testonlinesignup.cgi

メールアドレスや入力されたパスワードは記録しません。
またパスワードの部分は何も処理してませんので入力しなくても動作します。
送信されるメールにURLが記載されておりますがそのURLは存在しません。

Xojo備忘録 webアプリでcookieを使用する


cookieもxojoなら簡単だ。
cookieを登録する場合はsession.cookies.set
session.cookies.valueでサクッと読み込む事ができる。

以下サンプルです。

http://124.41.69.194/567/labo/testcookie/testcookie.cgi

テキストフィールドに入力された内容をsetボタンで登録しgetボタンで読み込みます。
クリアボタンは単純にテキストフィールドをクリアするだけでcookieを削除するわけではありません。

setボタンが押された時の処理

Session.Cookies.set(“username”,TextField1.text)
Session.Cookies.set(“email”,TextField2.text)

getボタンが押された時の処理

TextField1.text=Session.Cookies.Value(“username”)
TextField2.Text=Session.Cookies.Value(“email”)

簡単ですね。

Xojo備忘録 webアプリで位置情報を取得する


他の開発環境での話は分からないがXojoでは位置情報の取得は簡単だ。
まず、DeviceLocationコントロールを配置する。

今回のサンプルでは更新ボタンを押した際に位置情報を取得しテキストフィールドへ書き込んでいるだけだ。
このテストアプリはものの2、3分で完了するくらいのレベルである。

更新ボタンを押した際に

DeviceLocation_Geo.RequestDeviceLocation()

とすると位置情報を取得した際にイベントが発生し

TextField1.text=str(Latitude)
TextField2.text=str(Longitude)

な感じで表示しているだけ。
実に簡単。

以前iOSのswiftで位置情報へのアクセルを行ったことがあるが色々ややこしい。
Webアプリで良ければiPhoneからも上記サンプルで位置情報を取得する事ができるので簡単なアプリはwebアプリでよさそうである。

サンプル

http://124.41.69.194/567/labo/geo/geo.cgi