Skip to content

Commit 0696aad

Browse files
committed
修复登录失败
更新api 代码清理
1 parent dfa291c commit 0696aad

File tree

7 files changed

+72
-74
lines changed

7 files changed

+72
-74
lines changed

.editorconfig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ root = true
33

44
[*]
55
charset = utf-8
6-
end_of_line = crlf
6+
end_of_line = crlf
77
indent_style = tab
88
trim_trailing_whitespace = true
99
insert_final_newline = true
@@ -77,7 +77,7 @@ csharp_style_expression_bodied_properties = true:suggestion
7777
# Pattern matching preferences
7878
csharp_style_pattern_matching_over_as_with_null_check = true:suggestion
7979
csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion
80-
csharp_style_prefer_switch_expression = true:suggestion
80+
csharp_style_prefer_switch_expression = false:suggestion
8181

8282
# Null-checking preferences
8383
csharp_style_conditional_delegate_call = true:suggestion

NLyric/ChineseConverter.cs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,13 @@ internal static class ChineseConverter {
99

1010
private static Dictionary<char, char> GetTraditionalToSimplifiedMap() {
1111
var assembly = Assembly.GetExecutingAssembly();
12-
using (var stream = assembly.GetManifestResourceStream("NLyric.TraditionalToSimplified.map"))
13-
using (var reader = new BinaryReader(stream)) {
14-
int count = (int)stream.Length / 4;
15-
var map = new Dictionary<char, char>(count);
16-
for (int i = 0; i < count; i++)
17-
map.Add((char)reader.ReadUInt16(), (char)reader.ReadUInt16());
18-
return map;
19-
}
12+
using var stream = assembly.GetManifestResourceStream("NLyric.TraditionalToSimplified.map");
13+
using var reader = new BinaryReader(stream);
14+
int count = (int)stream.Length / 4;
15+
var map = new Dictionary<char, char>(count);
16+
for (int i = 0; i < count; i++)
17+
map.Add((char)reader.ReadUInt16(), (char)reader.ReadUInt16());
18+
return map;
2019
}
2120

2221
public static string TraditionalToSimplified(string s) {

NLyric/Lyrics/Lrc.cs

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -86,12 +86,11 @@ public static Lrc Parse(string text) {
8686
throw new ArgumentNullException(nameof(text));
8787

8888
var lrc = new Lrc();
89-
using (var reader = new StringReader(text)) {
90-
string line;
91-
while (!((line = reader.ReadLine()?.Trim()) is null) && !string.IsNullOrEmpty(line)) {
92-
if (!TryParseLine(line, lrc))
93-
throw new FormatException();
94-
}
89+
using var reader = new StringReader(text);
90+
string line;
91+
while (!((line = reader.ReadLine()?.Trim()) is null) && !string.IsNullOrEmpty(line)) {
92+
if (!TryParseLine(line, lrc))
93+
throw new FormatException();
9594
}
9695
return lrc;
9796
}
@@ -101,11 +100,10 @@ public static Lrc UnsafeParse(string text) {
101100
throw new ArgumentNullException(nameof(text));
102101

103102
var lrc = new Lrc();
104-
using (var reader = new StringReader(text)) {
105-
string line;
106-
while (!((line = reader.ReadLine()?.Trim()) is null))
107-
TryParseLine(line.Trim(), lrc);
108-
}
103+
using var reader = new StringReader(text);
104+
string line;
105+
while (!((line = reader.ReadLine()?.Trim()) is null))
106+
TryParseLine(line.Trim(), lrc);
109107
return lrc;
110108
}
111109

NLyric/NLyric.csproj

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
33
<Title>$(ProjectName)</Title>
4-
<Version>2.6.0.1</Version>
5-
<Copyright>Copyright © 2019-2020 Wwh</Copyright>
4+
<Version>2.6.1.0</Version>
5+
<Copyright>Copyright © 2019-2021 Wwh</Copyright>
66
</PropertyGroup>
77
<PropertyGroup>
88
<TargetFrameworks>netcoreapp3.1;net472</TargetFrameworks>
9+
<LangVersion>8.0</LangVersion>
910
<OutputPath>..\bin\$(Configuration)</OutputPath>
1011
<OutputType>Exe</OutputType>
1112
</PropertyGroup>
1213
<ItemGroup>
13-
<PackageReference Include="NeteaseCloudMusicApi" Version="3.25.3" />
14+
<PackageReference Include="NeteaseCloudMusicApi" Version="3.25.3.9999" />
1415
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
1516
<PackageReference Include="TagLibSharp" Version="2.2.0" />
1617
</ItemGroup>

NLyric/NLyricImpl.cs

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public static class NLyricImpl {
2121
private static readonly FuzzySettings _fuzzySettings = AllSettings.Default.Fuzzy;
2222
private static readonly MatchSettings _matchSettings = AllSettings.Default.Match;
2323
private static readonly LyricSettings _lyricSettings = AllSettings.Default.Lyric;
24+
private static readonly CloudMusic _cloudMusic = new CloudMusic();
2425
private static readonly HashSet<string> _failMatchAlbums = new HashSet<string>();
2526
// AlbumName
2627
private static readonly Dictionary<int, NcmTrack[]> _cachedNcmTrackses = new Dictionary<int, NcmTrack[]>();
@@ -57,7 +58,7 @@ private static async Task LoginIfNeedAsync(Arguments arguments) {
5758
}
5859
else {
5960
FastConsole.WriteLine("登录中...", ConsoleColor.Green);
60-
if (await CloudMusic.LoginAsync(arguments.Account, arguments.Password)) {
61+
if (await _cloudMusic.LoginAsync(arguments.Account, arguments.Password)) {
6162
FastConsole.WriteLine("登录成功!", ConsoleColor.Green);
6263
}
6364
else {
@@ -245,7 +246,7 @@ private static async Task<AlbumInfo> SearchAlbumAsync(Album album) {
245246
private static async Task<NcmTrack[]> GetAlbumTracksAsync(AlbumInfo albumInfo) {
246247
if (!_cachedNcmTrackses.TryGetValue(albumInfo.Id, out var ncmTracks)) {
247248
var list = new List<NcmTrack>();
248-
foreach (var item in await CloudMusic.GetTracksAsync(albumInfo.Id)) {
249+
foreach (var item in await _cloudMusic.GetTracksAsync(albumInfo.Id)) {
249250
if ((await GetLyricAsync(item.Id)).IsCollected)
250251
list.Add(item);
251252
}
@@ -305,7 +306,7 @@ private static async Task<NcmAlbum> MapToAsync(Album album) {
305306
private static async Task<NcmTrack> MapToAsync(Track track, bool withArtists) {
306307
var ncmTracks = default(NcmTrack[]);
307308
try {
308-
ncmTracks = await CloudMusic.SearchTrackAsync(track, _searchSettings.Limit, withArtists);
309+
ncmTracks = await _cloudMusic.SearchTrackAsync(track, _searchSettings.Limit, withArtists);
309310
}
310311
catch (KeywordForbiddenException ex1) {
311312
FastConsole.WriteError(ex1.Message);
@@ -333,7 +334,7 @@ private static async Task<NcmTrack> MapToAsync(Track track, bool withArtists) {
333334
private static async Task<NcmAlbum> MapToAsync(Album album, bool withArtists) {
334335
var ncmAlbums = default(NcmAlbum[]);
335336
try {
336-
ncmAlbums = await CloudMusic.SearchAlbumAsync(album, _searchSettings.Limit, withArtists);
337+
ncmAlbums = await _cloudMusic.SearchAlbumAsync(album, _searchSettings.Limit, withArtists);
337338
}
338339
catch (KeywordForbiddenException ex1) {
339340
FastConsole.WriteError(ex1.Message);
@@ -389,19 +390,18 @@ private static void SortDatabase() {
389390
}
390391

391392
private static void SaveDatabaseCore(string databasePath) {
392-
using (var stream = new FileStream(databasePath, FileMode.OpenOrCreate))
393-
using (var writer = new StreamWriter(stream))
394-
writer.Write(FormatJson(JsonConvert.SerializeObject(_database)));
393+
using var stream = new FileStream(databasePath, FileMode.OpenOrCreate);
394+
using var writer = new StreamWriter(stream);
395+
writer.Write(FormatJson(JsonConvert.SerializeObject(_database)));
395396
}
396397

397398
private static string FormatJson(string json) {
398-
using (var writer = new StringWriter())
399-
using (var jsonWriter = new JsonTextWriter(writer) { Formatting = Formatting.Indented })
400-
using (var reader = new StringReader(json))
401-
using (var jsonReader = new JsonTextReader(reader)) {
402-
jsonWriter.WriteToken(jsonReader);
403-
return writer.ToString();
404-
}
399+
using var writer = new StringWriter();
400+
using var jsonWriter = new JsonTextWriter(writer) { Formatting = Formatting.Indented };
401+
using var reader = new StringReader(json);
402+
using var jsonReader = new JsonTextReader(reader);
403+
jsonWriter.WriteToken(jsonReader);
404+
return writer.ToString();
405405
}
406406
#endregion
407407

@@ -498,7 +498,7 @@ private static TSource Select<TSource, TTarget>(TSource[] sources, TTarget targe
498498
FastConsole.WriteInfo("已选择:" + result.ToString());
499499
return result;
500500

501-
string TrackOrAlbumToString(ITrackOrAlbum trackOrAlbum) {
501+
static string TrackOrAlbumToString(ITrackOrAlbum trackOrAlbum) {
502502
if (trackOrAlbum.Artists.Count == 0)
503503
return trackOrAlbum.Name;
504504
return trackOrAlbum.Name + " by " + string.Join(",", trackOrAlbum.Artists);
@@ -598,7 +598,7 @@ private static async Task<bool> TryDownloadLyricAsync(AudioInfo audioInfo) {
598598

599599
private static async Task<NcmLyric> GetLyricAsync(int trackId) {
600600
if (!_cachedNcmLyrics.TryGetValue(trackId, out var lyric)) {
601-
lyric = await CloudMusic.GetLyricAsync(trackId);
601+
lyric = await _cloudMusic.GetLyricAsync(trackId);
602602
lock (((ICollection)_cachedNcmLyrics).SyncRoot)
603603
_cachedNcmLyrics[trackId] = lyric;
604604
}
@@ -701,12 +701,12 @@ private static Task AccelerateAllTracksAsync(AudioInfo[] audioInfos) {
701701
}
702702

703703
private static async Task AccelerateAllLyricsAsync(AudioInfo[] audioInfos) {
704-
const int STEP = 100;
704+
const int STEP = 50;
705705

706706
int[] trackIds = audioInfos.Select(t => t.TrackInfo.Id).ToArray();
707707
for (int i = 0; i < trackIds.Length; i += STEP) {
708708
var trackIdMap = new Dictionary<string, int>(STEP);
709-
var queries = new Dictionary<string, string>(STEP);
709+
var queries = new Dictionary<string, object>(STEP);
710710
int kMax = i + STEP <= trackIds.Length ? STEP : trackIds.Length % STEP;
711711
for (int k = 0; k < kMax; k++) {
712712
string route = "/api/song/lyric" + new string('/', k);
@@ -718,7 +718,7 @@ private static async Task AccelerateAllLyricsAsync(AudioInfo[] audioInfos) {
718718
["tv"] = -1
719719
});
720720
}
721-
var (isOk, json) = await CloudMusic.Api.RequestAsync(CloudMusicApiProviders.Batch, queries);
721+
var (isOk, json) = await _cloudMusic.Api.RequestAsync(CloudMusicApiProviders.Batch, queries);
722722
if (!isOk) {
723723
FastConsole.WriteError($"[Experimental] 歌词 {i}+{STEP} 加速失败!");
724724
continue;
@@ -730,7 +730,7 @@ private static async Task AccelerateAllLyricsAsync(AudioInfo[] audioInfos) {
730730
FastConsole.WriteError($"[Experimental] 歌词 {trackId} at {i}+{STEP} 加速失败!");
731731
continue;
732732
}
733-
_cachedNcmLyrics[trackId] = CloudMusic.ParseLyric(trackId, lyricJson);
733+
_cachedNcmLyrics[trackId] = _cloudMusic.ParseLyric(trackId, lyricJson);
734734
}
735735
}
736736
}

NLyric/Ncm/CloudMusic.cs

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,21 @@
99
using NLyric.Lyrics;
1010

1111
namespace NLyric.Ncm {
12-
public static class CloudMusic {
13-
private static readonly CloudMusicApi _api = new CloudMusicApi();
12+
public sealed class CloudMusic {
13+
private readonly CloudMusicApi _api = new CloudMusicApi();
1414

15-
public static CloudMusicApi Api => _api;
15+
public CloudMusicApi Api => _api;
1616

17-
public static async Task<bool> LoginAsync(string account, string password) {
18-
var queries = new Dictionary<string, string>();
17+
public async Task<bool> LoginAsync(string account, string password) {
18+
var queries = new Dictionary<string, object>();
1919
bool isPhone = Regex.Match(account, "^[0-9]+$").Success;
2020
queries[isPhone ? "phone" : "email"] = account;
2121
queries["password"] = password;
2222
var (result, _) = await _api.RequestAsync(isPhone ? CloudMusicApiProviders.LoginCellphone : CloudMusicApiProviders.Login, queries);
2323
return result;
2424
}
2525

26-
public static async Task<NcmTrack[]> SearchTrackAsync(Track track, int limit, bool withArtists) {
26+
public async Task<NcmTrack[]> SearchTrackAsync(Track track, int limit, bool withArtists) {
2727
var keywords = new List<string>();
2828
if (track.Name.Length != 0)
2929
keywords.Add(track.Name);
@@ -33,10 +33,10 @@ public static async Task<NcmTrack[]> SearchTrackAsync(Track track, int limit, bo
3333
throw new ArgumentException("歌曲信息无效");
3434
for (int i = 0; i < keywords.Count; i++)
3535
keywords[i] = keywords[i].WholeWordReplace();
36-
var (isOk, json) = await _api.RequestAsync(CloudMusicApiProviders.Search, new Dictionary<string, string> {
36+
var (isOk, json) = await _api.RequestAsync(CloudMusicApiProviders.Search, new Dictionary<string, object> {
3737
{ "keywords", string.Join(" ", keywords) },
38-
{ "type", "1" },
39-
{ "limit", limit.ToString() }
38+
{ "type", 1 },
39+
{ "limit", limit }
4040
});
4141
if (!isOk)
4242
throw new ApplicationException(nameof(CloudMusicApiProviders.Search) + " API错误");
@@ -45,14 +45,14 @@ public static async Task<NcmTrack[]> SearchTrackAsync(Track track, int limit, bo
4545
return ParseSearchTracks(json);
4646
}
4747

48-
public static NcmTrack[] ParseSearchTracks(JObject json) {
48+
public NcmTrack[] ParseSearchTracks(JObject json) {
4949
json = (JObject)json["result"];
5050
if (!(json["songs"] is JArray songs))
5151
return Array.Empty<NcmTrack>();
5252
return songs.Select(t => ParseTrack(t, false)).ToArray();
5353
}
5454

55-
public static async Task<NcmAlbum[]> SearchAlbumAsync(Album album, int limit, bool withArtists) {
55+
public async Task<NcmAlbum[]> SearchAlbumAsync(Album album, int limit, bool withArtists) {
5656
var keywords = new List<string>();
5757
if (album.Name.Length != 0)
5858
keywords.Add(album.Name);
@@ -62,10 +62,10 @@ public static async Task<NcmAlbum[]> SearchAlbumAsync(Album album, int limit, bo
6262
throw new ArgumentException("专辑信息无效");
6363
for (int i = 0; i < keywords.Count; i++)
6464
keywords[i] = keywords[i].WholeWordReplace();
65-
var (isOk, json) = await _api.RequestAsync(CloudMusicApiProviders.Search, new Dictionary<string, string> {
65+
var (isOk, json) = await _api.RequestAsync(CloudMusicApiProviders.Search, new Dictionary<string, object> {
6666
{ "keywords", string.Join(" ", keywords) },
67-
{ "type", "10" },
68-
{ "limit", limit.ToString() }
67+
{ "type", 10 },
68+
{ "limit", limit }
6969
});
7070
if (!isOk)
7171
throw new ApplicationException(nameof(CloudMusicApiProviders.Search) + " API错误");
@@ -74,37 +74,37 @@ public static async Task<NcmAlbum[]> SearchAlbumAsync(Album album, int limit, bo
7474
return ParseSearchAlbums(json);
7575
}
7676

77-
public static NcmAlbum[] ParseSearchAlbums(JObject json) {
77+
public NcmAlbum[] ParseSearchAlbums(JObject json) {
7878
json = (JObject)json["result"];
7979
if (!(json["albums"] is JArray albums))
8080
return Array.Empty<NcmAlbum>();
8181
// albumCount不可信,搜索"U-87 陈奕迅"返回albums有内容,但是albumCount为0
8282
return albums.Select(t => ParseAlbum(t)).ToArray();
8383
}
8484

85-
public static async Task<NcmTrack[]> GetTracksAsync(int albumId) {
86-
var (isOk, json) = await _api.RequestAsync(CloudMusicApiProviders.Album, new Dictionary<string, string> {
87-
{ "id", albumId.ToString() }
85+
public async Task<NcmTrack[]> GetTracksAsync(int albumId) {
86+
var (isOk, json) = await _api.RequestAsync(CloudMusicApiProviders.Album, new Dictionary<string, object> {
87+
{ "id", albumId }
8888
});
8989
if (!isOk)
9090
throw new ApplicationException(nameof(CloudMusicApiProviders.Album) + " API错误");
9191
return ParseTracks(json);
9292
}
9393

94-
public static NcmTrack[] ParseTracks(JObject json) {
94+
public NcmTrack[] ParseTracks(JObject json) {
9595
return json["songs"].Select(t => ParseTrack(t, true)).ToArray();
9696
}
9797

98-
public static async Task<NcmLyric> GetLyricAsync(int trackId) {
99-
var (isOk, json) = await _api.RequestAsync(CloudMusicApiProviders.Lyric, new Dictionary<string, string> {
100-
{ "id", trackId.ToString() }
98+
public async Task<NcmLyric> GetLyricAsync(int trackId) {
99+
var (isOk, json) = await _api.RequestAsync(CloudMusicApiProviders.Lyric, new Dictionary<string, object> {
100+
{ "id", trackId }
101101
});
102102
if (!isOk)
103103
throw new ApplicationException(nameof(CloudMusicApiProviders.Lyric) + " API错误");
104104
return ParseLyric(trackId, json);
105105
}
106106

107-
public static NcmLyric ParseLyric(int trackId, JObject json) {
107+
public NcmLyric ParseLyric(int trackId, JObject json) {
108108
if (json is null)
109109
throw new ArgumentNullException(nameof(json));
110110

@@ -119,26 +119,26 @@ public static NcmLyric ParseLyric(int trackId, JObject json) {
119119
return new NcmLyric(trackId, true, false, rawLrc, rawVersion, translatedLrc, translatedVersion);
120120
}
121121

122-
private static NcmAlbum ParseAlbum(JToken json) {
122+
private NcmAlbum ParseAlbum(JToken json) {
123123
var album = new Album((string)json["name"], ParseNames(json["artists"]));
124124
var ncmAlbum = new NcmAlbum(album, (int)json["id"]);
125125
return ncmAlbum;
126126
}
127127

128-
private static NcmTrack ParseTrack(JToken json, bool isShortName) {
128+
private NcmTrack ParseTrack(JToken json, bool isShortName) {
129129
var track = new Track((string)json["name"], ParseNames(json[isShortName ? "ar" : "artists"]));
130130
var ncmTrack = new NcmTrack(track, (int)json["id"]);
131131
return ncmTrack;
132132
}
133133

134-
private static string[] ParseNames(JToken json) {
134+
private string[] ParseNames(JToken json) {
135135
return json.Select(t => (string)t["name"]).ToArray();
136136
}
137137

138-
private static (Lrc, int) ParseLyric(JToken json) {
138+
private (Lrc, int) ParseLyric(JToken json) {
139139
string lyric = (string)json["lyric"];
140140
var lrc = string.IsNullOrEmpty(lyric) ? null : Lrc.UnsafeParse(lyric);
141-
var version = (int)json["version"];
141+
int version = (int)json["version"];
142142
return (lrc, version);
143143
}
144144
}

NLyric/The163KeyHelper.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ public static bool TryGetTrackId(Tag tag, out int trackId) {
3939
try {
4040
the163Key = the163Key.Substring(22);
4141
byte[] byt163Key = Convert.FromBase64String(the163Key);
42-
using (var cryptoTransform = _aes.CreateDecryptor())
43-
byt163Key = cryptoTransform.TransformFinalBlock(byt163Key, 0, byt163Key.Length);
42+
using var cryptoTransform = _aes.CreateDecryptor();
43+
byt163Key = cryptoTransform.TransformFinalBlock(byt163Key, 0, byt163Key.Length);
4444
trackId = (int)JObject.Parse(Encoding.UTF8.GetString(byt163Key).Substring(6))["musicId"];
4545
}
4646
catch {

0 commit comments

Comments
 (0)