Blue Archive API ドキュメント
v1.0
🚀 クイックスタート
📡 ベースURL
https://bluearchive-api.skyia.jp⚡ 簡単な例
GET /api/students📋 概要
Blue Archive API は、ブルーアーカイブの生徒データにアクセスするための RESTful API です。 生徒の基本情報、戦闘データ、地形適応度、武器情報などを簡単に取得できます。
🌐 エンドポイント
GET/api/students
全生徒データを取得します(パフォーマンス向上のためキャッシュ済み)
📝クエリパラメータ(オプション)
| パラメータ | 型 | 説明 | 例 |
|---|---|---|---|
| limit | number | 取得する生徒数の制限 | ?limit=10 |
| school | string | 学校で絞り込み | ?school=ゲヘナ学園 |
| rarity | number | レア度で絞り込み | ?rarity=3 |
✅成功レスポンス (200 OK)
{
"message": "success",
"total": 150,
"count": 10,
"data": [
{
"id": "B5F50C9O",
"name": "アカネ(バニーガール)",
"rarity": 3,
"weapon": {
"type": "HG",
"cover": false
},
"role": {
"type": "SPECIAL",
"class": "アタッカー",
"position": "BACK"
},
"school": "ミレニアムサイエンススクール",
"combat": {
"attackType": "神秘",
"defenseType": "重装甲"
},
"terrainAdaptation": {
"city": "B",
"outdoor": "D",
"indoor": "S"
}
}
// ... 他の生徒データ
]
}❌エラーレスポンス
429 Too Many Requests
{ "error": "Rate limit exceeded", "retryAfter": 60 }500 Internal Server Error
{ "error": "Internal server error" }GET/api/students/{id}
指定IDの生徒データを取得します
パスパラメータ
id - 生徒の一意識別子(例: B5F50C9O)✅成功レスポンス (200 OK)
{
"message": "success",
"data": {
"id": "B5F50C9O",
"name": "アカネ(バニーガール)",
// ... 完全な生徒データ
}
}❌エラーレスポンス (404 Not Found)
{ "error": "Student not found" }📊 データ形式・スキーマ
🏗️Student オブジェクト
{
"id": string, // 生徒ID
"name": string, // 生徒名
"rarity": number, // レア度 (1-3)
"weapon": {
"type": string, // 武器タイプ
"cover": boolean // カバー可否
},
"role": {
"type": string, // STRIKER/SPECIAL
"class": string, // 役割クラス
"position": string // FRONT/MIDDLE/BACK
},
"school": string, // 所属学校
"combat": {
"attackType": string, // 攻撃タイプ
"defenseType": string // 防御タイプ
},
"terrainAdaptation": {
"city": string, // 市街地適応度
"outdoor": string, // 屋外適応度
"indoor": string // 屋内適応度
}
}📤API レスポンス構造
// GET /api/students
{
"message": string, // ステータスメッセージ
"total": number, // 総データ数
"count": number, // 返却データ数
"data": Student[] // 生徒データ配列
}
// GET /api/students/[id]
{
"message": string, // ステータスメッセージ
"data": Student // 単一生徒データ
}⭐レア度 (rarity)
★3
値: 3
★2
値: 2
★1
値: 1
🔫武器タイプ (weapon.type)
HG
AR
SMG
SR
SG
GL
RL
RG
MG
MT
FT
HG: ハンドガン, AR: アサルトライフル, SMG: サブマシンガン, SR: スナイパーライフル, SG: ショットガン, GL: グレネードランチャー, RL: ロケットランチャー, RG: レイルガン, MG: マシンガン, MT: 迫撃砲, FT: 火炎放射器
⚔️攻撃・防御タイプ
攻撃タイプ
神秘爆発貫通振動分解
防御タイプ
重装甲軽装備特殊装甲弾力装甲複合装甲
🌍地形適応度
S最高 - 120%効率
A優秀 - 100%効率
B普通 - 80%効率
C低い - 60%効率
D最低 - 40%効率
💻 使用例・実装ガイド
⚡JavaScript / TypeScript
基本的な使用例
// 全生徒データを取得
const fetchStudents = async () => {
try {
const response = await fetch('/api/students');
const result = await response.json();
if (result.message === 'success') {
console.log(`${result.total}名の生徒データを取得`);
return result.data;
}
} catch (error) {
console.error('データ取得エラー:', error);
}
};
// 特定の生徒を検索
const findStudent = async (id) => {
const response = await fetch(`/api/students/${id}`);
const result = await response.json();
return result.data;
};
// 学校で絞り込み
const getStudentsBySchool = async (school) => {
const response = await fetch(`/api/students?school=${encodeURIComponent(school)}`);
return (await response.json()).data;
};React Hook の実装例
import { useState, useEffect } from 'react';
const useStudents = (filters = {}) => {
const [students, setStudents] = useState([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
const fetchData = async () => {
setLoading(true);
try {
const params = new URLSearchParams(filters);
const response = await fetch(`/api/students?${params}`);
const result = await response.json();
setStudents(result.data);
} catch (err) {
setError(err.message);
} finally {
setLoading(false);
}
};
fetchData();
}, [JSON.stringify(filters)]);
return { students, loading, error };
};🐍Python
import requests
import json
class BlueArchiveAPI:
BASE_URL = "https://bluearchive-api.skyia.jp/api"
def __init__(self):
self.session = requests.Session()
def get_students(self, **filters):
"""全生徒データまたはフィルタリング結果を取得"""
response = self.session.get(f"{self.BASE_URL}/students", params=filters)
response.raise_for_status()
return response.json()
def get_student(self, student_id):
"""特定の生徒データを取得"""
response = self.session.get(f"{self.BASE_URL}/students/{student_id}")
response.raise_for_status()
return response.json()
def search_by_rarity(self, rarity):
"""レア度で検索"""
return self.get_students(rarity=rarity)
def search_by_school(self, school):
"""学校で検索"""
return self.get_students(school=school)
# 使用例
api = BlueArchiveAPI()
# 全生徒取得
all_students = api.get_students()
print(f"総生徒数: {all_students['total']}")
# ★3生徒のみ取得
ssr_students = api.search_by_rarity(3)
print(f"★3生徒数: {len(ssr_students['data'])}")
# 特定学校の生徒取得
gehenna_students = api.search_by_school("ゲヘナ学園")
print(f"ゲヘナ学園生徒数: {len(gehenna_students['data'])}")📡cURL コマンド例
基本的なGETリクエスト
# 全生徒データを取得
curl -X GET "https://bluearchive-api.skyia.jp/api/students" \
-H "Accept: application/json"
# 特定生徒を取得
curl -X GET "https://bluearchive-api.skyia.jp/api/students/B5F50C9O" \
-H "Accept: application/json"
# フィルタリングして取得
curl -X GET "https://bluearchive-api.skyia.jp/api/students?rarity=3&limit=10" \
-H "Accept: application/json"JavaScript 実装例
// 全生徒データを取得(ページネーション対応)
const fetchStudents = async (page = 1, limit = 20) => {
try {
// 例: /api/students?page=1&limit=20
const response = await fetch('/api/students?page=' + page + '&limit=' + limit);
const result = await response.json();
if (result.message === 'success') {
console.log(result.total + '名の生徒データを取得 (count=' + result.count + ')');
return result.data;
}
} catch (error) {
console.error('データ取得エラー:', error);
}
};
// 特定の生徒を検索
const findStudent = async (id) => {
const response = await fetch('/api/students/' + id);
const result = await response.json();
return result.data;
};
// 学校で絞り込み
const getStudentsBySchool = async (school, page = 1, limit = 20) => {
const response = await fetch('/api/students?school=' + encodeURIComponent(school) + '&page=' + page + '&limit=' + limit);
return (await response.json()).data;
};制限内容
- • GET リクエスト: 1分間に100リクエスト
- • 同一IP: 1時間に1000リクエスト
制限超過時
429 Too Many Requests レスポンスが返され、
Retry-After ヘッダーで待機時間が通知されます。🔐認証・権限
パブリックアクセス
- • GET /api/students - 認証不要
- • GET /api/students/[id] - 認証不要
管理者系エンドポイント
- • PUT /api/students/[id] - APIキー必須
- • DELETE /api/students/[id] - APIキー必須
❓ FAQ・トラブルシューティング
Q: データが取得できません
A: 以下を確認してください:
- URLが正しいか(
/api/students) - ネットワーク接続状況
- レート制限に達していないか
- ブラウザの開発者ツールでエラーメッセージを確認
Q: 特定の生徒が見つからない
A: 生徒IDが正しいか確認してください。IDは英数字の組み合わせです(例: B5F50C9O)。全生徒リストから正確なIDを確認できます。
Q: フィルタリングが機能しない
A: クエリパラメータの形式を確認してください:
- 学校名: 完全一致で指定(例:
?school=ゲヘナ学園) - レア度: 1-3の数値(例:
?rarity=3) - 日本語文字のURLエンコードが必要な場合があります