Skip to content

Commit

Permalink
Merge pull request #138 from jitwxs/dev
Browse files Browse the repository at this point in the history
Release v5.4
  • Loading branch information
jitwxs committed Dec 4, 2022
2 parents 3ea4ec6 + 2d84392 commit 1961b8a
Show file tree
Hide file tree
Showing 40 changed files with 3,486 additions and 624 deletions.
17 changes: 16 additions & 1 deletion MusicLyricApp/Api/BaseNativeApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.Collections.Specialized;
using System.Net;
using System.Text;
using MusicLyricApp.Utils;

namespace MusicLyricApp.Api
{
Expand All @@ -23,7 +24,7 @@ public abstract class BaseNativeApi
/// <param name="method">模式</param>
/// <exception cref="WebException"></exception>
/// <returns></returns>
protected string SendHttp(string url, Dictionary<string, string> paramDict)
protected string SendPost(string url, Dictionary<string, string> paramDict)
{
string result;
using (var wc = new WebClient())
Expand All @@ -45,5 +46,19 @@ protected string SendHttp(string url, Dictionary<string, string> paramDict)

return result;
}

protected string SendJsonPost(string url, Dictionary<string, object> paramDict)
{
using (var wc = new WebClient())
{
wc.Encoding = Encoding.UTF8;
wc.Headers.Add(HttpRequestHeader.ContentType, "application/json");
wc.Headers.Add(HttpRequestHeader.Referer, HttpRefer());
wc.Headers.Add(HttpRequestHeader.UserAgent, Useragent);
wc.Headers.Add(HttpRequestHeader.Cookie, Cookie);

return wc.UploadString(url, paramDict.ToJson());
}
}
}
}
37 changes: 30 additions & 7 deletions MusicLyricApp/Api/IMusicApiV2.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,26 +5,49 @@ namespace MusicLyricApp.Api
{
public interface IMusicApiV2
{
SearchSourceEnum Source();

/// <summary>
/// 获取歌单信息
/// </summary>
/// <param name="playlistId">歌单ID</param>
ResultVo<PlaylistVo> GetPlaylistVo(string playlistId);

/// <summary>
/// 根据专辑ID获取歌曲ID列表
/// 获取专辑信息
/// </summary>
/// <param name="albumId">专辑ID</param>
/// <returns>歌曲ID列表</returns>
IEnumerable<string> GetSongIdsFromAlbum(string albumId);
ResultVo<AlbumVo> GetAlbumVo(string albumId);

/// <summary>
/// 获取歌曲信息
/// </summary>
/// <param name="songIds">歌曲ID列表</param>
/// <returns></returns>
/// <returns>songId, songVo</returns>
Dictionary<string, ResultVo<SongVo>> GetSongVo(string[] songIds);


/// <summary>
/// 获取歌曲链接
/// </summary>
/// <param name="songId"></param>
/// <returns></returns>
ResultVo<string> GetSongLink(string songId);

/// <summary>
/// 获取歌词信息
/// </summary>
/// <param name="songVo">歌曲信息</param>
/// <param name="id">歌曲服务商内部 ID</param>
/// <param name="displayId">歌曲服务商显示 ID</param>
/// <param name="isVerbatim">是否尝试获取逐字歌词</param>
/// <returns></returns>
LyricVo GetLyricVo(SongVo songVo, bool isVerbatim);
ResultVo<LyricVo> GetLyricVo(string id, string displayId, bool isVerbatim);

/// <summary>
/// 获取搜索结果
/// </summary>
/// <param name="keyword">关键词</param>
/// <param name="searchType">搜索类型</param>
/// <returns></returns>
ResultVo<SearchResultVo> Search(string keyword, SearchTypeEnum searchType);
}
}
87 changes: 43 additions & 44 deletions MusicLyricApp/Api/MusicApiV2Cacheable.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Linq;
using MusicLyricApp.Bean;
using MusicLyricApp.Cache;
using MusicLyricApp.Utils;
Expand All @@ -7,53 +8,48 @@ namespace MusicLyricApp.Api
{
public abstract class MusicApiV2Cacheable : IMusicApiV2
{
protected abstract IEnumerable<string> GetSongIdsFromAlbum0(string albumId);
protected abstract SearchSourceEnum Source0();

protected abstract ResultVo<PlaylistVo> GetPlaylistVo0(string playlistId);

protected abstract ResultVo<AlbumVo> GetAlbumVo0(string albumId);

protected abstract Dictionary<string, ResultVo<SongVo>> GetSongVo0(string[] songIds);

protected abstract LyricVo GetLyricVo0(SongVo songVo, bool isVerbatim);

public IEnumerable<string> GetSongIdsFromAlbum(string albumId)
protected abstract ResultVo<string> GetSongLink0(string songId);

protected abstract ResultVo<LyricVo> GetLyricVo0(string id, string displayId, bool isVerbatim);

protected abstract ResultVo<SearchResultVo> Search0(string keyword, SearchTypeEnum searchType);

public SearchSourceEnum Source()
{
if (GlobalCache.ContainsAlbumSongIds(albumId))
{
return GlobalCache.GetSongIdsFromAlbum(albumId);
}
return Source0();
}

var result = GetSongIdsFromAlbum0(albumId);
if (result != null)
{
GlobalCache.PutAlbumSongIds(albumId, result);
}
public ResultVo<PlaylistVo> GetPlaylistVo(string playlistId)
{
return GlobalCache.Process(CacheType.PLAYLIST_VO, playlistId, () => GetPlaylistVo0(playlistId));
}

return result;
public ResultVo<AlbumVo> GetAlbumVo(string albumId)
{
return GlobalCache.Process(CacheType.ALBUM_VO, albumId, () => GetAlbumVo0(albumId));
}

public Dictionary<string, ResultVo<SongVo>> GetSongVo(string[] songIds)
{
var result = new Dictionary<string, ResultVo<SongVo>>();
var requestIds = new List<string>();

foreach (var songId in songIds)
{
if (GlobalCache.ContainsSong(songId))
{
result[songId] = new ResultVo<SongVo>(GlobalCache.GetSong(songId));
}
else
{
requestIds.Add(songId);
}
}

foreach(var pair in GetSongVo0(requestIds.ToArray()))
var result = GlobalCache.BatchQuery<string, SongVo>(CacheType.SONG_VO, songIds, out var notHitKeys)
.ToDictionary(pair => pair.Key, pair => new ResultVo<SongVo>(pair.Value));

foreach(var pair in GetSongVo0(notHitKeys))
{
var songId = pair.Key;
var resultVo = pair.Value;

if (resultVo.IsSuccess())
{
GlobalCache.PutSong(songId, resultVo.Data);
GlobalCache.DoCache(CacheType.SONG_VO, songId, resultVo.Data);
}

result[songId] = pair.Value;
Expand All @@ -62,22 +58,25 @@ public IEnumerable<string> GetSongIdsFromAlbum(string albumId)
return result;
}

public LyricVo GetLyricVo(SongVo songVo, bool isVerbatim)
public ResultVo<string> GetSongLink(string songId)
{
var cacheKey = GlobalUtils.GetSongKey(songVo.DisplayId, isVerbatim);

if (GlobalCache.ContainsLyric(cacheKey))
{
return GlobalCache.GetLyric(cacheKey);
}
return GlobalCache.Process(CacheType.SONG_LINK, songId, () => GetSongLink0(songId));
}

var result = GetLyricVo0(songVo, isVerbatim);
if (result != null)
{
GlobalCache.PutLyric(cacheKey, result);
}
public ResultVo<LyricVo> GetLyricVo(string id, string displayId, bool isVerbatim)
{
ResultVo<LyricVo> CacheFunc() => GetLyricVo0(id, displayId, isVerbatim);

return result;
return GlobalCache.Process(CacheType.LYRIC_VO, GlobalUtils.GetSongKey(displayId, isVerbatim), CacheFunc);
}

public ResultVo<SearchResultVo> Search(string keyword, SearchTypeEnum searchType)
{
var cacheKey = Source0() + "_" + searchType + "_" + keyword;

ResultVo<SearchResultVo> CacheFunc() => Search0(keyword, searchType);

return GlobalCache.Process(CacheType.SEARCH_RESULT_VO, cacheKey, CacheFunc);
}
}
}

0 comments on commit 1961b8a

Please sign in to comment.