sagarithm/jiosaavn

GitHub: sagarithm/jiosaavn

一个逆向工程的 JioSaavn 音乐流媒体 TypeScript 客户端库,提供歌曲搜索、元数据获取和音频流解密能力。

Stars: 1 | Forks: 0

# JioSaavn API 逆向工程与客户端规范 一个开源的、逆向工程的客户端规范和库实现,用于内部的 JioSaavn 音乐流媒体 API。本仓库提供了文档、schema 以及一个独立且可直接发布的 TypeScript 客户端,用于获取歌曲、专辑、艺术家、播放列表、歌词,并解密高质量音频流。 ## 📦 安装 使用你偏好的包管理器安装打包好的库: ``` npm install jiosaavn # 或 yarn add jiosaavn # 或 pnpm add jiosaavn # 或 bun add jiosaavn ``` ## 🚀 快速开始 该包同时支持 ES Modules (`import`) 和 CommonJS (`require`),并编译带有高保真类型声明 (`.d.ts`)。 ### 1. 导入客户端 **ES Modules (TypeScript / 现代 JavaScript)** ``` import { JioSaavnAPI } from 'jiosaavn'; const api = new JioSaavnAPI(); ``` **CommonJS (Node.js)** ``` const { JioSaavnAPI } = require('jiosaavn'); const api = new JioSaavnAPI(); ``` ### 2. 客户端初始化 (浏览器 CORS 代理) 由于原始的 JioSaavn API endpoint 会阻止来自 Web 浏览器的 CORS 请求,你应当在实例化时向客户端传递你自己的反向代理 URL(CORS 代理)。如果任何 endpoint 失败,客户端会处理自动故障转移并在代理列表中进行轮询。 ``` const api = new JioSaavnAPI([ '/api-saavn', // Local proxy path 'https://yourproxy.com/api-saavn' // Remote fallback proxy ]); ``` ### 3. 获取详情示例 ``` // Fetch details of a specific song const songs = await api.getSongById('sSongId123'); console.log(songs[0].name); // Decrypt high-quality audio streams const encryptedUrl = songs[0].downloadUrl[4].url; // 320kbps stream ``` ## 🔑 音频流解密算法 JioSaavn 使用 **DES (Data Encryption Standard)** 密码的 **ECB (Electronic Codebook)** 模式,将其媒体 URL 封装在加密字符串(`encrypted_media_url` 或 `media_url` 参数)中。 ### 加密参数 - **算法**:DES-ECB - **密钥**:`38346591` - **初始化向量 (IV)**:`00000000`(在 ECB 模式中未使用,但在空块回退时必需) - **格式编码**:Base64 编码 ### 使用客户端解密媒体流 该库暴露了一个静态的高性能方法 `decryptUrl`,无需设置自定义密码即可轻松解密这些值: ``` import { JioSaavnAPI } from 'jiosaavn'; const encryptedMediaUrl = 'base64_encrypted_string_from_api'; const directAudioUrl = JioSaavnAPI.decryptUrl(encryptedMediaUrl); console.log(directAudioUrl); // Returns: "https://aac.saavncdn.com/999/some_hash_320.mp4" ``` 解密后,你可以替换 URL 中的比特率后缀(例如 `_160`)以获取不同音质的音频流: - `_12` 表示 **12 kbps** - `_48` 表示 **48 kbps** - `_96` 表示 **96 kbps** - `_160` 表示 **160 kbps** - `_320` 表示 **320 kbps**(高质量流) ## 🛰 核心 API 规范 JioSaavn 客户端 API 调用的基础 endpoint 为: `https://www.jiosaavn.com/api.php` 所有请求均为 `GET` 请求,并应指定以下基础查询参数: - `_format`: `json` - `_marker`: `0` - `ctx`: `web6dot0` - `api_version`: `4` ### Endpoint (`__call` 参数) #### 1. 全局自动补全搜索 - **Endpoint**:`autocomplete.get` - **参数**: - `query`:搜索词 (string) - **响应**:扁平的分类对象,包含 `songs`、`albums`、`artists`、`playlists` 和 `topQuery` 数组。 #### 2. 歌曲搜索 - **Endpoint**:`search.getResults` - **参数**: - `q`:搜索查询 (string) - `n`:限制/数量 (number) - `p`:页码 (从 1 开始索引) #### 3. 获取歌曲详情 - **Endpoint**:`song.getDetails` - **参数**: - `pids`:以逗号分隔的歌曲 ID 列表 (string) #### 4. 获取专辑详情 - **Endpoint**:`content.getAlbumDetails` - **参数**: - `albumid`:专辑 ID (string) #### 5. 获取艺术家详情 - **Endpoint**:`artist.getArtistPageDetails` - **参数**: - `artistId`:艺术家 ID (string) #### 6. 获取播放列表详情 - **Endpoint**:`playlist.getDetails` - **参数**: - `listid`:播放列表 ID (string) #### 7. 获取歌词 - **Endpoint**:`lyrics.get` - **参数**: - `lyrics_id`:歌曲 ID (string) ## 🛠 独立客户端的功能 - **零依赖**,除了用于加密的 `node-forge`。 - **强类型**:高度类型化的 schema 模型和响应。 - **故障转移保护**:跨多个代理 endpoint 的轮询逻辑。 - **现代化构建**:开箱即用地支持 ESM、CJS 和 TypeScript 类型。 ## ⚖ 许可证 基于 Apache License 2.0 授权。详情请参阅 [LICENSE](./LICENSE)。
标签:API客户端, GNU通用公共许可证, Node.js, TypeScript, 云资产清单, 安全插件, 流媒体, 自动化攻击, 逆向工程, 音频解密