diff --git a/package.json b/package.json index fd298e0..54264fa 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,6 @@ "mobx": "^6.0.4", "mobx-react-lite": "^3.1.6", "qrcode": "^1.4.1", - "random-useragent": "^0.3.1", "react": "^16.9.0", "react-dom": "^16.9.0", "react-router-dom": "^5.0.0", diff --git a/src/main/index.ts b/src/main/index.ts index 661ff13..cd75207 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -1,8 +1,7 @@ -import { app, BrowserWindow, Menu, session, shell } from 'electron'; +import { app, BrowserWindow, Menu, shell } from 'electron'; import installer, { REACT_DEVELOPER_TOOLS } from 'electron-devtools-installer'; import * as windowStateKeeper from 'electron-window-state'; import * as path from 'path'; -import * as agent from 'random-useragent'; import * as url from 'url'; import ipcMainSets from './ipcMainSets'; @@ -335,27 +334,6 @@ const createWindow = async () => { win.focus(); } catch (ex) {} }); - // cors - const ieaseUri = 'https://music.163.com'; - win.webContents.session.webRequest.onBeforeSendHeaders( - { - urls: [`${ieaseUri}/*`] - }, - async (details, callback) => { - const cookie = await session.defaultSession.cookies.get({ url: ieaseUri }); - callback({ - requestHeaders: { - ...details.requestHeaders, - Connection: 'keep-alive', - Referer: ieaseUri, - cookie, - Origin: ieaseUri, - Host: 'music.163.com', - 'User-Agent': agent.getRandom() - } - }); - } - ); // open devTools if (process.env.NODE_ENV !== 'production') { win.webContents.on('did-frame-finish-load', () => { diff --git a/src/renderer/api/artist.ts b/src/renderer/api/artist.ts index e33b86f..b67103d 100644 --- a/src/renderer/api/artist.ts +++ b/src/renderer/api/artist.ts @@ -1,21 +1,18 @@ +// @ts-nocheck import CRYPTO from 'utils/crypto'; -import artistList from './common/artists'; -import artistDesc from './common/artist_desc'; -import artistAlbum from './common/artist_album'; -import simiArtist from './common/simi_artist'; -import artistSub from './common/artist_sub'; import IArtist from 'interface/IArtist'; import IAlbum from 'interface/IAlbum'; +import Api from './'; const { md5 } = CRYPTO; async function getDesc(id: number) { try { - const res = await artistDesc({ id }); - if (res.data.code !== 200) { - throw res.data; + const { body } = await Api.artist_desc({ id }); + if (body.code !== 200) { + throw body; } - const { briefDesc, introduction } = res.data; + const { briefDesc, introduction } = body; return { briefDesc, introduction @@ -31,11 +28,12 @@ async function getDesc(id: number) { async function getAlbums(id: number) { try { - const res = await artistAlbum({ id }); - if (res.data.code !== 200) { - throw res.data; + const { body } = await Api.artist_album({ id }); + if (body.code !== 200) { + throw body; } - const { hotAlbums } = res.data; + const { hotAlbums } = body; + // @ts-ignore return hotAlbums.map((e: IAlbum) => ({ id: e.id, name: e.name, @@ -97,11 +95,12 @@ function id2url(id: string) { async function getArtist(id: number) { try { - const res = await artistList({ id }); - if (res.data.code !== 200) { - throw res.data; + const { body } = await Api.artist_detail({ id }); + if (body.code !== 200) { + throw body; } - const { artist, hotSongs } = res.data; + const { artist, hotSongs } = body; + // @ts-ignore const songs = hotSongs.map((e: any) => { const { al, ar } = e; return { @@ -156,8 +155,8 @@ async function getArtist(id: number) { async function followUser(id: number) { try { - const res = await artistSub({ id, t: 1 }); - if (res.data.code === 200) { + const { body } = await Api.artist_sub({ id, t: 1 }); + if (body.code === 200) { return { success: false }; @@ -170,8 +169,8 @@ async function followUser(id: number) { async function unFollowUser(id: number) { try { - const res = await artistSub({ id, t: 0 }); - if (res.data.code === 200) { + const { body } = await Api.artist_sub({ id, t: 0 }); + if (body.code === 200) { return { success: false }; diff --git a/src/renderer/api/comments.ts b/src/renderer/api/comments.ts index 58e8162..1f21b41 100644 --- a/src/renderer/api/comments.ts +++ b/src/renderer/api/comments.ts @@ -1,5 +1,4 @@ -import commentMusic from './common/comment_music'; -import commentLike from './common/comment_like'; +import Api from './'; interface MusicCommentResponse { newestList?: []; @@ -10,19 +9,21 @@ interface MusicCommentResponse { async function getMusicComments(songId: number, offset = 0): Promise { try { - const res = await commentMusic({ + const { body } = await Api.comment_music({ id: songId, offset }); - if (res.data.code !== 200) { - throw res.data; + if (body.code !== 200) { + throw body; } - const { data } = res; return { - newestList: data.comments, - hotList: data.hotComments, - total: data.total, - nextOffset: data.more ? offset + 30 : 0 + // @ts-ignore + newestList: body.comments, + // @ts-ignore + hotList: body.hotComments, + // @ts-ignore + total: body.total, + nextOffset: body.more ? offset + 30 : 0 }; } catch (e) { console.error(e); diff --git a/src/renderer/api/common/album.ts b/src/renderer/api/common/album.ts deleted file mode 100644 index 0d546e8..0000000 --- a/src/renderer/api/common/album.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { post } from 'utils/request'; - -interface IAlbumQuery { - id: number; -} - -export default (query: IAlbumQuery) => { - return post(`/weapi/v1/album/${query.id}`, {}); -}; diff --git a/src/renderer/api/common/album_newest.ts b/src/renderer/api/common/album_newest.ts deleted file mode 100644 index 5c10564..0000000 --- a/src/renderer/api/common/album_newest.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { post } from 'utils/request'; - -export default () => { - const path = '/api/discovery/newAlbum'; - return post(path, {}); -}; diff --git a/src/renderer/api/common/artist_album.ts b/src/renderer/api/common/artist_album.ts deleted file mode 100644 index 878d51b..0000000 --- a/src/renderer/api/common/artist_album.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { post } from 'utils/request'; - -interface IArtistAlbumQuery { - id: number; - limit?: number; - offset?: number; -} -// 歌手专辑列表 -export default (query: IArtistAlbumQuery) => { - const path = `/weapi/artist/albums/${query.id}`; - const data = { - limit: query.limit || 30, - offset: query.offset || 0, - total: true - }; - return post(path, data); -}; diff --git a/src/renderer/api/common/artist_desc.ts b/src/renderer/api/common/artist_desc.ts deleted file mode 100644 index b7ef612..0000000 --- a/src/renderer/api/common/artist_desc.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { post } from 'utils/request'; - -interface IArtistDescQuery { - id: number; -} -// 歌手介绍 -export default (query: IArtistDescQuery) => { - const path = `/weapi/artist/introduction`; - const data = { - id: query.id - }; - return post(path, data); -}; diff --git a/src/renderer/api/common/artist_sub.ts b/src/renderer/api/common/artist_sub.ts deleted file mode 100644 index 4feace8..0000000 --- a/src/renderer/api/common/artist_sub.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { post } from 'utils/request'; - -interface IArtistSubQuery { - id: number; - t: number; -} - -// 收藏与取消收藏歌手 -export default (query: IArtistSubQuery) => { - const t = query.t == 1 ? 'sub' : 'unsub'; - const path = `/weapi/artist/${t}`; - const data = { - artistId: query.id, - artistIds: `[${query.id}]` - }; - return post(path, data); -}; diff --git a/src/renderer/api/common/artists.ts b/src/renderer/api/common/artists.ts deleted file mode 100644 index 40adc0d..0000000 --- a/src/renderer/api/common/artists.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { post } from 'utils/request'; - -interface IArtistsQuery { - id: number; -} -// 歌手单曲 -export default (query: IArtistsQuery) => { - const path = `/weapi/v1/artist/${query.id}`; - return post(path, {}); -}; diff --git a/src/renderer/api/common/comment_like.ts b/src/renderer/api/common/comment_like.ts deleted file mode 100644 index b59fad3..0000000 --- a/src/renderer/api/common/comment_like.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { post } from 'utils/request'; - -interface ICommentLikeQuery { - id: number; - t: any; - type: number | string; - cid: number; - threadId?: any; -} - -export default (query: ICommentLikeQuery) => { - const path = `/weapi/v1/comment/${query.t}`; - // @ts-ignore - const type = { - 0: 'R_SO_4_', // 歌曲 - 1: 'R_MV_5_', // MV - 2: 'A_PL_0_', // 歌单 - 3: 'R_AL_3_', // 专辑 - 4: 'A_DJ_1_', // 电台, - 5: 'R_VI_62_', // 视频 - 6: 'A_EV_2_' // 动态 - }[query.type]; - const data = { - threadId: type + query.id, - commentId: query.cid - }; - if (query.type === 'A_EV_2_') { - data.threadId = query.threadId; - } - return post(path, data); -}; diff --git a/src/renderer/api/common/comment_music.ts b/src/renderer/api/common/comment_music.ts deleted file mode 100644 index 68953fa..0000000 --- a/src/renderer/api/common/comment_music.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { post } from 'utils/request'; - -interface ICommentMusicQuery { - id: number; - limit?: number; - offset?: number; - before?: number; -} - -export default (query: ICommentMusicQuery) => { - const path = `/api/v1/resource/comments/R_SO_4_${query.id}`; - const data = { - rid: query.id, - limit: query.limit || 20, - offset: query.offset || 0, - beforeTime: query.before || 0 - }; - return post(path, data); -}; diff --git a/src/renderer/api/common/fm_trash.ts b/src/renderer/api/common/fm_trash.ts deleted file mode 100644 index 7f8473d..0000000 --- a/src/renderer/api/common/fm_trash.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { post } from 'utils/request'; - -interface FMTrash { - id: number; - time?: number; -} - -export default (query: FMTrash) => { - const path = `/weapi/radio/trash/add?alg=RT&songId=${query.id}&time=${query.time || 25}`; - const data = { - songId: query.id - }; - return post(path, data); -}; diff --git a/src/renderer/api/common/follow.ts b/src/renderer/api/common/follow.ts deleted file mode 100644 index 3838d6a..0000000 --- a/src/renderer/api/common/follow.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { post } from 'utils/request'; -// 关注与取消关注用户 - -interface Follow { - id: number; - t: number; -} - -export default (query: Follow) => { - const t = query.t == 1 ? 'follow' : 'delfollow'; - const path = `/weapi/user/${t}/${query.id}`; - return post(path, {}); -}; diff --git a/src/renderer/api/common/like.ts b/src/renderer/api/common/like.ts deleted file mode 100644 index f5891df..0000000 --- a/src/renderer/api/common/like.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { post } from 'utils/request'; - -interface ILikeQuery { - id: number; - alg?: string; - like: boolean; - time?: number; -} -// 红心与取消红心歌曲 -export default (query: ILikeQuery) => { - const path = `/weapi/radio/like?alg=${query.alg || 'itembased'}&trackId=${query.id}&like=${ - query.like - }&time=${query.time || 25}`; - const data = { - trackId: query.id, - like: query.like - }; - return post(path, data); -}; diff --git a/src/renderer/api/common/login_cellphone.ts b/src/renderer/api/common/login_cellphone.ts deleted file mode 100644 index 8eb6dd5..0000000 --- a/src/renderer/api/common/login_cellphone.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { post } from 'utils/request'; -import Crypto from 'utils/crypto'; - -const { md5 } = Crypto; - -export interface ILoginCellphoneQuery { - phone: string; - countrycode: string; - password: string; -} - -export default (query: ILoginCellphoneQuery) => { - const path = '/weapi/login/cellphone'; - const data = { - phone: query.phone, - countrycode: query.countrycode || '86', - password: md5(query.password), - rememberLogin: 'true' - }; - return post(path, data); -}; diff --git a/src/renderer/api/common/login_refresh.ts b/src/renderer/api/common/login_refresh.ts deleted file mode 100644 index 8c2c641..0000000 --- a/src/renderer/api/common/login_refresh.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { post } from 'utils/request'; -// 登录刷新 -export default () => { - const path = `/weapi/login/token/refresh`; - return post(path, {}); -}; diff --git a/src/renderer/api/common/login_status.ts b/src/renderer/api/common/login_status.ts deleted file mode 100644 index 1e18e26..0000000 --- a/src/renderer/api/common/login_status.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { post } from 'utils/request'; -// 登录状态 -export default () => { - const path = `/`; - return post(path, {}); -}; diff --git a/src/renderer/api/common/lyric.ts b/src/renderer/api/common/lyric.ts deleted file mode 100644 index b8738dd..0000000 --- a/src/renderer/api/common/lyric.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { post } from 'utils/request'; - -interface ILyricQuery { - id: number; -} -// 歌词 -export default (query: ILyricQuery) => { - const path = `/weapi/song/lyric?lv=-1&kv=-1&tv=-1`; - const data = { - id: query.id - }; - return post(path, data, 'linuxApi'); -}; diff --git a/src/renderer/api/common/personal_fm.ts b/src/renderer/api/common/personal_fm.ts deleted file mode 100644 index cee0bec..0000000 --- a/src/renderer/api/common/personal_fm.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { post } from 'utils/request'; -// 私人FM -export default () => { - const path = `/weapi/v1/radio/get`; - return post(path, {}); -}; diff --git a/src/renderer/api/common/personalized.ts b/src/renderer/api/common/personalized.ts deleted file mode 100644 index 5d31dab..0000000 --- a/src/renderer/api/common/personalized.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { post } from 'utils/request'; - -interface IPersonalizedQuery { - limit?: number; - offset?: number; -} - -export default (query: IPersonalizedQuery) => { - const path = '/weapi/personalized/playlist'; - const data = { - limit: query.limit || 30, - offset: query.offset || 0, - total: true, - n: 1000 - }; - return post(path, data); -}; diff --git a/src/renderer/api/common/playlist_detail.ts b/src/renderer/api/common/playlist_detail.ts deleted file mode 100644 index d434349..0000000 --- a/src/renderer/api/common/playlist_detail.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { post } from 'utils/request'; -interface IPlaylistDetailQuery { - id: number; - s?: number; -} -// 歌单详情 -export default (query: IPlaylistDetailQuery) => { - const path = '/weapi/v3/playlist/detail'; - const data = { - id: query.id, - n: 100000, - s: query.s || 8 - }; - return post(path, data); -}; diff --git a/src/renderer/api/common/playlist_subscribe.ts b/src/renderer/api/common/playlist_subscribe.ts deleted file mode 100644 index f4613f3..0000000 --- a/src/renderer/api/common/playlist_subscribe.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { post } from 'utils/request'; - -interface IPlaylistSubscribe { - id: number; - t: number | string; -} -// 收藏与取消收藏歌单 -export default (query: IPlaylistSubscribe) => { - const path = `/weapi/playlist/${query.t}`; - query.t = query.t == 1 ? 'subscribe' : 'unsubscribe'; - const data = { - id: query.id - }; - return post(path, data); -}; diff --git a/src/renderer/api/common/playlist_tracks.ts b/src/renderer/api/common/playlist_tracks.ts deleted file mode 100644 index 806ef06..0000000 --- a/src/renderer/api/common/playlist_tracks.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { post } from 'utils/request'; - -interface IPlaylistTracksQuery { - op: 'del' | 'add'; - pid: number; - tracks: number; -} -// 收藏单曲到歌单 从歌单删除歌曲 -export default (query: IPlaylistTracksQuery) => { - const path = '/weapi/playlist/manipulate/tracks'; - const data = { - op: query.op, // del,add - pid: query.pid, // 歌单id - trackIds: `[${query.tracks}]` // 歌曲id - }; - return post(path, data); -}; diff --git a/src/renderer/api/common/recommend_resource.ts b/src/renderer/api/common/recommend_resource.ts deleted file mode 100644 index 76b22ec..0000000 --- a/src/renderer/api/common/recommend_resource.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { post } from 'utils/request'; - -export default () => { - const path = '/weapi/v1/discovery/recommend/resource'; - return post(path, {}); -}; diff --git a/src/renderer/api/common/recommend_songs.ts b/src/renderer/api/common/recommend_songs.ts deleted file mode 100644 index f787105..0000000 --- a/src/renderer/api/common/recommend_songs.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { post } from 'utils/request'; - -export default () => { - const path = '/weapi/v1/discovery/recommend/songs'; - const data = { - limit: 20, - offset: 0, - total: true - }; - return post(path, data); -}; diff --git a/src/renderer/api/common/scrobble.ts b/src/renderer/api/common/scrobble.ts deleted file mode 100644 index e401e56..0000000 --- a/src/renderer/api/common/scrobble.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { post } from 'utils/request'; - -interface IScrobbleQuery { - id: number; - sourceid: number; - time: string; -} - -export default (query: IScrobbleQuery) => { - const path = '/weapi/feedback/weblog'; - const data = { - logs: JSON.stringify([ - { - action: 'play', - json: { - download: 0, - end: 'playend', - id: query.id, - sourceId: query.sourceid, - time: query.time, - type: 'song', - wifi: 0 - } - } - ]) - }; - return post(path, data); -}; diff --git a/src/renderer/api/common/search.ts b/src/renderer/api/common/search.ts deleted file mode 100644 index 57ef426..0000000 --- a/src/renderer/api/common/search.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { post } from 'utils/request'; - -interface ISearchQuery { - keywords: string; - type?: number; - limit?: number; - offset?: number; -} -// 搜索 -export default (query: ISearchQuery) => { - const path = '/weapi/search/get'; - const data = { - s: query.keywords, - type: query.type || 1, // 1: 单曲, 10: 专辑, 100: 歌手, 1000: 歌单, 1002: 用户, 1004: MV, 1006: 歌词, 1009: 电台, 1014: 视频 - limit: query.limit || 30, - offset: query.offset || 0 - }; - return post(path, data); -}; diff --git a/src/renderer/api/common/search_hot.ts b/src/renderer/api/common/search_hot.ts deleted file mode 100644 index 9d7a848..0000000 --- a/src/renderer/api/common/search_hot.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { post } from 'utils/request'; -// 热门搜索 -export default () => { - const path = '/weapi/search/hot'; - const data = { - type: 1111 - }; - return post(path, data); -}; diff --git a/src/renderer/api/common/simi_artist.ts b/src/renderer/api/common/simi_artist.ts deleted file mode 100644 index 55b5ba7..0000000 --- a/src/renderer/api/common/simi_artist.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { post } from 'utils/request'; - -interface ISimiArtistQuery { - id: number; -} -// 相似歌手 -export default (query: ISimiArtistQuery) => { - const path = '/weapi/discovery/simiArtist'; - const data = { - artistid: query.id - }; - return post(path, data); -}; diff --git a/src/renderer/api/common/simi_playlist.ts b/src/renderer/api/common/simi_playlist.ts deleted file mode 100644 index 5c852eb..0000000 --- a/src/renderer/api/common/simi_playlist.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { post } from 'utils/request'; - -interface ISimiPlaylistQuery { - id: number; - limit?: number; - offset?: number; -} -// 相似歌曲 -export default (query: ISimiPlaylistQuery) => { - const path = '/weapi/discovery/simiPlaylist'; - const data = { - songid: query.id, - limit: query.limit || 50, - offset: query.offset || 0 - }; - return post(path, data); -}; diff --git a/src/renderer/api/common/simi_song.ts b/src/renderer/api/common/simi_song.ts deleted file mode 100644 index 5b007d7..0000000 --- a/src/renderer/api/common/simi_song.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { post } from 'utils/request'; - -interface ISimiSongQuery { - id: number; - limit?: number; - offset?: number; -} -// 相似歌曲 -export default (query: ISimiSongQuery) => { - const path = '/weapi/v1/discovery/simiSong'; - const data = { - songid: query.id, - limit: query.limit || 50, - offset: query.offset || 0 - }; - return post(path, data); -}; diff --git a/src/renderer/api/common/simi_user.ts b/src/renderer/api/common/simi_user.ts deleted file mode 100644 index c64a492..0000000 --- a/src/renderer/api/common/simi_user.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { post } from 'utils/request'; - -interface ISimiUserQuery { - id: number; - limit?: number; - offset?: number; -} -// 相似用户 -export default (query: ISimiUserQuery) => { - const path = '/weapi/discovery/simiUser'; - const data = { - songid: query.id, - limit: query.limit || 50, - offset: query.offset || 0 - }; - return post(path, data); -}; diff --git a/src/renderer/api/common/song_url.ts b/src/renderer/api/common/song_url.ts deleted file mode 100644 index c77cf38..0000000 --- a/src/renderer/api/common/song_url.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { post } from 'utils/request'; - -interface ISongUrl { - id: number; - br?: string; -} -export default (query: ISongUrl) => { - const path = '/api/song/enhance/player/url'; - const data = { - ids: `[${query.id}]`, - br: parseInt(query.br || '999000', 10) - }; - return post(path, data); -}; diff --git a/src/renderer/api/common/top_playlist.ts b/src/renderer/api/common/top_playlist.ts deleted file mode 100644 index 3ab04a1..0000000 --- a/src/renderer/api/common/top_playlist.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { post } from 'utils/request'; - -interface ITopPlaylistQuery { - cat: string; - order?: string; - limit?: number; - offset?: number; -} -// 分类歌单 -export default (query: ITopPlaylistQuery) => { - const path = '/weapi/playlist/list'; - const data = { - cat: query.cat || '全部', - order: query.order || 'hot', // hot,new - limit: query.limit || 50, - offset: query.offset || 0, - total: true - }; - return post(path, data); -}; diff --git a/src/renderer/api/common/toplist.ts b/src/renderer/api/common/toplist.ts deleted file mode 100644 index 78a0f50..0000000 --- a/src/renderer/api/common/toplist.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { post } from 'utils/request'; -// 所有榜单介绍 -export default () => { - const path = '/weapi/toplist'; - return post(path, {}); -}; diff --git a/src/renderer/api/common/user_detail.ts b/src/renderer/api/common/user_detail.ts deleted file mode 100644 index f34844d..0000000 --- a/src/renderer/api/common/user_detail.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { post } from 'utils/request'; - -interface IUserDetailQuery { - uid: number; -} -// 用户详情 -export default (query: IUserDetailQuery) => { - const path = `/weapi/v1/user/detail/${query.uid}`; - return post(path, {}); -}; diff --git a/src/renderer/api/common/user_playlist.ts b/src/renderer/api/common/user_playlist.ts deleted file mode 100644 index 63745b5..0000000 --- a/src/renderer/api/common/user_playlist.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { post } from 'utils/request'; - -interface IUserPlaylistQuery { - uid: number; - limit?: number; - offset?: number; -} -export default (query: IUserPlaylistQuery) => { - const path = '/weapi/user/playlist'; - const data = { - uid: query.uid, - limit: query.limit || 30, - offset: query.offset || 0 - }; - return post(path, data); -}; diff --git a/src/renderer/api/fm.ts b/src/renderer/api/fm.ts index c28028e..98f1d4d 100644 --- a/src/renderer/api/fm.ts +++ b/src/renderer/api/fm.ts @@ -1,7 +1,6 @@ -import personalFm from './common/personal_fm'; -import fmTrashApi from './common/fm_trash'; import IArtist from 'interface/IArtist'; import ISong from 'interface/ISong'; +import Api from './'; interface PlaylistResponse { id: string | number; @@ -12,13 +11,13 @@ interface PlaylistResponse { } async function getPlaylist(): Promise { - let songs = []; + let songs: any = []; try { - const res = await personalFm(); - if (res.data.code !== 200) { - throw res.data; + const { body } = await Api.personal_fm({}); + if (body.code !== 200) { + throw body; } - const { data } = res.data; + const { data } = body; songs = data || []; if (songs.length === 0) { return getPlaylist(); @@ -54,10 +53,10 @@ async function getPlaylist(): Promise { }; } -async function fmTrash(id: number) { +async function fmTrash(id: number, cookie: string) { try { - const res = await fmTrashApi({ id }); - return res.data; + const { body } = await Api.fm_trash({ id, cookie }); + return body; } catch (e) { console.error(e); } diff --git a/src/renderer/api/login.ts b/src/renderer/api/login.ts deleted file mode 100644 index 4f27d8a..0000000 --- a/src/renderer/api/login.ts +++ /dev/null @@ -1,27 +0,0 @@ -import loginRefreshApi from './common/login_refresh'; -import loginStatus from './common/login_status'; - -async function loginRefresh() { - try { - const res = await loginRefreshApi(); - return res.data; - } catch (e) { - console.error(e); - } - return {}; -} - -async function geLoginStatus() { - try { - const res = await loginStatus(); - const { data } = res; - let profile = eval(`(${/GUser\s*=\s*([^;]+);/.exec(data)[1]})`); - let bindings = eval(`(${/GBinds\s*=\s*([^;]+);/.exec(data)[1]})`); - return { code: 200, profile: profile, bindings: bindings }; - } catch (e) { - console.error(e); - } - return { code: 301 }; -} - -export { loginRefresh, geLoginStatus }; diff --git a/src/renderer/api/lyrics.ts b/src/renderer/api/lyrics.ts index 8085e5a..908ed2f 100644 --- a/src/renderer/api/lyrics.ts +++ b/src/renderer/api/lyrics.ts @@ -1,4 +1,4 @@ -import lyric from './common/lyric'; +import Api from './'; async function getLyric(id: number) { if (!id) { @@ -6,13 +6,15 @@ async function getLyric(id: number) { } const result: any = {}; try { - const res = await lyric({ id }); - if (res.data.code === 200) { - const { data } = res; - if (data.lrc === undefined) { + const { body } = await Api.lyric({ id }); + if (body.code === 200) { + debugger; + const { lrc } = body; + if (lrc === undefined) { return result; } - const lyrics = data.lrc.lyric.split('\n'); + // @ts-ignore + const lyrics = lrc.lyric.split('\n'); lyrics.forEach((e: any) => { const match = e.match(/\[.+\]/); diff --git a/src/renderer/api/player.ts b/src/renderer/api/player.ts index 4aab9d8..8a0e7c5 100644 --- a/src/renderer/api/player.ts +++ b/src/renderer/api/player.ts @@ -1,9 +1,4 @@ -import albumList from './common/album'; -import simiArtist from './common/simi_artist'; -import simiPlaylist from './common/simi_playlist'; -import simiSong from './common/simi_song'; -import simiUser from './common/simi_user'; -import NeteaseCloudMusicApi from './'; +import Api from './'; async function getSongUrl(query: any) { const { id } = query; @@ -14,11 +9,12 @@ async function getSongUrl(query: any) { } // 相似歌手 -async function getRecentUser(id: number) { +async function getRecentUser(id: number, cookie?: string) { try { - const res = await simiUser({ id }); - if (res.data.code === 200) { - return res.data.userprofiles.map((e: any) => { + const { body } = await Api.simi_user({ id, cookie }); + if (body.code === 200) { + const userProfiles: any = body.userprofiles; + return userProfiles.map((e: any) => { return { id: e.userId, name: e.nickname, @@ -33,11 +29,12 @@ async function getRecentUser(id: number) { return []; } -async function getSimilarArtist(id: number) { +async function getSimilarArtist(id: number, cookie?: string) { try { - const res = await simiArtist({ id }); - if (res.data.code === 200) { - return res.data.artists.map((e: any) => { + const { body } = await Api.simi_artist({ id, cookie }); + if (body.code === 200) { + const artists: any = body.artists; + return artists.map((e: any) => { return { id: e.id, name: e.name, @@ -53,11 +50,12 @@ async function getSimilarArtist(id: number) { return []; } -async function getSimilarPlaylist(id: number) { +async function getSimilarPlaylist(id: number, cookie?: string) { try { - const res = await simiPlaylist({ id }); - if (res.data.code === 200) { - return res.data.playlists.map((e: any) => { + const { body } = await Api.simi_playlist({ id, cookie }); + if (body.code === 200) { + const playlists: any = body.playlists; + return playlists.map((e: any) => { return { id: e.id, name: e.name, @@ -72,11 +70,12 @@ async function getSimilarPlaylist(id: number) { return []; } -async function getAlbumBySong(id: number) { +async function getAlbumBySong(id: number, cookie?: string) { try { - const res = await simiSong({ id }); - if (res.data.code === 200) { - return res.data.songs.map((e: any) => { + const { body } = await Api.simi_song({ id, cookie }); + if (body.code === 200) { + const songs: any = body.songs; + return songs.map((e: any) => { const { album } = e; return { @@ -93,9 +92,9 @@ async function getAlbumBySong(id: number) { return []; } -async function getRecommend(songid: number, artistid: number) { +async function getRecommend(songid: number, artistid: number, cookie?: string) { const [users, artists, playlists1, playlists2] = await Promise.all([ - getRecentUser(songid), + getRecentUser(songid, cookie), getSimilarArtist(artistid), getAlbumBySong(songid), getSimilarPlaylist(songid) @@ -109,9 +108,9 @@ async function getRecommend(songid: number, artistid: number) { async function getPlayListDetail(type: string, id: number, cookie?: string) { const resData: any = {}; - let songs = []; + let songs: any = []; if (type === '0') { - const { body } = await NeteaseCloudMusicApi.playlist_detail({ id, cookie }); + const { body } = await Api.playlist_detail({ id, cookie }); const meta: any = body.playlist; songs = meta.tracks; resData.meta = { @@ -131,9 +130,9 @@ async function getPlayListDetail(type: string, id: number, cookie?: string) { subscribed: meta.subscribed }; } else { - const res = await albumList({ id }); - songs = res.data.songs; - const meta = res.data.album; + const { body } = await Api.album({ id, cookie }); + songs = body.songs; + const meta: any = body.album; resData.meta = { name: meta.name, size: meta.size, diff --git a/src/renderer/api/playlist.ts b/src/renderer/api/playlist.ts index 92133e7..73ca171 100644 --- a/src/renderer/api/playlist.ts +++ b/src/renderer/api/playlist.ts @@ -1,4 +1,4 @@ -import topPlayList from './common/top_playlist'; +import Api from './'; const limit = 50; @@ -6,12 +6,12 @@ async function getPlayList(cat: string, offset?: number) { let playList = []; let nextOffset = offset; try { - const res = await topPlayList({ cat, offset, limit }); - const { data } = res; - if (data.code !== 200) { - throw data; + const { body } = await Api.top_playlist({ cat, offset, limit }); + if (body.code !== 200) { + throw body; } - playList = data.playlists.map((e: any) => { + // @ts-ignore + playList = body.playlists.map((e: any) => { const { creator } = e; return { @@ -28,7 +28,7 @@ async function getPlayList(cat: string, offset?: number) { } }; }); - if (data.more) { + if (body.more) { nextOffset += limit; } } catch (e) { diff --git a/src/renderer/api/search.ts b/src/renderer/api/search.ts index cf42b2f..f47e365 100644 --- a/src/renderer/api/search.ts +++ b/src/renderer/api/search.ts @@ -1,8 +1,8 @@ import IAlbum from '@/interface/IAlbum'; import IArtist from '@/interface/IArtist'; import IPlayList from '@/interface/IPlayList'; -import search from './common/search'; import IUserProfile from '@/interface/IUserProfile'; +import Api from './'; interface SearchResult { playlists?: IPlayList[]; @@ -15,14 +15,15 @@ interface SearchResult { async function getPlaylists(keywords: string, offset = 0): Promise { let playlists = []; try { - const res = await search({ + const { body } = await Api.search({ offset, keywords, limit: 30, type: 1000 }); - if (res.data.code === 200) { - playlists = res.data.result.playlists.map((e: any) => { + if (body.code === 200) { + const result: any = body.result; + playlists = result.playlists.map((e: any) => { const { creator } = e; return { id: e.id, @@ -52,20 +53,21 @@ async function getPlaylists(keywords: string, offset = 0): Promise async function getAlbums(keywords: string, offset = 0) { let albums = []; try { - const res = await search({ + const { body } = await Api.search({ offset, keywords, limit: 30, type: 10 }); - if (res.data.code === 200) { - albums = res.data.result.albums.map((e: any) => { + if (body.code === 200) { + const result: any = body.result; + albums = result.albums.map((e: any) => { const { artist } = e; return { id: e.id, name: e.name, cover: e.picUrl, - publish: e.publishTime, + publishTime: e.publishTime, size: e.size, link: `/player/1/${e.id}`, artist: { @@ -88,14 +90,15 @@ async function getAlbums(keywords: string, offset = 0) { async function getArtists(keywords: string, offset = 0) { let artists = []; try { - const res = await search({ + const { body } = await Api.search({ offset, keywords, limit: 30, type: 100 }); - if (res.data.code === 200) { - artists = res.data.result.artists.map((e: any) => { + if (body.code === 200) { + const result: any = body.result; + artists = result.artists.map((e: any) => { return { id: e.id, name: e.name, @@ -120,14 +123,15 @@ async function getArtists(keywords: string, offset = 0) { async function getUsers(keywords: string, offset = 0) { let users = []; try { - const res = await search({ + const { body } = await Api.search({ offset, keywords, limit: 30, type: 1002 }); - if (res.data.code === 200) { - users = res.data.result.userprofiles.map((e: any) => { + if (body.code === 200) { + const result: any = body.result; + users = result.userprofiles.map((e: any) => { return { id: e.userId, name: e.nickname, diff --git a/src/renderer/api/top.ts b/src/renderer/api/top.ts index 15682f9..b7ea014 100644 --- a/src/renderer/api/top.ts +++ b/src/renderer/api/top.ts @@ -1,10 +1,12 @@ -import topList from './common/toplist'; +import Api from './'; async function getTopList() { try { - const res = await topList(); - if (res.data.code === 200) { - return res.data.list.map((data: any) => { + const { body } = await Api.toplist({}); + if (body.code === 200) { + debugger; + const list: any = body.list; + return list.map((data: any) => { return { name: data.name, played: data.playCount, diff --git a/src/renderer/api/user.ts b/src/renderer/api/user.ts index 34320e7..267e6ae 100644 --- a/src/renderer/api/user.ts +++ b/src/renderer/api/user.ts @@ -1,16 +1,12 @@ -import songLike from './common/like'; -import tracksOp from './common/playlist_tracks'; -import userDetail from './common/user_detail'; -import userPlayList from './common/user_playlist'; +import Api from './'; -async function getUser(uid: number) { +async function getUser(uid: number, cookie?: string) { try { - const res = await userDetail({ uid }); - const { data } = res; - if (data.code !== 200) { - throw data; + const { body } = await Api.user_detail({ uid, cookie }); + if (body.code !== 200) { + throw body; } - const { profile } = data; + const profile = body; return { id: profile.userId, name: profile.nickname, @@ -26,14 +22,14 @@ async function getUser(uid: number) { return {}; } -async function getPlayList(uid: number) { +async function getPlayList(uid: number, cookie?: string) { try { - const res = await userPlayList({ uid }); - const { data } = res; - if (data.code !== 200) { - throw data; + const { body } = await Api.user_playlist({ uid, cookie }); + if (body.code !== 200) { + throw body; } - return data.playlist.map((e: any) => ({ + const playlist: any = body.playlist; + return playlist.map((e: any) => ({ id: e.id.toString(), name: e.name, cover: e.coverImgUrl, @@ -47,32 +43,12 @@ async function getPlayList(uid: number) { return []; } -async function getUserDetail(uid: number) { - const [profile, playlists] = await Promise.all([getUser(uid), getPlayList(uid)]); +async function getUserDetail(uid: number, cookie?: string) { + const [profile, playlists] = await Promise.all([getUser(uid, cookie), getPlayList(uid, cookie)]); return { profile, playlists }; } -async function likeSong(id: number, like: boolean) { - try { - const res = await songLike({ id, like }); - return res.data; - } catch (e) { - console.error(e); - } - return { code: 301 }; -} - -async function unlikeSong(pid: number, songId: number) { - try { - const res = await tracksOp({ op: 'del', pid, tracks: songId }); - return res.data; - } catch (e) { - console.error(e); - } - return { code: 301 }; -} - -export { getUserDetail, likeSong, unlikeSong }; +export { getUserDetail }; diff --git a/src/renderer/stores/fm.ts b/src/renderer/stores/fm.ts index b22ee97..13a5fd9 100644 --- a/src/renderer/stores/fm.ts +++ b/src/renderer/stores/fm.ts @@ -3,6 +3,7 @@ import { fmTrash, getPlaylist } from 'api/fm'; import IPlayList from 'interface/IPlayList'; import { makeAutoObservable, runInAction } from 'mobx'; import controller from './controller'; +import me from './me'; class FM { loading = true; @@ -48,9 +49,9 @@ class FM { }; // Ban a song - ban = async (id: number) => { - const data = await fmTrash(id); + const cookie = me.profile.cookie; + const data = await fmTrash(id, cookie); if (data.code === 200) { this.next(); } diff --git a/src/renderer/stores/me.ts b/src/renderer/stores/me.ts index 079d4b6..f4f9caa 100644 --- a/src/renderer/stores/me.ts +++ b/src/renderer/stores/me.ts @@ -1,6 +1,5 @@ import { dialog } from 'electron'; import QRCodeApi, { LoginType } from 'api/qrcode'; -import { likeSong, unlikeSong } from 'api/user'; import ISong from 'interface/ISong'; import IUserProfile from 'interface/IUserProfile'; import { makeAutoObservable, runInAction } from 'mobx'; @@ -139,13 +138,8 @@ class Me { }; async exeLike(song: ISong, like: boolean) { - let data; - - if (like) { - data = await likeSong(song.id, like); - } else { - data = await unlikeSong(home.list[0].id, song.id); - } + const cookie = this.profile.cookie; + const { body } = await Api.like({ id: song.id, like, cookie }); if (this.likes.get('id') === player.meta.id) { let { songs } = player; @@ -160,7 +154,7 @@ class Me { player.songs = songs; } - return data.code === 200; + return body.code === 200; } async logout() { diff --git a/src/renderer/stores/player.ts b/src/renderer/stores/player.ts index 829613b..d295ca9 100644 --- a/src/renderer/stores/player.ts +++ b/src/renderer/stores/player.ts @@ -1,7 +1,7 @@ import { getPlayListDetail, getRecommend } from 'api/player'; import ISong from 'interface/ISong'; import me from './me'; -import { makeAutoObservable, runInAction, toJS } from 'mobx'; +import { makeAutoObservable, runInAction } from 'mobx'; import * as pinyin from 'tiny-pinyin'; import helper from 'utils/helper'; import IArtist from 'interface/IArtist'; @@ -54,7 +54,7 @@ class Player { if (!song.id || song.artists.length === 0) { return; } - const data = await getRecommend(song.id, song.artists[0].id); + const data = await getRecommend(song.id, song.artists[0].id, me.profile.cookie); if (data) { runInAction(() => { this.recommend = data.playlists; diff --git a/src/renderer/stores/user.ts b/src/renderer/stores/user.ts index 43eef10..d09c5e1 100644 --- a/src/renderer/stores/user.ts +++ b/src/renderer/stores/user.ts @@ -1,4 +1,5 @@ import { getUserDetail } from 'api/user'; +import me from './me'; import axios from 'axios'; import { makeAutoObservable, runInAction } from 'mobx'; import IUserProfile from 'interface/IUserProfile'; @@ -16,8 +17,8 @@ class User { getUser = async (userid: number) => { this.loading = true; - - const data = await getUserDetail(userid); + const cookie = me.profile.cookie; + const data = await getUserDetail(userid, cookie); runInAction(() => { this.profile = data.profile; this.playlists = data.playlists; diff --git a/src/renderer/utils/request.ts b/src/renderer/utils/request.ts deleted file mode 100644 index 8cd0c31..0000000 --- a/src/renderer/utils/request.ts +++ /dev/null @@ -1,47 +0,0 @@ -import axios, { AxiosRequestConfig, Method } from 'axios'; -import CRYPTO from './crypto'; - -const { weapi, linuxApi } = CRYPTO; -const host = 'music.163.com'; - -const request = (method: Method, path: string, data: any, crypto = 'weapi') => { - let cryptoReq = {}; - let url = `https://${host}${path}`; - switch (crypto) { - case 'linuxApi': - cryptoReq = linuxApi({ - method, - url: url.replace(/\w*api/, 'api'), - params: data - }); - url = `https://${host}/api/linux/forward`; - break; - case 'eapi': - break; - default: - cryptoReq = weapi(data); - break; - } - const options: AxiosRequestConfig = { - method, - url, - withCredentials: true, - headers: { - Accept: 'application/json;charset=UTF-8', - 'Accept-Language': 'zh-CN,zh;q=0.8,gl;q=0.6,zh-TW;q=0.4', - 'Content-Type': 'application/x-www-form-urlencoded' - }, - params: cryptoReq - }; - return axios(options); -}; - -const post = (path: string, data: any, crypto?: string) => { - return request('POST', path, data, crypto); -}; - -const get = (path: string, data: any) => { - return request('GET', path, data); -}; - -export { request, post, get };