生徒の読書レベルに合う本を選定
読書レベルは、長い書籍一覧を検討しやすい候補に絞るために使うと役立ちます。このツールは、生徒の学年相当の読書レベルと各書籍に付けられたレベルを比較し、指定範囲内の題名だけを返します。初期設定では上下1学年を含めますが、支援を重視する場合や難しい本に挑戦する場合に合わせ、下側と上側を別々に調整できます。入力順は維持されるため、授業計画、図書リスト、読書面談にそのまま活用できます。
無料で実行
検討しやすい候補一覧を作成します
まず、生徒の現在の学年相当読書レベルと、同じ評価方式または十分に比較できる資料でレベル付けされた書籍一覧を用意します。各書籍には題名と数値の読書レベルが必要です。出版社によって文章の難しさの推定方法が異なる場合があるため、出典の一貫性は重要です。このツールはレベルを推測したり外部から検索したりせず、入力された値だけを評価します。初期設定では、生徒のレベルより1学年下から1学年上までを両端を含めて採用します。入力順を保つので、あらかじめ主題、在庫、好みなどで並べることもできます。計算範囲外の本は結果から除外されます。該当する本がなくても正常な結果であり、別の本を追加するか範囲を広げる必要があることを示します。計算の失敗を意味するものではありません。
支援側と挑戦側を個別に調整します
下側と上側の幅は、range_belowとrange_aboveで別々に変更できます。適切な選書範囲は、一つの測定値を中心に常に左右対称になるとは限りません。自力で読む活動では下側を広めにし、上限を近くする方法があります。大人が支援する読書では上側を広げられます。値を0にすると、その側の境界は生徒のレベルと一致します。下限は学年0未満にはなりません。これらの設定は診断ではなく、候補を選ぶ補助としてお使いください。学年相当値は文章難度の一部を要約しますが、背景知識、意欲、文字解読の特性、言語経験、興味までは表しません。抽出後には内容、目的、形式、利用できる支援も確認してください。活動に役立つ選択肢を示しながら、教育者の判断と生徒本人の希望を尊重できる範囲が適切です。
結果を読み取り、再利用します
結果には、生徒のレベル、実際に使った最小値と最大値、該当数、選ばれた書籍データが表示されます。返された各題名は、入力されたレベルが最小値以上かつ最大値以下なので、選定理由を明確に説明できます。処理は決定論的で、同じ入力からは必ず同じ結果が得られます。外部カタログへの照会や、情報追加のための一覧送信も行いません。そのため、学校向けツール、図書館業務、再現可能なデータ処理に利用できます。活動ごとに許容幅が異なる場合は、作成した一覧と範囲を一緒に保存すると記録になります。情報源で書籍レベルが更新された際は、入力データを直して再実行してください。結果にない題名は、文学的価値や生徒の能力を否定されたのではなく、数値が今回の範囲外だっただけです。最終選定では、アクセシビリティ、年齢、学習目標、興味も考慮してください。
活用例
自力読み用の本棚を準備します
生徒が主題や形式を選ぶ前に、教室の蔵書を無理のない数値範囲で絞り込みます。
支援付き読書を計画します
指導や対話で支えられる場合は上限を広げ、少し難しい本も候補に含めます。
図書館の推薦一覧を確認します
選定済みの順序を保ったまま、長い一覧をレベルに合う候補へ絞ります。
よくある質問
初期設定ではどの範囲が使われますか?
生徒の学年相当レベルより1学年下から1学年上までの本を、両端を含めて選びます。
下側と上側を異なる幅にできますか?
はい。活動の支援、目的、難しさに応じてrange_belowとrange_aboveを個別に設定できます。
書籍の読書レベルを検索しますか?
いいえ。リクエストに含まれる題名とレベルだけを抽出し、外部データベースは検索しません。
範囲内の本がない場合はどうなりますか?
matched_booksが空でmatched_countが0の結果になります。範囲を調整するか、別の一覧をご用意ください。
学年相当値が合えば完全な推薦になりますか?
いいえ。数値による一次選定です。興味、内容、利用しやすさ、言語経験、指導目的、支援もご検討ください。
APIリクエストの料金はいくらですか?
APIリクエスト1件は$0.002です。ブラウザー版もネット検索なしで同じ決定論的処理を行います。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/edu/reading-level-book-match \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"student_level":4.5,"books":[{"title":"The Wild Robot","reading_level":4.2},{"title":"Charlotte'\''s Web","reading_level":4.4},{"title":"The Giver","reading_level":6.8}]}'const res = await fetch("https://api.kit.forhosting.com/edu/reading-level-book-match", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"student_level": 4.5,
"books": [
{
"title": "The Wild Robot",
"reading_level": 4.2
},
{
"title": "Charlotte's Web",
"reading_level": 4.4
},
{
"title": "The Giver",
"reading_level": 6.8
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/edu/reading-level-book-match",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"student_level": 4.5,
"books": [
{
"title": "The Wild Robot",
"reading_level": 4.2
},
{
"title": "Charlotte's Web",
"reading_level": 4.4
},
{
"title": "The Giver",
"reading_level": 6.8
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/edu/reading-level-book-match", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"student_level":4.5,"books":[{"title":"The Wild Robot","reading_level":4.2},{"title":"Charlotte\'s Web","reading_level":4.4},{"title":"The Giver","reading_level":6.8}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"student_level":4.5,"books":[{"title":"The Wild Robot","reading_level":4.2},{"title":"Charlotte's Web","reading_level":4.4},{"title":"The Giver","reading_level":6.8}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/edu/reading-level-book-match", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"student_level": 4.5,
"books": [
{
"title": "The Wild Robot",
"reading_level": 4.2
},
{
"title": "Charlotte's Web",
"reading_level": 4.4
},
{
"title": "The Giver",
"reading_level": 6.8
}
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "edu.reading_level_book_match",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |