Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
a880f84
Chore: 添加README.md
zhh134 Feb 3, 2026
307545f
完善网易电台与节目模型及映射实现
zhh134 Feb 3, 2026
3aaf5ac
移除冗余 using,新增 ArtistSubscribe/Unsubscribe API
zhh134 Feb 4, 2026
083c595
重构歌手订阅/取消订阅API为EApi协议并完善实现
zhh134 Feb 4, 2026
b29cef5
Feat: 添加DjChannelSubscribeApi.
zhh134 Feb 5, 2026
6cd83be
Feat<Api>: 引入UserFollowApi.
zhh134 Feb 5, 2026
2dd3237
Feat<Api>: 添加VideoSubscribeApi、VideoUnsubscribeApi.
zhh134 Feb 5, 2026
a6b8d3f
Fix: 解决部分Api需要CheckToken的问题。
zhh134 Feb 6, 2026
a8f6cc9
Feat: 添加新方法
zhh134 Feb 6, 2026
65a388a
Chore<Namespace>: 迁移命名空间。
zhh134 Feb 8, 2026
2ecf8c1
Chore<Release>: NeteaseApi 0.1.1
zhh134 Feb 8, 2026
a116ed3
Merge branch 'main' of https://github.com/HyPlayer/HyPlayer.NeteasePr…
zhh134 Feb 8, 2026
a8b711b
Merge branch 'main' of https://github.com/HyPlayer/HyPlayer.NeteasePr…
Raspberry-Monster Feb 9, 2026
d13914a
chores: Force character set to UTF-8-BOM
Raspberry-Monster Feb 9, 2026
ab678b0
chores: Implement UnitTest and fix api errors
Raspberry-Monster Feb 9, 2026
5d52a86
chores: Disable Unit Test For UserUnfollow and UserFollow
Raspberry-Monster Feb 9, 2026
f1770e4
chores: Restore TargetFrameworks
Raspberry-Monster Feb 10, 2026
f050b6a
Update nativeaot-test.yml
Raspberry-Monster Feb 12, 2026
5759386
chores: Update Dependencies
Raspberry-Monster Feb 13, 2026
eed77eb
Merge branch 'dev/zhh135/feat/netease-provider/radio-channel-apis' of…
Raspberry-Monster Feb 13, 2026
7ac7882
Update nativeaot-test.yml
Raspberry-Monster Feb 13, 2026
c54f1d7
Update nativeaot-test.yml
Raspberry-Monster Feb 13, 2026
f20ddff
Update nativeaot-test.yml
Raspberry-Monster Feb 13, 2026
3cbff6b
Update nativeaot-test.yml
Raspberry-Monster Feb 13, 2026
9c942f1
Update nativeaot-test.yml
Raspberry-Monster Feb 13, 2026
5f8774a
chores: 修改CancellationToken初始化方式
Raspberry-Monster Feb 14, 2026
b4203e1
typo: 修复无法编译的错误
Raspberry-Monster Feb 14, 2026
ddfaa2b
chores: 改进代码格式
Raspberry-Monster Feb 14, 2026
b571151
bugfix: 修复歌手无法正确返回专辑封面的问题
Raspberry-Monster Feb 14, 2026
a229a70
typo: 修正IdentifyRoute错误的问题
Raspberry-Monster Feb 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/nativeaot-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,10 @@ jobs:
${{ secrets.NETEASE_LOGIN_SECRET }}

- name: Restore
run: dotnet restore -r linux-x64 -p:TargetFramework=net9.0
run: dotnet restore -r linux-x64 -p:TargetFramework=net10.0 -p:RuntimeIdentifier=linux-x64

- name: Publish with AOT
run: dotnet publish -c Release -f net9.0 -r linux-x64 --no-restore
run: dotnet publish -c Release -f net10.0 -r linux-x64 --no-restore

- name: Run AOT tests
run: ./HyPlayer.NeteaseProvider.Tests/bin/Release/net9.0/linux-x64/publish/HyPlayer.NeteaseProvider.Tests
run: ./HyPlayer.NeteaseProvider.Tests/bin/Release/net10.0/linux-x64/publish/HyPlayer.NeteaseProvider.Tests
2 changes: 1 addition & 1 deletion EasyDumper/EasyDumper.csproj
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
Expand Down
2 changes: 1 addition & 1 deletion HyPlayer.NeteaseApi/ApiContracts/Album/AlbumApi.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using HyPlayer.NeteaseApi.ApiContracts.Album;
using HyPlayer.NeteaseApi.ApiContracts.Album;
using HyPlayer.NeteaseApi.Bases;
using HyPlayer.NeteaseApi.Bases.EApiContractBases;
using HyPlayer.NeteaseApi.Models;
Expand Down
44 changes: 2 additions & 42 deletions HyPlayer.NeteaseApi/ApiContracts/Artist/ArtistSongsApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public class ArtistSongsApi : EApiContractBase<ArtistSongsRequest, ArtistSongsRe
ArtistSongsActualRequest>
{
public override string IdentifyRoute => "/artist/songs";
public override string Url { get; protected set; } = "https://interface3.music.163.com/eapi/v2/artist/songs";
public override string Url { get; protected set; } = "https://interfacepc.music.163.com/eapi/v2/artist/songs";
public override HttpMethod Method => HttpMethod.Post;

public override Task MapRequest(ApiHandlerOption option)
Expand All @@ -32,19 +32,6 @@ public override Task MapRequest(ApiHandlerOption option)
ActualRequest = new ArtistSongsActualRequest
{
Id = Request.ArtistId,
OrderType = Request.OrderType switch
{
ArtistSongsOrderType.Time => "time",
_ => "hot"
},
WorkType = Request.WorkType switch
{
ArtistSongsWorkType.All => 1,
ArtistSongsWorkType.Sing => 5,
ArtistSongsWorkType.Lyric => 6,
ArtistSongsWorkType.Compose => 7,
_ => 1
},
Offset = Request.Offset,
Limit = Request.Limit
};
Expand All @@ -57,44 +44,17 @@ public override Task MapRequest(ApiHandlerOption option)
public class ArtistSongsActualRequest : EApiActualRequestBase
{
[JsonPropertyName("id")] public required string Id { get; set; }
[JsonPropertyName("private_cloud")] public bool PrivateCloud => true;
[JsonPropertyName("work_type")] public int WorkType = 1;
[JsonPropertyName("order")] public string OrderType { get; set; } = "hot";
[JsonPropertyName("offset")] public int Offset { get; set; } = 0;
[JsonPropertyName("limit")] public int Limit { get; set; } = 100;
}

public enum ArtistSongsOrderType
{
Hot,
Time
}

public enum ArtistSongsWorkType
{
All,
Sing,
Lyric,
Compose
}

public class ArtistSongsRequest : RequestBase
{
/// <summary>
/// 歌手 ID
/// </summary>
public required string ArtistId { get; set; }

/// <summary>
/// 排序类型 hot, time
/// </summary>
public ArtistSongsOrderType OrderType { get; set; } = ArtistSongsOrderType.Hot;

/// <summary>
///作品类型
/// </summary>
public ArtistSongsWorkType WorkType { get; set; } = ArtistSongsWorkType.All;

/// <summary>
/// 起始位置
/// </summary>
Expand All @@ -110,6 +70,6 @@ public class ArtistSongsResponse : CodedResponseBase
{
[JsonPropertyName("total")] public int Total { get; set; }
[JsonPropertyName("more")] public bool HasMore { get; set; }
[JsonPropertyName("songs")] public EmittedSongDtoWithPrivilege[]? Songs { get; set; }
[JsonPropertyName("songs")] public ArtistSongDto[]? Songs { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using HyPlayer.NeteaseApi.ApiContracts.Artist;
using HyPlayer.NeteaseApi.Bases;
using HyPlayer.NeteaseApi.Bases.ApiContractBases;
using HyPlayer.NeteaseApi.Models.ResponseModels;
using HyPlayer.NeteaseApi.Bases.ApiContractBases;
using System.Text.Json.Serialization;
using HyPlayer.NeteaseApi.Bases.WeApiContractBases;

Expand Down
56 changes: 56 additions & 0 deletions HyPlayer.NeteaseApi/ApiContracts/Artist/ArtistSubscribeApi.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
using HyPlayer.NeteaseApi.ApiContracts.Artist;
using HyPlayer.NeteaseApi.Bases;
using HyPlayer.NeteaseApi.Bases.EApiContractBases;
using System.Text.Json.Serialization;

namespace HyPlayer.NeteaseApi.ApiContracts
{
public static partial class NeteaseApis
{
/// <summary>
/// 艺术家收藏
/// </summary>
public static ArtistSubscribeApi ArtistSubscribeApi => new();
}
}

namespace HyPlayer.NeteaseApi.ApiContracts.Artist
{
public class ArtistSubscribeApi : EApiContractBase<ArtistSubscribeRequest, ArtistSubscribeResponse, ErrorResultBase,
ArtistSubscribeActualRequest>, IFakeCheckTokenApi
{
public override string ApiPath { get; protected set; } = "/api/artist/sub";

public override string IdentifyRoute => "/artist/subscribe";

public override string Url { get; protected set; } = "https://interface.music.163.com/eapi/artist/sub";

public override HttpMethod Method => HttpMethod.Post;

public override Task MapRequest(ApiHandlerOption option)
{
if (Request is not null)
{
ActualRequest = new ArtistSubscribeActualRequest
{
ArtistId = Request.ArtistId
};
}
return Task.CompletedTask;
}
}

public class ArtistSubscribeRequest : RequestBase
{
public required string ArtistId { get; set; }
}

public class ArtistSubscribeResponse : CodedResponseBase
{
}

public class ArtistSubscribeActualRequest : EApiActualRequestBase
{
[JsonPropertyName("artistId")] public required string ArtistId { get; set; }
}
}
13 changes: 13 additions & 0 deletions HyPlayer.NeteaseApi/ApiContracts/Artist/ArtistTopSongApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -95,4 +95,17 @@ public class ArtistTopSongActualRequest : EApiActualRequestBase
[JsonPropertyName("offset")] public int Offset { get; set; } = 0;
[JsonPropertyName("limit")] public int Limit { get; set; } = 100;
}
public enum ArtistSongsOrderType
{
Hot,
Time
}

public enum ArtistSongsWorkType
{
All,
Sing,
Lyric,
Compose
}
}
59 changes: 59 additions & 0 deletions HyPlayer.NeteaseApi/ApiContracts/Artist/ArtistUnsubscribeApi.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
using HyPlayer.NeteaseApi.Bases;
using HyPlayer.NeteaseApi.Bases.EApiContractBases;
using System.Text.Json;
using System.Text.Json.Serialization;
using HyPlayer.NeteaseApi.ApiContracts.Artist;

namespace HyPlayer.NeteaseApi.ApiContracts
{
public static partial class NeteaseApis
{
public static ArtistUnsubscribeApi ArtistUnsubscribeApi => new();
}
}

namespace HyPlayer.NeteaseApi.ApiContracts.Artist
{
public class ArtistUnsubscribeApi : EApiContractBase<ArtistUnsubscribeRequest, ArtistUnsubscribeResponse, ErrorResultBase,
ArtistUnsubscribeActualRequest>
{
public override string ApiPath { get; protected set; } = "/api/artist/unsub";

public override string IdentifyRoute => "/artist/unsub";

public override string Url { get; protected set; } = "https://interface.music.163.com/eapi/artist/";

public override HttpMethod Method => HttpMethod.Post;

public override Task MapRequest(ApiHandlerOption option)
{
if (Request is not null)
{
ActualRequest = new ArtistUnsubscribeActualRequest
{
// serialize C# array of ids to JSON array string expected by the API
ArtistIds = JsonSerializer.Serialize(Request.ArtistIds)
};
Url += "unsub";
}
return Task.CompletedTask;
}
}

public class ArtistUnsubscribeRequest : RequestBase
{
/// <summary>
/// Array of artist ids. Will be converted to a JSON array string in the request, e.g. new long[] { 35374786 } -> "[35374786]"
/// </summary>
public required long[] ArtistIds { get; set; }
}

public class ArtistUnsubscribeResponse : CodedResponseBase
{
}

public class ArtistUnsubscribeActualRequest : EApiActualRequestBase
{
[JsonPropertyName("artistIds")] public required string ArtistIds { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using HyPlayer.NeteaseApi.ApiContracts.Cloud;
using HyPlayer.NeteaseApi.ApiContracts.Cloud;
using HyPlayer.NeteaseApi.Bases;
using HyPlayer.NeteaseApi.Bases.RawApiContractBases;
using System.Text.Json.Serialization;
Expand Down
2 changes: 1 addition & 1 deletion HyPlayer.NeteaseApi/ApiContracts/Comment/CommentLikeApi.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using HyPlayer.NeteaseApi.ApiContracts.Comment;
using HyPlayer.NeteaseApi.Bases;
using HyPlayer.NeteaseApi.Bases.ApiContractBases;
using HyPlayer.NeteaseApi.Extensions;
using HyPlayer.NeteaseApi.Models;
using HyPlayer.NeteaseApi.Bases.ApiContractBases;
using System.Text.Json.Serialization;
using HyPlayer.NeteaseApi.Bases.WeApiContractBases;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
using HyPlayer.NeteaseApi.Bases;
using HyPlayer.NeteaseApi.Bases.EApiContractBases;
using System.Text.Json.Serialization;
using HyPlayer.NeteaseApi.ApiContracts.DjChannel;

namespace HyPlayer.NeteaseApi.ApiContracts
{
public static partial class NeteaseApis
{
public static DjChannelSubscribeApi DjChannelSubscribeApi => new();
}
}

namespace HyPlayer.NeteaseApi.ApiContracts.DjChannel
{
public class DjChannelSubscribeApi : EApiContractBase<DjChannelSubscribeRequest, DjChannelSubscribeResponse, ErrorResultBase, DjChannelSubscribeActualRequest>
{
public override string ApiPath { get; protected set; } = " /api/djradio/sub";

public override string IdentifyRoute => "/djchannel/subscribe";

public override string Url { get; protected set; } = "https://interface.music.163.com/eapi/djradio/";

public override HttpMethod Method => HttpMethod.Post;

public override Task MapRequest(ApiHandlerOption option)
{
if (Request is not null)
{
ActualRequest = new DjChannelSubscribeActualRequest
{
Id = Request.Id
};
Url += Request.IsSubscribe ? "sub" : "unsub";
}

return Task.CompletedTask;
}
}

public class DjChannelSubscribeActualRequest : EApiActualRequestBase
{
[JsonPropertyName("id")] public required string Id { get; set; }
}

public class DjChannelSubscribeResponse : CodedResponseBase
{
}

public class DjChannelSubscribeRequest : RequestBase
{
public required string Id { get; set; }
public bool IsSubscribe { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using HyPlayer.NeteaseApi.ApiContracts.ListenTogether.Dual;
using HyPlayer.NeteaseApi.ApiContracts.ListenTogether.Dual;
using HyPlayer.NeteaseApi.Bases;
using HyPlayer.NeteaseApi.Bases.EApiContractBases;
using System.Text.Json.Serialization;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using HyPlayer.NeteaseApi.ApiContracts.ListenTogether.Dual;
using HyPlayer.NeteaseApi.ApiContracts.ListenTogether.Dual;
using HyPlayer.NeteaseApi.Bases;
using HyPlayer.NeteaseApi.Bases.EApiContractBases;
using System.Text.Json.Serialization;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using HyPlayer.NeteaseApi.ApiContracts.ListenTogether;
using HyPlayer.NeteaseApi.ApiContracts.ListenTogether;
using HyPlayer.NeteaseApi.ApiContracts.ListenTogether.Dual;
using HyPlayer.NeteaseApi.Bases;
using HyPlayer.NeteaseApi.Bases.EApiContractBases;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using HyPlayer.NeteaseApi.ApiContracts.ListenTogether;
using HyPlayer.NeteaseApi.ApiContracts.ListenTogether;
using HyPlayer.NeteaseApi.ApiContracts.ListenTogether.Dual;
using HyPlayer.NeteaseApi.Bases;
using HyPlayer.NeteaseApi.Bases.EApiContractBases;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using HyPlayer.NeteaseApi.ApiContracts.ListenTogether;
using HyPlayer.NeteaseApi.ApiContracts.ListenTogether;
using HyPlayer.NeteaseApi.Bases;
using HyPlayer.NeteaseApi.Bases.EApiContractBases;
using System.Text.Json.Serialization;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using HyPlayer.NeteaseApi.ApiContracts.ListenTogether.Dual;
using HyPlayer.NeteaseApi.ApiContracts.ListenTogether.Dual;
using HyPlayer.NeteaseApi.Bases;
using HyPlayer.NeteaseApi.Bases.EApiContractBases;
using System.Text.Json.Serialization;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using HyPlayer.NeteaseApi.ApiContracts.ListenTogether;
using HyPlayer.NeteaseApi.ApiContracts.ListenTogether;
using HyPlayer.NeteaseApi.ApiContracts.ListenTogether.Dual;
using HyPlayer.NeteaseApi.Bases;
using HyPlayer.NeteaseApi.Bases.EApiContractBases;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using HyPlayer.NeteaseApi.ApiContracts.ListenTogether;
using HyPlayer.NeteaseApi.ApiContracts.ListenTogether;
using HyPlayer.NeteaseApi.Bases;
using HyPlayer.NeteaseApi.Bases.EApiContractBases;
using System.Text.Json;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using HyPlayer.NeteaseApi.ApiContracts.ListenTogether;
using HyPlayer.NeteaseApi.ApiContracts.ListenTogether;
using HyPlayer.NeteaseApi.Bases;
using HyPlayer.NeteaseApi.Bases.EApiContractBases;
using System.Text.Json.Serialization;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using HyPlayer.NeteaseApi.ApiContracts.PersonalFM;
using HyPlayer.NeteaseApi.ApiContracts.PersonalFM;
using HyPlayer.NeteaseApi.Bases;
using HyPlayer.NeteaseApi.Bases.EApiContractBases;
using HyPlayer.NeteaseApi.Models.ResponseModels;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using HyPlayer.NeteaseApi.ApiContracts.PersonalFM;
using HyPlayer.NeteaseApi.ApiContracts.PersonalFM;
using HyPlayer.NeteaseApi.Bases;
using HyPlayer.NeteaseApi.Bases.ApiContractBases;
using System.Text.Json.Serialization;
Expand Down
Loading
Loading