Skip to content

Instantly share code, notes, and snippets.

@ochilab
Created March 12, 2025 08:18
Show Gist options
  • Save ochilab/48fd14b3a358c06eddf59fbb2bd50ed2 to your computer and use it in GitHub Desktop.
Save ochilab/48fd14b3a358c06eddf59fbb2bd50ed2 to your computer and use it in GitHub Desktop.
xapiでステートメントを登録する(Learning Locker)
import requests
import json
from datetime import datetime, timezone
from base64 import b64encode
# Learning Locker LRS のエンドポイント情報
LRS_ENDPOINT = "http://localhost:8081/data/xAPI/statements"
LRS_USERNAME = "xxxxxxx"
LRS_PASSWORD = "xxxxxx"
# Basic認証ヘッダーの作成
def get_auth_header():
auth_string = f"{LRS_USERNAME}:{LRS_PASSWORD}"
auth_encoded = b64encode(auth_string.encode()).decode()
return {"Authorization": f"Basic {auth_encoded}"}
# xAPI ステートメントの作成
def create_xapi_statement():
statement = {
"actor": {
"mbox": "mailto:[email protected]",
"name": "John Doe",
"objectType": "Agent"
},
"verb": {
"id": "http://adlnet.gov/expapi/verbs/completed",
"display": {"en-US": "completed"}
},
"object": {
"id": "http://example.com/activities/lesson1",
"definition": {
"name": {"en-US": "Lesson 1"},
"description": {"en-US": "The first lesson"}
},
"objectType": "Activity"
},
"timestamp": datetime.now(timezone.utc).isoformat()
}
return statement
# xAPI ステートメントの送信
def send_xapi_statement():
headers = {
"Content-Type": "application/json",
"X-Experience-API-Version": "1.0.3", #これが必要です
**get_auth_header()
}
statement = create_xapi_statement()
response = requests.post(LRS_ENDPOINT, headers=headers, json=statement)
if response.status_code == 200 or response.status_code == 204:
print("xAPI ステートメントが正常に送信されました。")
else:
print(f"エラー: {response.status_code}, {response.text}")
if __name__ == "__main__":
send_xapi_statement()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment