webORCAへのAPI接続

  • オンプレミスORCAへは過去にAPI接続することができた
  • この度オンプレミスからwebORCA(クラウド)にupgradeとなり、API接続ができなくなった
  • 認証に関する設定が必要なようだ
  • 接続方法については、本家には以下の記載あり。ただしruby
  • www.orca.med.or.jp
  • 以下は、試行錯誤の末、pythonでwebORCA(クラウド)にAPI接続が可能になったときの記録
import requests
from requests.auth import HTTPBasicAuth
import ssl

#各ファイルをフルパスで指定
CA_CERT = "??/root.crt"
CERT = "??/??????__JP_u????????_client?????.crt"
CERTKEY = "??/??????__JP_u????????_client?????.enc.pem"
KEYPASS = "??"  #??????__JP_u????????_client?????.passというファイルの中に記載がある
APIUSER = "ormaster"
APIKEY = "??"
ID = "47103"

url = "https://weborca.cloud.orcamo.jp/api/api01rv2/patientgetv2"

params = {
    'id': ID,
    'format': 'json'
}

# SSLコンテキストの作成
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
context.load_verify_locations(CA_CERT)
context.load_cert_chain(certfile=CERT, keyfile=CERTKEY, password=KEYPASS)

# カスタムアダプタの作成
class SSLAdapter(requests.adapters.HTTPAdapter):
    def init_poolmanager(self, *args, **kwargs):
        kwargs['ssl_context'] = context
        return super(SSLAdapter, self).init_poolmanager(*args, **kwargs)

    def cert_verify(self, conn, url, verify, cert):
        conn.cert_reqs = 'CERT_REQUIRED'
        conn.ca_certs = CA_CERT
        if cert:
            conn.cert_file, conn.key_file = cert

try:
    # セッションの作成
    session = requests.Session()
    session.mount("https://", SSLAdapter())

    # リクエストの送信
    response = session.get(url, params=params, auth=HTTPBasicAuth(APIUSER, APIKEY))

    # ステータスコードが200でない場合は例外をスロー
    response.raise_for_status()

    # レスポンスの出力
    print(response.text)
except requests.exceptions.SSLError as ssl_err:
    print(f"SSLエラー: {ssl_err}")
except requests.exceptions.RequestException as req_err:
    print(f"HTTPエラー: {req_err}")