仕事が少し落ち着いたので前回に引き継き日医オープンソース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する()