信息导出格式
Annil
提供了分享 Token
的创建功能,但这只是资源分享的基石。
对于音频分享而言,我们需要的不只是音频文件的集合,还需要包含顺序、元数据等在内的一系列信息。而这一切需求汇总到一起,信息导出格式便应运而生。
播放列表导出格式
type ExportedPlaylist = ExportedPlaylistInfo & ExportedPlaylistMetadata & ExportedPlaylistToken;
interface ExportedPlaylistInfo {
// 播放列表名称
name: string;
// 播放列表简介
description: string;
// 播放列表封面
cover: PlaylistCover;
// 按顺序存放播放列表中的所有歌曲
songs: ExportedTrackList[];
}
interface ExportedPlaylistMetadata {
// 存放播放列表中的元数据
// 使用 AlbumInfo,不含 artists 和 tags 信息
metadata: Record<AlbumIdentifier, AlbumInfo>;
}
interface ExportedPlaylistToken {
// 实际访问音频文件的 Token
tokens: ExportedToken[];
}
interface ExportedTrackList extends DiscIdentifier {
tracks: number[];
}
interface ExportedToken {
server: string;
token: string;
}
样例
{
"name": "Example",
"description": "Example description",
"cover": {
"album_id": "e54fdcc4-662e-4e10-b91a-73984ce8248e",
"disc_id": 1
},
"songs": [
{
"album_id": "e54fdcc4-662e-4e10-b91a-73984ce8248e",
"disc_id": 1,
"tracks": [1, 2, 3]
},
{
"album_id": "09174545-a173-44fe-b489-0d078a2023c2",
"disc_id": 1,
"tracks": [1]
}
],
"metadata": {
"e54fdcc4-662e-4e10-b91a-73984ce8248e": {
"album_id": "e54fdcc4-662e-4e10-b91a-73984ce8248e",
"title": "僕は存在していなかった",
"edition": null,
"catalog": "SRCL-9520",
"artist": "22/7",
"date": "2017-09-20",
"type": "normal",
"discs": [
{
"title": "僕は存在していなかった",
"artist": "22/7",
"catalog": "SRCL-9520",
"type": "normal",
"tracks": [
{
"title": "僕は存在していなかった",
"artist": "22/7",
"type": "normal"
},
{
"title": "地下鉄抵抗主義",
"artist": "22/7",
"type": "normal"
},
{
"title": "11人が集まった理由",
"artist": "22/7",
"type": "normal"
},
{
"title": "僕は存在していなかった -off vocal ver.-",
"artist": "22/7",
"type": "instrumental"
},
{
"title": "地下鉄抵抗主義 -off vocal ver.-",
"artist": "22/7",
"type": "instrumental",
"tags": []
},
{
"title": "11人が集まった理由 -off vocal ver.-",
"artist": "22/7",
"type": "instrumental"
}
]
}
]
},
"09174545-a173-44fe-b489-0d078a2023c2": {
"album_id": "09174545-a173-44fe-b489-0d078a2023c2",
"title": "ハナノイロ",
"edition": null,
"catalog": "LACM-4796",
"artist": "nano.RIPE",
"date": "2011-04-20",
"type": "normal",
"discs": [
{
"title": "ハナノイロ",
"artist": "nano.RIPE",
"catalog": "LACM-4796",
"type": "normal",
"tracks": [
{
"title": "ハナノイロ",
"artist": "nano.RIPE",
"type": "normal"
},
{
"title": "バーチャルボーイ",
"artist": "nano.RIPE",
"type": "normal"
},
{
"title": "花残り月",
"artist": "nano.RIPE",
"type": "normal"
}
]
}
]
}
},
"tokens": [
{
"server": "https://site-url",
"token": "jwt token here"
},
{
"server": "https://site2-url",
"token": "xxx"
}
]
}
注:客户端需要根据 JWT Body 中的 audios
为每个专辑选择可用的 Anni Library 服务器及 Token 。