Skip to content

🚀 qq-music-api v2.0.0 #37

@Rain120

Description

@Rain120

Hi 各位使用和 forked 的小伙伴们, 我正在计划着将本项目的版本更新一下,由于本人时间有限,所以恳请各位的支援,欢迎大家 PR 或者在此处👇 讨论。

issue visitor

Goals

  • 接口设计合理性
  • 加强代码可读性
    • 代码风格规范化
  • 加强接口可读性
    • 接口 URL
    • 接口参数
    • 接口返回
  • 加强文档可读性
    • 分类

更多请看👇详情描述

Status

  • User
  • Singer Rain120
    • 相似歌手 similar
    • 歌手信息 desc
  • Song
  • Search
  • MV
  • Album
  • Rank
  • Star
  • Radio
  • Disk
  • Recommend
  • Product
  • 文档

Branch

v2.0.0

Description

v2.0.0大版本修改是为了修复之前 接口设计可读性差 , API 不合理 等众多问题。

我们在旧版本的基础上, 针对性修改。所以对 接口参数, 接口返回, 路由 等方面做了一定的 优化, 我们推荐新用户使用当前时间最新版 v2.0.0

下面我们拿 singer.js 举个 🌰

singer.js

const YRequest = require('../module/y-axios');
const URequest = require('../module/URequest');
const { commonParams } = require('../module/config');
const moment = require('moment');
const { handleXml } = require('../util/xml');

const singerParams = Object.assign(commonParams, {
  g_tk: 1290642389,
  sign: 'zzafsjavizx8rzd4m36c2a7e17c9f884980ef9092cb8809e415',
  format: 'json',
});

// /singe/similar?singermid=0025NhlN2yWrP4
const similarOld = async (ctx, next) => {
  const { singermid: singer_mid } = ctx.query;
  const options = {
    params: {
      format: 'json',
      outCharset: 'utf-8',
      utf8: 1,
      start: 0,
      num: 5,
      singer_mid,
    },
  };

  return await YRequest({
    url: '/v8/fcg-bin/fcg_v8_simsinger.fcg',
    method: 'get',
    options,
    thenable: res => {
      if (!singer_mid) {
        ctx.status = 400;
        ctx.body = {
          message: 'no singermid',
        };
        return;
      }
      Object.assign(ctx, {
        status: 200,
        body: {
          response: res.data,
        },
      });
    },
    catcher: error => {
      console.log('error', error);
      ctx.status = 400;
      ctx.body = { error };
    },
  });
};

// 周杰伦 /singe/similar?id=4558&singermid=0025NhlN2yWrP4
const similar = async (ctx, next) => {
  const { id: singerId, singermid: singerMid, pageSize: num = 5 } = ctx.query;
  console.log('similar error: not support pageSize');
  const data = {
    comm: {
      ct: 24,
      cv: 10000,
    },
    similarSingerList: {
      method: 'GetSimilarSingerList',
      param: {
        singerId: parseInt(singerId, 10),
        singerMid,
        // TODO: QQ 貌似不支持
        num: 5,
      },
      module: 'music.SimilarSingerSvr',
    },
  };

  const params = Object.assign(singerParams, {
    '-': 'getSimilarSingerList1112654390871275',
    data: JSON.stringify(data),
  });

  return await URequest({
    method: 'get',
    params,
    thenable: res => {
      if (!singerMid) {
        ctx.status = 400;
        ctx.body = {
          message: 'no singermid',
        };
        return;
      }
      Object.assign(ctx, {
        status: 200,
        body: {
          data: res.data,
        },
      });
    },
    catcher: error => {
      console.log('error', error);
      ctx.status = 400;
      ctx.body = { error };
    },
  });
};

module.exports = {
  getSimilarSingerOld: similarOld,
  getSimilarSinger: similar,
};

对于先前接入的用户, 我们也做了一些兼容性的接口处理, 主要是 路由的变化 mapping, 具体可以在 routers/map-router.js 👇中体现, 感谢你的关注和使用。

map-router.js

const context = require('.');

module.exports = {
  // INFO: singer Module
  // /getSimilarSinger?singermid=0025NhlN2yWrP4
  '/getSimilarSinger/:singermid?': {
    cb: context.getSimilarSingerOld,
  },
  // /singe/similar?id=4558&singermid=0025NhlN2yWrP4
  '/singer/similar/:id/:singermid/:pageNum?': {
    cb: context.getSimilarSinger,
  },
};

new-router.js

const Router = require('koa-router');
const router = new Router();
const mapRouter = require('./map-router');

Object.keys(mapRouter).forEach(key => {
  if (key && mapRouter[key]) {
    const { method = 'get', cb } = mapRouter[key];
    router[method](key, cb);
  }
});

module.exports = router;

Metadata

Metadata

Assignees

Labels

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions