diff --git a/src/ZonyLrcTools.Cli/Infrastructure/Lyric/InternalLyricDownloaderNames.cs b/src/ZonyLrcTools.Cli/Infrastructure/Lyric/InternalLyricDownloaderNames.cs
index 8a26016..2dafcef 100644
--- a/src/ZonyLrcTools.Cli/Infrastructure/Lyric/InternalLyricDownloaderNames.cs
+++ b/src/ZonyLrcTools.Cli/Infrastructure/Lyric/InternalLyricDownloaderNames.cs
@@ -9,12 +9,12 @@ namespace ZonyLrcTools.Cli.Infrastructure.Lyric
/// 网易云音乐歌词下载器。
///
public const string NetEase = nameof(NetEase);
-
+
///
/// QQ 音乐歌词下载器。
///
public const string QQ = nameof(QQ);
-
+
///
/// 酷狗音乐歌词下载器。
///
diff --git a/src/ZonyLrcTools.Cli/Infrastructure/Lyric/NetEase/JsonModel/GetSongDetailsRequest.cs b/src/ZonyLrcTools.Cli/Infrastructure/Lyric/NetEase/JsonModel/GetSongDetailsRequest.cs
index 5aeafa0..5934c70 100644
--- a/src/ZonyLrcTools.Cli/Infrastructure/Lyric/NetEase/JsonModel/GetSongDetailsRequest.cs
+++ b/src/ZonyLrcTools.Cli/Infrastructure/Lyric/NetEase/JsonModel/GetSongDetailsRequest.cs
@@ -9,11 +9,9 @@ namespace ZonyLrcTools.Cli.Infrastructure.Lyric.NetEase.JsonModel
SongId = songId;
SongIds = $"%5B{songId}%5D";
}
-
- [JsonProperty("id")]
- public int SongId { get; }
- [JsonProperty("ids")]
- public string SongIds { get; }
+ [JsonProperty("id")] public int SongId { get; }
+
+ [JsonProperty("ids")] public string SongIds { get; }
}
}
\ No newline at end of file
diff --git a/src/ZonyLrcTools.Cli/Infrastructure/Lyric/QQMusic/JsonModel/SongSearchRequest.cs b/src/ZonyLrcTools.Cli/Infrastructure/Lyric/QQMusic/JsonModel/SongSearchRequest.cs
index 028a532..4345614 100644
--- a/src/ZonyLrcTools.Cli/Infrastructure/Lyric/QQMusic/JsonModel/SongSearchRequest.cs
+++ b/src/ZonyLrcTools.Cli/Infrastructure/Lyric/QQMusic/JsonModel/SongSearchRequest.cs
@@ -48,7 +48,7 @@ namespace ZonyLrcTools.Cli.Infrastructure.Lyric.QQMusic.JsonModel
[JsonProperty("needNewCode")] public int UnknownParameter11 { get; set; }
- public SongSearchRequest()
+ protected SongSearchRequest()
{
UnknownParameter1 = 24;
ClientVersion = 1298;
diff --git a/src/ZonyLrcTools.Cli/Infrastructure/Lyric/QQMusic/JsonModel/SongSearchResponse.cs b/src/ZonyLrcTools.Cli/Infrastructure/Lyric/QQMusic/JsonModel/SongSearchResponse.cs
index f31323a..b0d0663 100644
--- a/src/ZonyLrcTools.Cli/Infrastructure/Lyric/QQMusic/JsonModel/SongSearchResponse.cs
+++ b/src/ZonyLrcTools.Cli/Infrastructure/Lyric/QQMusic/JsonModel/SongSearchResponse.cs
@@ -5,34 +5,28 @@ namespace ZonyLrcTools.Cli.Infrastructure.Lyric.QQMusic.JsonModel
{
public class SongSearchResponse
{
- [JsonProperty("code")]
- public int StatusCode { get; set; }
+ [JsonProperty("code")] public int StatusCode { get; set; }
- [JsonProperty("data")]
- public QQMusicInnerDataModel Data { get; set; }
+ [JsonProperty("data")] public QQMusicInnerDataModel Data { get; set; }
}
public class QQMusicInnerDataModel
{
- [JsonProperty("song")]
- public QQMusicInnerSongModel Song { get; set; }
+ [JsonProperty("song")] public QQMusicInnerSongModel Song { get; set; }
}
public class QQMusicInnerSongModel
{
- [JsonProperty("list")]
- public List SongItems { get; set; }
+ [JsonProperty("list")] public List SongItems { get; set; }
}
public class QQMusicInnerSongItem
{
- [JsonProperty("mid")]
- public string SongId { get; set; }
+ [JsonProperty("mid")] public string SongId { get; set; }
}
public class AlbumInfo
{
- [JsonProperty("id")]
- public long Id { get; set; }
+ [JsonProperty("id")] public long Id { get; set; }
}
}
\ No newline at end of file
diff --git a/src/ZonyLrcTools.Cli/Infrastructure/Lyric/QQMusic/QQLyricDownloader.cs b/src/ZonyLrcTools.Cli/Infrastructure/Lyric/QQMusic/QQLyricDownloader.cs
index 930682e..a3b23ca 100644
--- a/src/ZonyLrcTools.Cli/Infrastructure/Lyric/QQMusic/QQLyricDownloader.cs
+++ b/src/ZonyLrcTools.Cli/Infrastructure/Lyric/QQMusic/QQLyricDownloader.cs
@@ -1,4 +1,5 @@
using System.Threading.Tasks;
+using ZonyLrcTools.Cli.Infrastructure.Lyric.QQMusic.JsonModel;
using ZonyLrcTools.Cli.Infrastructure.Network;
namespace ZonyLrcTools.Cli.Infrastructure.Lyric.QQMusic
@@ -10,6 +11,8 @@ namespace ZonyLrcTools.Cli.Infrastructure.Lyric.QQMusic
private readonly IWarpHttpClient _warpHttpClient;
private readonly ILyricItemCollectionFactory _lyricItemCollectionFactory;
+ private const string QQSearchMusicUrl = @"https://c.y.qq.com/soso/fcgi-bin/client_search_cp";
+
public QQLyricDownloader(IWarpHttpClient warpHttpClient,
ILyricItemCollectionFactory lyricItemCollectionFactory)
{
@@ -17,8 +20,11 @@ namespace ZonyLrcTools.Cli.Infrastructure.Lyric.QQMusic
_lyricItemCollectionFactory = lyricItemCollectionFactory;
}
- protected override ValueTask DownloadDataAsync(LyricDownloaderArgs args)
+ protected override async ValueTask DownloadDataAsync(LyricDownloaderArgs args)
{
+ var searchResult = await _warpHttpClient.PostAsync(
+ QQSearchMusicUrl,
+ new SongSearchRequest(args.SongName, args.Artist));
throw new System.NotImplementedException();
}
diff --git a/src/ZonyLrcTools.Cli/Infrastructure/Network/NetworkOptions.cs b/src/ZonyLrcTools.Cli/Infrastructure/Network/NetworkOptions.cs
index 3620fe3..e7a39ca 100644
--- a/src/ZonyLrcTools.Cli/Infrastructure/Network/NetworkOptions.cs
+++ b/src/ZonyLrcTools.Cli/Infrastructure/Network/NetworkOptions.cs
@@ -9,7 +9,7 @@ namespace ZonyLrcTools.Cli.Infrastructure.Network
/// 是否启用了网络代理功能。
///
public bool Enable { get; set; }
-
+
///
/// 代理服务器的 Ip。
///
diff --git a/tests/ZonyLrcTools.Tests/Infrastructure/Album/NetEaseAlbumDownloader_Tests.cs b/tests/ZonyLrcTools.Tests/Infrastructure/Album/NetEaseAlbumDownloader_Tests.cs
index db9821a..6ebbe21 100644
--- a/tests/ZonyLrcTools.Tests/Infrastructure/Album/NetEaseAlbumDownloader_Tests.cs
+++ b/tests/ZonyLrcTools.Tests/Infrastructure/Album/NetEaseAlbumDownloader_Tests.cs
@@ -20,11 +20,11 @@ namespace ZonyLrcTools.Tests.Infrastructure.Album
downloader.ShouldNotBeNull();
var albumBytes = await downloader.DownloadAsync("东方红", null);
albumBytes.Length.ShouldBeGreaterThan(0);
-
+
// 显示具体的图像。
var tempAlbumPath = Path.Combine(Directory.GetCurrentDirectory(), "tempAlbum.png");
File.Delete(tempAlbumPath);
-
+
await using var file = File.Create(tempAlbumPath);
await using var ws = new BinaryWriter(file);
ws.Write(albumBytes);
diff --git a/tests/ZonyLrcTools.Tests/Infrastructure/Exceptions/ErrorCodeHelperTests.cs b/tests/ZonyLrcTools.Tests/Infrastructure/Exceptions/ErrorCodeHelperTests.cs
index 620eaf8..3b26c6a 100644
--- a/tests/ZonyLrcTools.Tests/Infrastructure/Exceptions/ErrorCodeHelperTests.cs
+++ b/tests/ZonyLrcTools.Tests/Infrastructure/Exceptions/ErrorCodeHelperTests.cs
@@ -10,7 +10,7 @@ namespace ZonyLrcTools.Tests.Infrastructure.Exceptions
public void LoadMessage_Test()
{
ErrorCodeHelper.LoadErrorMessage();
-
+
ErrorCodeHelper.ErrorMessages.ShouldNotBeNull();
ErrorCodeHelper.ErrorMessages.Count.ShouldBe(11);
}
diff --git a/tests/ZonyLrcTools.Tests/Infrastructure/Lyric/QQLyricDownloaderTests.cs b/tests/ZonyLrcTools.Tests/Infrastructure/Lyric/QQLyricDownloaderTests.cs
new file mode 100644
index 0000000..06b381b
--- /dev/null
+++ b/tests/ZonyLrcTools.Tests/Infrastructure/Lyric/QQLyricDownloaderTests.cs
@@ -0,0 +1,25 @@
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.Extensions.DependencyInjection;
+using Shouldly;
+using Xunit;
+using ZonyLrcTools.Cli.Infrastructure.Lyric;
+
+namespace ZonyLrcTools.Tests.Infrastructure.Lyric
+{
+ public class QQLyricDownloaderTests : TestBase
+ {
+ [Fact]
+ public async Task DownloadAsync_Test()
+ {
+ var downloaderList = ServiceProvider.GetRequiredService>();
+ var qqDownloader = downloaderList.FirstOrDefault(t => t.DownloaderName == InternalLyricDownloaderNames.QQ);
+
+ qqDownloader.ShouldNotBeNull();
+ var lyric = await qqDownloader.DownloadAsync("Hollow", "Janet Leon");
+ lyric.ShouldNotBeNull();
+ lyric.IsPruneMusic.ShouldBe(false);
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/ZonyLrcTools.Tests/Infrastructure/Network/WarpClientTests.cs b/tests/ZonyLrcTools.Tests/Infrastructure/Network/WarpClientTests.cs
index cf646f0..a90b634 100644
--- a/tests/ZonyLrcTools.Tests/Infrastructure/Network/WarpClientTests.cs
+++ b/tests/ZonyLrcTools.Tests/Infrastructure/Network/WarpClientTests.cs
@@ -40,7 +40,7 @@ namespace ZonyLrcTools.Tests.Infrastructure.Network
var client = ServiceProvider.GetRequiredService();
var response = await client.GetAsync(@"https://www.baidu.com");
-
+
response.ShouldNotBeNull();
response.ShouldContain("百度");
}
diff --git a/tests/ZonyLrcTools.Tests/TestBase.cs b/tests/ZonyLrcTools.Tests/TestBase.cs
index a8c00cd..ffdd77f 100644
--- a/tests/ZonyLrcTools.Tests/TestBase.cs
+++ b/tests/ZonyLrcTools.Tests/TestBase.cs
@@ -2,7 +2,6 @@ using System;
using Microsoft.Extensions.DependencyInjection;
using ZonyLrcTools.Cli.Commands;
using ZonyLrcTools.Cli.Infrastructure.DependencyInject;
-using ZonyLrcTools.Cli.Infrastructure.Extensions;
namespace ZonyLrcTools.Tests
{