About

ミリシタのライブスコア計算に関わるAPIを提供します。
試験運用中です。予告なく公開を停止することがあります。

注意事項

  • 本 API の利用は基本的に自由ですが、営利目的の利用はご遠慮ください。
  • 本 API を利用したWebサービスを運営する場合には参照元 (megmeg.work) の明記をお願いします (非公開の個人利用はこれに限りません)。
  • 短時間に多数のリクエストが行われた場合、 429 Too Many Requests を返します。また、高頻度・高負荷のリクエストが続く場合にはアクセスを制限することがあります。あらかじめご了承ください。
  • ユニットメンバー指定時に利用するアイドルカードのIDはmatsurihi.me様準拠となっています。

API エンドポイント一覧

ベースの URL は https://api.megmeg.work/mltd/v1/ となります。

楽曲関連API

GET song/

楽曲リストを取得します。
https://api.megmeg.work/mltd/v1/song/

クエリパラメータ

  • SongId (Integer) 任意:楽曲id
    指定Idの楽曲情報を返します。
    指定がない場合には、全曲分の情報を配列で返します。
  • IncrementalUpdate (true/false) 任意:差分データの取得 :2019/01/27追加
    指定Idより後ろの楽曲情報のみを配列で返します。
    指定がない場合falseとなります。
  • prettyPrint (true/false) 任意:出力JSONの整形
    指定がない場合trueとなります。

レスポンス

  • SongId (Integer) :楽曲id
  • SongName (String) :楽曲名
  • SongType (String) :楽曲属性
  • Lvs (Integer[]) :楽曲Lv
    [0]: 2M, [1]: 2M+, [2]: 4M, [3]: 6M, [4]: MM
  • Length (Integer) :楽曲長さ[sec]
    楽曲開始から『FULL COMBO』表示がされるまでの時間です。
  • AppealLength (Integer) :スペシャルアピール長さ[sec]

<input type="button" value="楽曲情報取得" onClick="GetSongData()">
<div id="SongData"></div>
<script>
function GetSongData(){
	$.ajax({
		type : 'GET', 
		data : {
			"SongId":1,
			"prettyPrint":true
		},
		dataType: 'json',
		url : 'https://api.megmeg.work/mltd/v1/song/'
	}).then(
		function (data) {
			var SongData = document.getElementById('SongData');
			SongData.innerHTML =  JSON.stringify(data);
		},
		function () {
			alert("読み込み失敗");
		}
	);
}
</script>
											

スコア計算関連API

GET score/singleunit/

ライブのプレイシミュレーションを行いスコア計算の結果を返します。
大量のユニットのスコア計算を行う場合は、次項の最大スコア計算APIをご利用ください。
https://api.megmeg.work/mltd/v1/score/singleunit/

クエリパラメータ

  • SongId (Integer) 必須 :楽曲id
  • Course (Integer) 必須 :楽曲難度
    • 0:2M
    • 1:2M+
    • 2:4M
    • 3:6M
    • 4:MM
  • AppealValue (Integer) 必須 :総アピール値
  • UnitIds (Integer[5]) 必須 :ユニット5名のID
    最初のIDがセンターとして扱われます。
    アピール値・ライフ計算は行わないため、センター効果は発動率に関する効果のみ反映されます。
  • GuestId (Integer) 任意 :ゲストID
    発動率に関するセンター効果のみ反映されます。
  • SkillLvs (Integer[5]) 任意 :ユニット5名のスキルレベル
    Range: 1~10
    指定がない場合Lv10として計算されます。
  • BreakNort (Integer) 任意 :区切りノーツ番号
    Range: 1~
    区切りノーツを境界として前半後半のスコアが別途計算されます。
    指定がない場合はスペシャルアピールノーツが区切りノーツに設定されます。
  • BreakNortOption (Integer) 任意 :区切りノーツの境界設定
    • 0:区切りノーツの直前までを前半スコアとします。
    • 1:区切りノーツの直後までを前半スコアとします。

    指定がない場合は直後("1")として計算されます。
  • TryNumber (Integer) 任意 :試行回数
    Range: 1~100000
    プレイシミュレーションを行う回数です。
  • p (Float[0-6]) 任意 :実現確率
    Range: 0~100
    試行回数n回のシミュレーション計算における、上位(n*p%)番目のスコアを計算することができます。
    表示する実現確率(p%)は6つまで指定可能です。
  • RawData (Integer) 任意 :生データの出力
    試行回数分全てのスコア計算結果を受け取ることができます。指定がない場合には結果を受け取りません。
    • 0:結果を受け取らない
    • 1:最終スコア(Total)のみ受け取る
    • 2:BreakNortを境界とした前半(1stHalf)・後半(2ndHalf)スコアのみ受け取る
    • 3:全て受け取る
  • Minimize (true/false) 任意 :出力データの制限
    出力するデータを総スコア情報のみに絞ります (生データも出力しません) 。
    指定がない場合falseとなります。
  • prettyPrint (true/false) 任意 :出力データ(JSON)の整形
    指定がない場合trueとなります。

レスポンス

  • SongInfo:楽曲情報
    • Name (String) :楽曲名
    • Type (String) :楽曲属性
    • Course (String) :楽曲難度
    • Lv (Integer) :楽曲Lv
    • TotalNorts (Integer) :総ノーツ数
    • BreakNort (Integer) :区切りノーツ番号
    • Length (Integer) :楽曲長さ[sec]
      楽曲開始から『FULL COMBO』表示がされるまでの時間です。
    • AppealLength (Integer) :スペシャルアピール長さ[sec]
    • parameter (Integer[]) :スコア計算用の各種パラメータ
      • base:基本スコア
      • s:基礎パラメータ
      • c:基礎パラメータ
      • Nw:重み付きノーツ数
      • BurstNort:スペシャルアピールノーツ番号
      • LnNortsNum:ロングノーツ本数
      • W:ノーツ倍率和
      • T:ロングノーツの総ホールド時間 (Nw = W + 2T)
      • 詳細は、スコア計算式を参照
  • ScoreInfo:スコア情報
    • Total :総スコア情報
      楽曲の最終スコアに関する情報が返されます。
    • 1stHalf :前半スコア情報
      区切りノーツを境界として前半部分のスコアに関する情報が返されます。
    • 2ndHalf :後半スコア情報
      区切りノーツを境界として後半部分のスコアに関する情報が返されます。
      • Min (Integer) :理論最低スコア
        スキルが全て発動しなかった場合のスコアです。
      • Ideal (Integer) :理論最大スコア
        スキルが全て発動した場合のスコアです。
      • p (Integer[]) :実現確率ごとのスコア
        クエリでpを指定していた場合に値を受け取ることができます。
      • RawData (Integer[]) :生データ
        クエリでRawDataを受け取る設定にしていた場合に試行回数分全てのスコア計算結果を受け取ることができます。
        データはそれぞれ別個に昇順ソートされた状態で出力されます。
  • UnitInfo:ユニット情報
    • Guest :ゲストアイドル情報
    • Main1・Main2・Main3・Main4・Main5 :メインアイドル情報
      • Id (Integer) :カードID
      • Name (String) :カード名
      • CenterEffectName (String) :センター効果名
      • CenterEffectDescription (String) :センター効果詳細
      • SkillEffectName (String) :スキル効果名
      • SkillEffectDescription (String) :スキル効果詳細
        スキルレベル・センター効果が反映された値が出力されます。
      • Probability (Integer) :スキルの発動確率
      • MaxActNum (Integer) :スキルの最大発動回数
      • TotalSimulatedActNum (Integer) :シミュレーション全体におけるスキルの発動回数
        スキル発動の総抽選回数は、試行回数×最大発動回数 [回] になります。

<input type="button" value="スコア計算" onClick="GetScoreData()">
<div id="ScoreData"></div>
<script>
function GetScoreData(){
	var guest_id = 256;
	var unit_ids = Array(286, 250, 391, 269, 178);
	var skill_lvs = Array(5, 6, 7, 8, 9);
	var prob = Array(1, 10, 20, 50); //1%, 10%, 20%, 50%スコアの計算

	$.ajax({
		type : 'GET', 
		data : {
			"SongId":1,
			"Course": 4,
			"AppealValue":320000,
			"UnitIds": unit_ids,
			"GuestId": guest_id,
			"SkillLvs": skill_lvs,
			"TryNumber": 100,
			"BreakNort": 100,
			"p": prob,
			"RawData": 3,
			"prettyPrint":true
		},
		dataType: 'json',
		url : 'https://api.megmeg.work/mltd/v1/score/singleunit/'
	})
	.then(
		function (data) {
			var ScoreData = document.getElementById('ScoreData');
			ScoreData.innerHTML = JSON.stringify(data);
		},
		function () {
			alert("読み込み失敗");
		}
	);
}
</script>
											

POST score/multiunit/

複数ユニットの理論最大スコアを計算し返します。
https://api.megmeg.work/mltd/v1/score/multiunit/

クエリパラメータ

  • SongId (Integer) 必須 :楽曲id
  • Course (Integer) 必須 :楽曲難度
    • 0:2M
    • 1:2M+
    • 2:4M
    • 3:6M
    • 4:MM
  • UnitList (Integer[[]]) 必須 :ゲスト+ユニット5名のID+アピール値
    • UnitListは以下の構成の2次元配列で値を渡してください。
      UnitList = [unit A, unit B, unit C, unit D, unit E,....]
      unit X = [guest ID, main ID1, main ID2, main ID3, main ID4, main ID5, AppealValue]
      main ID1がセンターアイドルになります。
  • prettyPrint (true/false) 任意:出力JSONの整形
    指定がない場合trueとなります。

レスポンス

  • ScoreList (Integer[]) :計算結果

<input type="button" value="スコア計算" onClick="GetMultiunitScoreData()">
<div id="MultiunitScoreData"></div>
<script>
function GetMultiunitScoreData(){
	var unit_info_1 = Array(256, 286, 250, 391, 269, 178, 300000);
	var unit_info_2 = Array(256, 286, 250, 391, 269, 178, 310000);
	var unit_info_3 = Array(256, 286, 250, 391, 269, 178, 320000);
	var unit_info_4 = Array(256, 286, 250, 391, 269, 178, 330000);
	var unit_info_5 = Array(256, 286, 250, 391, 269, 178, 340000);
	var unit_info_6 = Array(256, 286, 250, 391, 269, 178, 350000);
	
	var unit_list = Array(unit_info_1, unit_info_2, unit_info_3, unit_info_4, unit_info_5, unit_info_6);
	
	$.ajax({
			type : 'POST', 
			data : {
				"SongId": 1,
				"Course": 4,
				"UnitList": unit_list,
				"prettyPrint": true
			},
			dataType: 'json',
			url : 'https://api.megmeg.work/mltd/v1/score/multiunit/'
	})
	.then(
		function (data) {
			var MultiunitScoreData = document.getElementById('MultiunitScoreData');
			MultiunitScoreData.innerHTML = JSON.stringify(data);
		},
		function () {
			alert("読み込み失敗");
		}
	);
}
</script>