├── .gitignore
├── .idea
└── .idea.Emby.Music-China-Provider
│ └── .idea
│ ├── .gitignore
│ ├── encodings.xml
│ ├── indexLayout.xml
│ └── vcs.xml
├── Emby.Music-China-Provider.sln
├── LICENSE
├── MusicChinaProvider
├── Consts
│ └── IpConsts.cs
├── Models
│ ├── ArtistDetailJson.cs
│ └── SearchArtistJson.cs
├── MusicChinaProvider.csproj
├── Plugin.cs
├── Provider
│ ├── ImageHelper.cs
│ ├── MusicArtistProvider.cs
│ └── MusicImageProvider.cs
└── bin
│ └── Debug
│ └── netstandard2.0
│ ├── MusicChinaProvider.deps.json
│ ├── MusicChinaProvider.dll
│ └── MusicChinaProvider.pdb
├── README.md
└── img
├── 1.png
├── 2.png
└── 3.jpg
/.gitignore:
--------------------------------------------------------------------------------
1 | obj/
2 | /packages/
3 | riderModule.iml
4 | /_ReSharper.Caches/
--------------------------------------------------------------------------------
/.idea/.idea.Emby.Music-China-Provider/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 | # Rider ignored files
5 | /.idea.Emby.Music-China-Provider.iml
6 | /contentModel.xml
7 | /projectSettingsUpdater.xml
8 | /modules.xml
9 | # Datasource local storage ignored files
10 | /dataSources/
11 | /dataSources.local.xml
12 | # Editor-based HTTP Client requests
13 | /httpRequests/
14 |
--------------------------------------------------------------------------------
/.idea/.idea.Emby.Music-China-Provider/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/.idea/.idea.Emby.Music-China-Provider/.idea/indexLayout.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/.idea.Emby.Music-China-Provider/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/Emby.Music-China-Provider.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MusicChinaProvider", "MusicChinaProvider\MusicChinaProvider.csproj", "{5750E473-016E-446E-8AED-48498327B0A1}"
4 | EndProject
5 | Global
6 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
7 | Debug|Any CPU = Debug|Any CPU
8 | Release|Any CPU = Release|Any CPU
9 | EndGlobalSection
10 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
11 | {5750E473-016E-446E-8AED-48498327B0A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
12 | {5750E473-016E-446E-8AED-48498327B0A1}.Debug|Any CPU.Build.0 = Debug|Any CPU
13 | {5750E473-016E-446E-8AED-48498327B0A1}.Release|Any CPU.ActiveCfg = Release|Any CPU
14 | {5750E473-016E-446E-8AED-48498327B0A1}.Release|Any CPU.Build.0 = Release|Any CPU
15 | EndGlobalSection
16 | EndGlobal
17 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 xixka
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/MusicChinaProvider/Consts/IpConsts.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace Emby.MeiamSub.Thunder.Consts
4 | {
5 | public class IpConsts
6 | {
7 | public static String RealIP = "36.56.36.36";
8 | }
9 | }
--------------------------------------------------------------------------------
/MusicChinaProvider/Models/ArtistDetailJson.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 |
3 | namespace MusicProvider.Models
4 | {
5 | public class Rank
6 | {
7 | ///
8 | ///
9 | ///
10 | public int rank { get; set; }
11 | ///
12 | ///
13 | ///
14 | public int type { get; set; }
15 | }
16 |
17 | public class Artist
18 | {
19 | ///
20 | ///
21 | ///
22 | public int id { get; set; }
23 | ///
24 | ///
25 | ///
26 | public string cover { get; set; }
27 | ///
28 | /// 周杰伦
29 | ///
30 | public string name { get; set; }
31 | ///
32 | ///
33 | ///
34 | public List transNames { get; set; }
35 | ///
36 | ///
37 | ///
38 | public List identities { get; set; }
39 | ///
40 | ///
41 | ///
42 | public string identifyTag { get; set; }
43 | ///
44 | ///
45 | ///
46 | public string briefDesc { get; set; }
47 | ///
48 | ///
49 | ///
50 | public Rank rank { get; set; }
51 | ///
52 | ///
53 | ///
54 | public int albumSize { get; set; }
55 | ///
56 | ///
57 | ///
58 | public int musicSize { get; set; }
59 | ///
60 | ///
61 | ///
62 | public int mvSize { get; set; }
63 | }
64 |
65 | public class Data
66 | {
67 | ///
68 | ///
69 | ///
70 | public int videoCount { get; set; }
71 | ///
72 | ///
73 | ///
74 | public Artist artist { get; set; }
75 | ///
76 | ///
77 | ///
78 | public string blacklist { get; set; }
79 | ///
80 | ///
81 | ///
82 | public string showPriMsg { get; set; }
83 | }
84 |
85 | public class ArtistDetailJson
86 | {
87 | ///
88 | ///
89 | ///
90 | public int code { get; set; }
91 | ///
92 | ///
93 | ///
94 | public string message { get; set; }
95 | ///
96 | ///
97 | ///
98 | public Data data { get; set; }
99 | }
100 |
101 | }
--------------------------------------------------------------------------------
/MusicChinaProvider/Models/SearchArtistJson.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 |
3 | namespace MusicProvider.Models
4 | {
5 |
6 |
7 | public class ArtistsItem
8 | {
9 | ///
10 | ///
11 | ///
12 | public string id { get; set; }
13 | ///
14 | /// 周杰伦
15 | ///
16 | public string name { get; set; }
17 | ///
18 | ///
19 | ///
20 | public string picUrl { get; set; }
21 | ///
22 | ///
23 | ///
24 | public List alias { get; set; }
25 | ///
26 | ///
27 | ///
28 | public int albumSize { get; set; }
29 | ///
30 | ///
31 | ///
32 | public int picId { get; set; }
33 | ///
34 | ///
35 | ///
36 | public string img1v1Url { get; set; }
37 | ///
38 | ///
39 | ///
40 | public int img1v1 { get; set; }
41 | ///
42 | ///
43 | ///
44 | public int mvSize { get; set; }
45 | ///
46 | ///
47 | ///
48 | public string followed { get; set; }
49 | ///
50 | ///
51 | ///
52 | public List alia { get; set; }
53 | ///
54 | ///
55 | ///
56 | public string trans { get; set; }
57 | }
58 |
59 | public class Result
60 | {
61 | ///
62 | ///
63 | ///
64 | public int artistCount { get; set; }
65 | ///
66 | ///
67 | ///
68 | public List artists { get; set; }
69 | }
70 |
71 | public class SearchJson
72 | {
73 | ///
74 | ///
75 | ///
76 | public Result result { get; set; }
77 | ///
78 | ///
79 | ///
80 | public int code { get; set; }
81 | }
82 | }
--------------------------------------------------------------------------------
/MusicChinaProvider/MusicChinaProvider.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netstandard2.0;
5 | 1.0.0.0
6 | 1.0.0.0
7 | MusicProvider
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/MusicChinaProvider/Plugin.cs:
--------------------------------------------------------------------------------
1 | using MediaBrowser.Common.Plugins;
2 | using MediaBrowser.Model.Drawing;
3 | using System;
4 | using System.IO;
5 | using MediaBrowser.Model.Logging;
6 |
7 | namespace Emby.MeiamSub.Thunder
8 | {
9 |
10 | ///
11 | /// 插件入口
12 | ///
13 | public class Plugin : BasePlugin, IHasThumbImage
14 | {
15 | ///
16 | /// 插件ID
17 | ///
18 | public override Guid Id => new Guid("D62D436F-E3C1-4F87-B73F-7EE13F3A5447");
19 |
20 | public static ILogger Logger { get; set; }
21 |
22 | ///
23 | /// 插件名称
24 | ///
25 | public override string Name => "Music-China";
26 |
27 | ///
28 | /// 插件描述
29 | ///
30 | public override string Description => "Chinese music";
31 |
32 | ///
33 | /// 缩略图格式化类型
34 | ///
35 | public ImageFormat ThumbImageFormat => ImageFormat.Gif;
36 |
37 | ///
38 | /// 缩略图资源文件
39 | ///
40 | ///
41 | public Stream GetThumbImage()
42 | {
43 | var type = GetType();
44 | return type.Assembly.GetManifestResourceStream(type.Namespace + ".Thumb.png");
45 | }
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/MusicChinaProvider/Provider/ImageHelper.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.IO;
3 | using MediaBrowser.Common.Configuration;
4 | using MediaBrowser.Model.IO;
5 | using MediaBrowser.Model.Logging;
6 |
7 | namespace MusicProvider
8 | {
9 | public class ImageHelper
10 | {
11 | public static void SaveImageInfo(IApplicationPaths appPaths, ILogger logger, IFileSystem fileSystem, string musicId, string url)
12 | {
13 | if (appPaths == null)
14 | {
15 | throw new ArgumentNullException("appPaths");
16 | }
17 | if (string.IsNullOrEmpty(musicId))
18 | {
19 | throw new ArgumentNullException("musicId");
20 | }
21 | if (string.IsNullOrEmpty(url))
22 | {
23 | throw new ArgumentNullException("url");
24 | }
25 |
26 | var cachePath = Path.Combine(appPaths.CachePath, "Music-China", musicId, "image.txt");
27 | try
28 | {
29 | if (string.IsNullOrEmpty(url))
30 | {
31 | fileSystem.DeleteFile(cachePath);
32 | }
33 | else
34 | {
35 | fileSystem.CreateDirectory(fileSystem.GetDirectoryName(cachePath));
36 | fileSystem.WriteAllText(cachePath, url );
37 | }
38 | }
39 | catch (IOException ex)
40 | {
41 | // Don't fail if this is unable to write
42 | logger.ErrorException("Error saving to {0}", ex, cachePath);
43 | }
44 | }
45 | }
46 | }
--------------------------------------------------------------------------------
/MusicChinaProvider/Provider/MusicArtistProvider.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections;
3 | using System.Collections.Generic;
4 | using System.IO;
5 | using System.Net;
6 | using System.Threading;
7 | using System.Threading.Tasks;
8 | using Emby.MeiamSub.Thunder;
9 | using Emby.MeiamSub.Thunder.Consts;
10 | using MediaBrowser.Common.Net;
11 | using MediaBrowser.Controller.Configuration;
12 | using MediaBrowser.Controller.Entities.Audio;
13 | using MediaBrowser.Controller.Providers;
14 | using MediaBrowser.Model.Entities;
15 | using MediaBrowser.Model.IO;
16 | using MediaBrowser.Model.Logging;
17 | using MediaBrowser.Model.Providers;
18 | using MediaBrowser.Model.Serialization;
19 | using MusicProvider.Models;
20 |
21 | namespace MusicProvider
22 | {
23 | /*
24 | * 艺术家搜刮器
25 | */
26 | public class MusicProvider : IRemoteMetadataProvider, IHasOrder
27 | {
28 | public int Order => 0;
29 |
30 |
31 |
32 |
33 | private const string UA = "PostmanRuntime/7.28.4";
34 |
35 | public string Name => "Music-China";
36 |
37 |
38 | private readonly ILogger _logger;
39 | private readonly IJsonSerializer _json;
40 | private readonly IHttpClient _httpClient;
41 | private readonly IServerConfigurationManager _config;
42 | private readonly IFileSystem _fileSystem;
43 | public MusicProvider( ILogger logger,IServerConfigurationManager config, IFileSystem fileSystem, IJsonSerializer jsonSerializer,IHttpClient httpClient)
44 | {
45 | _logger = logger;
46 | _json = jsonSerializer;
47 | _config = config;
48 | _httpClient = httpClient;
49 | _fileSystem = fileSystem;
50 | }
51 |
52 | public async Task> GetSearchResults(ArtistInfo searchInfo, CancellationToken cancellationToken)
53 | {
54 | _logger.Debug("触发GetSearchResults");
55 | var remoteSearchResults = new List();
56 | var MusicName = GetMusicArtistName(searchInfo);
57 | _logger.Info($"搜索艺术家 --> {MusicName}");
58 | SearchJson result;
59 | var options = new HttpRequestOptions
60 | {
61 | Url = $"http://music.163.com/api/search/get/web?csrf_token=hlpretag=&s={MusicName}&type=100&offset=0&limit=20",
62 | UserAgent = UA,
63 | EnableHttpCompression = false,
64 | RequestHeaders = { {"X-Real-IP",IpConsts.RealIP} }
65 | };
66 | using (var json = await _httpClient.Get(options).ConfigureAwait(false))
67 | {
68 | using (var reader = new StreamReader(json))
69 | {
70 | var jsonText = await reader.ReadToEndAsync().ConfigureAwait(false);
71 | _logger.Debug($"读取到网易云返回的结果 --> {jsonText}");
72 | result = _json.DeserializeFromString(jsonText);
73 | }
74 | }
75 |
76 | if (result != null && result.result.artistCount != 0)
77 | {
78 | foreach (var resultArtist in result.result.artists)
79 | {
80 | var n1 = new RemoteSearchResult();
81 | n1.Name = resultArtist.name;
82 | n1.ImageUrl = resultArtist.img1v1Url+"?param=300y300";
83 | remoteSearchResults.Add(n1);
84 | }
85 | }
86 | return await Task.FromResult>(remoteSearchResults );
87 | }
88 |
89 |
90 |
91 |
92 |
93 |
94 | private static string GetMusicArtistName(ArtistInfo info)
95 | {
96 | return info.Name;
97 | }
98 |
99 | public async Task> GetMetadata(ArtistInfo info, CancellationToken cancellationToken)
100 | {
101 | _logger.Debug("触发GetMetadata");
102 | // 1.获取名字
103 | var MusicName = GetMusicArtistName(info);
104 | _logger.Info($"搜刮艺术家 --> {MusicName}");
105 | var res = new MetadataResult();
106 | res.Item = new MusicArtist();
107 | res.HasMetadata = true;
108 | await FetchData(res.Item, MusicName).ConfigureAwait(false);
109 | return res;
110 | }
111 |
112 | protected async Task FetchData(MusicArtist item, string MusicName)
113 | {
114 | _logger.Debug($"获取到歌手姓名 --> {MusicName}");
115 | SearchJson result;
116 | var options = new HttpRequestOptions
117 | {
118 | Url = $"http://music.163.com/api/search/get/web?csrf_token=hlpretag=&s={MusicName}&type=100&offset=0&limit=20",
119 | UserAgent = UA,
120 | EnableHttpCompression = false,
121 | RequestHeaders = { {"X-Real-IP",IpConsts.RealIP} }
122 | };
123 | using (var json = await _httpClient.Get(options).ConfigureAwait(false))
124 | {
125 | using (var reader = new StreamReader(json))
126 | {
127 | var jsonText = await reader.ReadToEndAsync().ConfigureAwait(false);
128 | _logger.Debug($"读取到网易云返回的结果 --> {jsonText}");
129 | result = _json.DeserializeFromString(jsonText);
130 | }
131 | }
132 |
133 | if (result != null && result.result.artistCount != 0)
134 | {
135 | // 有结果返回进行处理
136 | _logger.Debug($"读取到网易云搜索到歌手数量为 --> {result.result.artistCount}");
137 | await ProcessArtistData(item, result.result.artists[0],MusicName).ConfigureAwait(false);
138 | }
139 | }
140 |
141 |
142 | private async Task ProcessArtistData(MusicArtist artist, ArtistsItem data, string MusicName)
143 | {
144 |
145 | ArtistDetailJson result = null;
146 |
147 | // 设置网易云id
148 | artist.ExternalId = data.id;
149 |
150 |
151 | // 获取歌手描述
152 | if (!((IList) artist.LockedFields).Contains(MetadataFields.Overview))
153 | {
154 | using (var json = await _httpClient.Get(new HttpRequestOptions
155 | {
156 | Url = $"https://music.163.com/api/artist/head/info/get?id={data.id}",
157 | UserAgent = UA,
158 | EnableHttpCompression = false,
159 | RequestHeaders = { {"X-Real-IP",IpConsts.RealIP} }
160 | }).ConfigureAwait(false))
161 | {
162 | using (var reader = new StreamReader(json))
163 | {
164 | var jsonText = await reader.ReadToEndAsync().ConfigureAwait(false);
165 | _logger.Debug($"网易云读取到歌手描述为 --> {jsonText}");
166 | result = _json.DeserializeFromString(jsonText);
167 | artist.Overview = result.data.artist.briefDesc;
168 | }
169 | }
170 | }
171 |
172 | // 设置图像url
173 | var url = result.data.artist.cover + "?param=300y300";
174 | _logger.Debug($"网易云歌手url --> {url}");
175 | if (!string.IsNullOrEmpty(data.id) && !string.IsNullOrEmpty(url))
176 | {
177 | ImageHelper.SaveImageInfo(_config.ApplicationPaths, _logger, _fileSystem, MusicName, url);
178 | }
179 |
180 | }
181 |
182 |
183 |
184 | public Task GetImageResponse(string url, CancellationToken cancellationToken)
185 | {
186 | _logger.Debug("触发GetImageResponse");
187 | return _httpClient.GetResponse(new HttpRequestOptions
188 | {
189 | CancellationToken = cancellationToken,
190 | Url = url
191 | });
192 | }
193 |
194 | }
195 |
196 |
197 |
198 | }
--------------------------------------------------------------------------------
/MusicChinaProvider/Provider/MusicImageProvider.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Linq;
5 | using System.Threading;
6 | using System.Threading.Tasks;
7 | using MediaBrowser.Common.Net;
8 | using MediaBrowser.Controller.Configuration;
9 | using MediaBrowser.Controller.Entities;
10 | using MediaBrowser.Controller.Entities.Audio;
11 | using MediaBrowser.Controller.Providers;
12 | using MediaBrowser.Model.Configuration;
13 | using MediaBrowser.Model.Entities;
14 | using MediaBrowser.Model.IO;
15 | using MediaBrowser.Model.Logging;
16 | using MediaBrowser.Model.Providers;
17 | using MediaBrowser.Model.Serialization;
18 |
19 | namespace MusicProvider
20 | {
21 | public class MusicImageProvider: IRemoteImageProvider, IHasOrder
22 | {
23 | public string Name => "Music-China";
24 | public int Order => 0;
25 |
26 |
27 | private readonly ILogger _logger;
28 | private readonly IJsonSerializer _json;
29 | private readonly IHttpClient _httpClient;
30 | private readonly IServerConfigurationManager _config;
31 | private readonly IFileSystem _fileSystem;
32 | public MusicImageProvider( ILogger logger,IServerConfigurationManager config, IFileSystem fileSystem, IJsonSerializer jsonSerializer,IHttpClient httpClient)
33 | {
34 | _logger = logger;
35 | _json = jsonSerializer;
36 | _config = config;
37 | _httpClient = httpClient;
38 | _fileSystem = fileSystem;
39 | }
40 |
41 |
42 | public bool Supports(BaseItem item)
43 | {
44 | return item is MusicArtist;
45 | // return item is MusicAlbum || item is MusicArtist;
46 | }
47 |
48 | public IEnumerable GetSupportedImages(BaseItem item)
49 | {
50 | return new List
51 | {
52 | ImageType.Primary
53 | };
54 | }
55 |
56 | public async Task> GetImages(BaseItem item, LibraryOptions libraryOptions, CancellationToken cancellationToken)
57 | {
58 | var list = new List();
59 | RemoteImageInfo info = new RemoteImageInfo();
60 | var musicId = item is MusicAlbum ?
61 | item.GetProviderId(MetadataProviders.MusicBrainzAlbum) :
62 | item.Name;
63 | if (!string.IsNullOrEmpty(musicId))
64 | {
65 | var cachePath = Path.Combine(_config.ApplicationPaths.CachePath, "Music-China", musicId, "image.txt");
66 | // 读取到的图片地址
67 | var parts = (await _fileSystem.ReadAllTextAsync(cachePath).ConfigureAwait(false));
68 | _logger.Debug($"读取歌手图片地址为 --> {parts}");
69 | info.ProviderName = item.Name;
70 | info.Url = parts;
71 | info.Type = ImageType.Primary;
72 | }
73 | list.Add(info);
74 | return list;
75 | }
76 |
77 |
78 | public Task GetImageResponse(string url, CancellationToken cancellationToken)
79 | {
80 | return _httpClient.GetResponse(new HttpRequestOptions
81 | {
82 | CancellationToken = cancellationToken,
83 | Url = url
84 | });
85 | }
86 |
87 | }
88 | }
--------------------------------------------------------------------------------
/MusicChinaProvider/bin/Debug/netstandard2.0/MusicChinaProvider.deps.json:
--------------------------------------------------------------------------------
1 | {
2 | "runtimeTarget": {
3 | "name": ".NETStandard,Version=v2.0/",
4 | "signature": ""
5 | },
6 | "compilationOptions": {},
7 | "targets": {
8 | ".NETStandard,Version=v2.0": {},
9 | ".NETStandard,Version=v2.0/": {
10 | "MusicChinaProvider/1.0.0": {
11 | "dependencies": {
12 | "MediaBrowser.Common": "4.6.0.50",
13 | "MediaBrowser.Server.Core": "4.6.0.50",
14 | "NETStandard.Library": "2.0.3",
15 | "System.Memory": "4.5.3"
16 | },
17 | "runtime": {
18 | "MusicChinaProvider.dll": {}
19 | }
20 | },
21 | "MediaBrowser.Common/4.6.0.50": {
22 | "runtime": {
23 | "lib/netstandard2.0/MediaBrowser.Common.dll": {
24 | "assemblyVersion": "4.6.0.50",
25 | "fileVersion": "4.6.0.50"
26 | },
27 | "lib/netstandard2.0/MediaBrowser.Model.dll": {
28 | "assemblyVersion": "4.6.0.50",
29 | "fileVersion": "4.6.0.50"
30 | }
31 | }
32 | },
33 | "MediaBrowser.Server.Core/4.6.0.50": {
34 | "dependencies": {
35 | "MediaBrowser.Common": "4.6.0.50"
36 | },
37 | "runtime": {
38 | "lib/netstandard2.0/MediaBrowser.Controller.dll": {
39 | "assemblyVersion": "4.6.0.50",
40 | "fileVersion": "4.6.0.50"
41 | }
42 | }
43 | },
44 | "Microsoft.NETCore.Platforms/1.1.0": {},
45 | "NETStandard.Library/2.0.3": {
46 | "dependencies": {
47 | "Microsoft.NETCore.Platforms": "1.1.0"
48 | }
49 | },
50 | "System.Buffers/4.4.0": {
51 | "runtime": {
52 | "lib/netstandard2.0/System.Buffers.dll": {
53 | "assemblyVersion": "4.0.2.0",
54 | "fileVersion": "4.6.25519.3"
55 | }
56 | }
57 | },
58 | "System.Memory/4.5.3": {
59 | "dependencies": {
60 | "System.Buffers": "4.4.0",
61 | "System.Numerics.Vectors": "4.4.0",
62 | "System.Runtime.CompilerServices.Unsafe": "4.5.2"
63 | },
64 | "runtime": {
65 | "lib/netstandard2.0/System.Memory.dll": {
66 | "assemblyVersion": "4.0.1.1",
67 | "fileVersion": "4.6.27617.2"
68 | }
69 | }
70 | },
71 | "System.Numerics.Vectors/4.4.0": {
72 | "runtime": {
73 | "lib/netstandard2.0/System.Numerics.Vectors.dll": {
74 | "assemblyVersion": "4.1.3.0",
75 | "fileVersion": "4.6.25519.3"
76 | }
77 | }
78 | },
79 | "System.Runtime.CompilerServices.Unsafe/4.5.2": {
80 | "runtime": {
81 | "lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll": {
82 | "assemblyVersion": "4.0.4.1",
83 | "fileVersion": "4.6.26919.2"
84 | }
85 | }
86 | }
87 | }
88 | },
89 | "libraries": {
90 | "MusicChinaProvider/1.0.0": {
91 | "type": "project",
92 | "serviceable": false,
93 | "sha512": ""
94 | },
95 | "MediaBrowser.Common/4.6.0.50": {
96 | "type": "package",
97 | "serviceable": true,
98 | "sha512": "sha512-loLR660GW54f3QSS+mdlH0WT7pDu1tV4hoongx8h9PzWDjpphRIjPvbjltbGOKo4EGC8tvye2tuNGx70n1bMdQ==",
99 | "path": "mediabrowser.common/4.6.0.50",
100 | "hashPath": "mediabrowser.common.4.6.0.50.nupkg.sha512"
101 | },
102 | "MediaBrowser.Server.Core/4.6.0.50": {
103 | "type": "package",
104 | "serviceable": true,
105 | "sha512": "sha512-bZ+386le18Mk5meWvQLTV3cDuNlomGB2ZvrSzNcE7pVVJtIDe3QsSQOb3Dpc86tKrmT3gsSkM7cjXYEBQ/mulw==",
106 | "path": "mediabrowser.server.core/4.6.0.50",
107 | "hashPath": "mediabrowser.server.core.4.6.0.50.nupkg.sha512"
108 | },
109 | "Microsoft.NETCore.Platforms/1.1.0": {
110 | "type": "package",
111 | "serviceable": true,
112 | "sha512": "sha512-kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==",
113 | "path": "microsoft.netcore.platforms/1.1.0",
114 | "hashPath": "microsoft.netcore.platforms.1.1.0.nupkg.sha512"
115 | },
116 | "NETStandard.Library/2.0.3": {
117 | "type": "package",
118 | "serviceable": true,
119 | "sha512": "sha512-st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==",
120 | "path": "netstandard.library/2.0.3",
121 | "hashPath": "netstandard.library.2.0.3.nupkg.sha512"
122 | },
123 | "System.Buffers/4.4.0": {
124 | "type": "package",
125 | "serviceable": true,
126 | "sha512": "sha512-AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw==",
127 | "path": "system.buffers/4.4.0",
128 | "hashPath": "system.buffers.4.4.0.nupkg.sha512"
129 | },
130 | "System.Memory/4.5.3": {
131 | "type": "package",
132 | "serviceable": true,
133 | "sha512": "sha512-3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==",
134 | "path": "system.memory/4.5.3",
135 | "hashPath": "system.memory.4.5.3.nupkg.sha512"
136 | },
137 | "System.Numerics.Vectors/4.4.0": {
138 | "type": "package",
139 | "serviceable": true,
140 | "sha512": "sha512-UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ==",
141 | "path": "system.numerics.vectors/4.4.0",
142 | "hashPath": "system.numerics.vectors.4.4.0.nupkg.sha512"
143 | },
144 | "System.Runtime.CompilerServices.Unsafe/4.5.2": {
145 | "type": "package",
146 | "serviceable": true,
147 | "sha512": "sha512-wprSFgext8cwqymChhrBLu62LMg/1u92bU+VOwyfBimSPVFXtsNqEWC92Pf9ofzJFlk4IHmJA75EDJn1b2goAQ==",
148 | "path": "system.runtime.compilerservices.unsafe/4.5.2",
149 | "hashPath": "system.runtime.compilerservices.unsafe.4.5.2.nupkg.sha512"
150 | }
151 | }
152 | }
--------------------------------------------------------------------------------
/MusicChinaProvider/bin/Debug/netstandard2.0/MusicChinaProvider.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xixka/Emby.Music-China-Provider/d96665d46bcf57b08e65a71a6100f0383f8cadb8/MusicChinaProvider/bin/Debug/netstandard2.0/MusicChinaProvider.dll
--------------------------------------------------------------------------------
/MusicChinaProvider/bin/Debug/netstandard2.0/MusicChinaProvider.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xixka/Emby.Music-China-Provider/d96665d46bcf57b08e65a71a6100f0383f8cadb8/MusicChinaProvider/bin/Debug/netstandard2.0/MusicChinaProvider.pdb
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # emby网易云搜刮插件
2 |
3 |
4 | ## 请先用 MusicTag 搜刮歌曲,再安装该插件使用emby搜刮
5 |
6 |
7 | ### [插件下载](https://github.com/xixka/Emby.Music-China-Provider/blob/main/MusicChinaProvider/bin/Debug/netstandard2.0/MusicChinaProvider.dll)
8 |
9 | ## 任务清单
10 |
11 | - [ ] 修复刷新元数据可能不工作
12 | - [x] 歌手信息搜刮
13 | - [ ] 歌手识别(还有bug,只能修改描述)
14 | - [x] 歌手图片搜刮
15 | - [ ] 歌手图片修改
16 | - [ ] 专辑信息搜刮
17 | - [ ] 专辑识别
18 | - [ ] 专辑图片搜刮
19 | - [ ] 专辑图片修改
20 | - [x] 非国内ip搜刮
21 | - [ ] 代理搜刮
22 |
23 | ## 测试图
24 |
25 | 
26 | 
27 | 
28 |
--------------------------------------------------------------------------------
/img/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xixka/Emby.Music-China-Provider/d96665d46bcf57b08e65a71a6100f0383f8cadb8/img/1.png
--------------------------------------------------------------------------------
/img/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xixka/Emby.Music-China-Provider/d96665d46bcf57b08e65a71a6100f0383f8cadb8/img/2.png
--------------------------------------------------------------------------------
/img/3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xixka/Emby.Music-China-Provider/d96665d46bcf57b08e65a71a6100f0383f8cadb8/img/3.jpg
--------------------------------------------------------------------------------