123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- /*
- * @File : audiomack.js
- * @Author : jade
- * @Date : 2024/1/31 15:56
- * @Email : jadehh@1ive.com
- * @Software : Samples
- * @Desc : 音乐之声
- */
- import {Spider} from "./spider.js";
- import {BookShort} from "../lib/book.js";
- import {Crypto} from "../lib/cat.js";
- function u(e) {
- (this._parameters = {}), this._loadParameters(e || {});
- }
- u.prototype = {
- _loadParameters: function (e) {
- e instanceof Array ? this._loadParametersFromArray(e) : "object" == typeof e && this._loadParametersFromObject(e);
- }, _loadParametersFromArray: function (e) {
- var n;
- for (n = 0; n < e.length; n++) this._loadParametersFromObject(e[n]);
- }, _loadParametersFromObject: function (e) {
- var n;
- for (n in e) if (e.hasOwnProperty(n)) {
- var r = this._getStringFromParameter(e[n]);
- this._loadParameterValue(n, r);
- }
- }, _loadParameterValue: function (e, n) {
- var r;
- if (n instanceof Array) {
- for (r = 0; r < n.length; r++) {
- var i = this._getStringFromParameter(n[r]);
- this._addParameter(e, i);
- }
- 0 == n.length && this._addParameter(e, "");
- } else this._addParameter(e, n);
- }, _getStringFromParameter: function (e) {
- var n = e || "";
- try {
- ("number" == typeof e || "boolean" == typeof e) && (n = e.toString());
- } catch (e) {
- }
- return n;
- }, _addParameter: function (e, n) {
- this._parameters[e] || (this._parameters[e] = []), this._parameters[e].push(n);
- }, get: function () {
- return this._parameters;
- },
- };
- function _decode(e) {
- return e ? decodeURIComponent(e) : "";
- }
- function getNormalizedParams(parameters) {
- const sortedKeys = [];
- const normalizedParameters = [];
- for (let e in parameters) {
- sortedKeys.push(_encode(e));
- }
- sortedKeys.sort();
- for (let idx = 0; idx < sortedKeys.length; idx++) {
- const e = sortedKeys[idx];
- var n, r, i = _decode(e), a = parameters[i];
- for (a.sort(), n = 0; n < a.length; n++) (r = _encode(a[n])), normalizedParameters.push(e + "=" + r);
- }
- return normalizedParameters.join("&");
- }
- function nonce(e = 10) {
- let n = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", r = "";
- for (let i = 0; i < e; i++) r += n.charAt(Math.floor(Math.random() * n.length));
- return r;
- }
- function _encode(e) {
- return e ? encodeURIComponent(e)
- .replace(/[!'()]/g, escape)
- .replace(/\*/g, "%2A") : "";
- }
- function getSignature(method, urlPath, params, secret = "f3ac5b086f3eab260520d8e3049561e6") {
- urlPath = urlPath.split("?")[0];
- urlPath = urlPath.startsWith("http") ? urlPath : "https://api.audiomack.com/v1" + urlPath;
- const r = new u(params).get();
- const httpMethod = method.toUpperCase();
- const normdParams = getNormalizedParams(r);
- const l = _encode(httpMethod) + "&" + _encode(urlPath) + "&" + _encode(normdParams);
- return Crypto.HmacSHA1(l, secret + "&").toString(Crypto.enc.Base64);
- }
- class AudioMackSpider extends Spider {
- constructor() {
- super();
- this.siteUrl = "https://api.audiomack.com/v1";
- }
- getName() {
- return "🎵┃音声┃🎵"
- }
- getAppName() {
- return "音声"
- }
- getJSName() {
- return "audiomack"
- }
- getType() {
- return 10
- }
- async parseVodShortListFromJson(obj) {
- let books = []
- for (const data of obj["results"]["playlists"]) {
- let bookShort = new BookShort()
- bookShort.book_id = data["id"]
- bookShort.book_pic = data["image"]
- bookShort.book_name = data["title"]
- bookShort.book_remarks = data["description"]
- books.push(bookShort)
- }
- return books
- }
- async setClasses() {
- this.classes = [{"type_name": "推荐榜单", "type_id": "最近更新"}]
- const genres = [{
- title: "All Genres", url_slug: "null",
- }, {
- title: "Afrosounds", url_slug: "afrobeats",
- }, {
- title: "Hip-Hop/Rap", url_slug: "rap",
- }, {
- title: "Latin", url_slug: "latin",
- }, {
- title: "Caribbean", url_slug: "caribbean",
- }, {
- title: "Pop", url_slug: "pop",
- }, {
- title: "R&B", url_slug: "rb",
- }, {
- title: "Gospel", url_slug: "gospel",
- }, {
- title: "Electronic", url_slug: "electronic",
- }, {
- title: "Rock", url_slug: "rock",
- }, {
- title: "Punjabi", url_slug: "punjabi",
- }, {
- title: "Country", url_slug: "country",
- }, {
- title: "Instrumental", url_slug: "instrumental",
- }, {
- title: "Podcast", url_slug: "podcast",
- },];
- for (const genre of genres) {
- this.classes.push(this.getTypeDic(genre["title"], genre["url_slug"]))
- }
- }
- /* 推荐歌单
- * */
- async setHomeVod() {
- let tag = {id: "34", title: "What's New", url_slug: "whats-new"};
- const params = {
- featured: "yes",
- limit: 20,
- oauth_consumer_key: "audiomack-js",
- oauth_nonce: nonce(32),
- oauth_signature_method: "HMAC-SHA1",
- oauth_timestamp: Math.round(Date.now() / 1e3),
- oauth_version: "1.0",
- page: 1,
- slug: tag.url_slug,
- };
- const oauth_signature = getSignature("GET", "/playlist/categories", params);
- let url = this.siteUrl + "/playlist/categories"
- let content = await this.fetch(url, Object.assign(Object.assign({}, params), {oauth_signature}), this.getHeader());
- this.homeVodList = await this.parseVodShortListFromJson(JSON.parse(content))
- }
- async setCategory(tid, pg, filter, extend) {
- let partialUrl;
- if (tid === "null"){
- partialUrl = `/music/page/${pg}`;
- }else{
- partialUrl = `/music/${tid}/page/${pg}`;
- }
- const url = `https://api.audiomack.com/v1${partialUrl}`;
- const params = {
- oauth_consumer_key: "audiomack-js",
- oauth_nonce: nonce(32),
- oauth_signature_method: "HMAC-SHA1",
- oauth_timestamp: Math.round(Date.now() / 1e3),
- oauth_version: "1.0",
- type: "song",
- };
- const oauth_signature = getSignature("GET", partialUrl, params);
- const results = await this.fetch(url, Object.assign(Object.assign({}, params), {oauth_signature}),this.getHeader())
- let x = 0
- }
- }
- let spider = new AudioMackSpider()
- async function init(cfg) {
- await spider.init(cfg)
- }
- async function home(filter) {
- return await spider.home(filter)
- }
- async function homeVod() {
- return await spider.homeVod()
- }
- async function category(tid, pg, filter, extend) {
- return await spider.category(tid, pg, filter, extend)
- }
- async function detail(id) {
- return await spider.detail(id)
- }
- async function play(flag, id, flags) {
- return await spider.play(flag, id, flags)
- }
- async function search(wd, quick) {
- return await spider.search(wd, quick)
- }
- async function proxy(segments, headers) {
- return await spider.proxy(segments, headers)
- }
- export function __jsEvalReturn() {
- return {
- init: init,
- home: home,
- homeVod: homeVod,
- category: category,
- detail: detail,
- play: play,
- search: search,
- proxy: proxy
- };
- }
- export {spider}
|