Skip to content

Commit

Permalink
Добавлен плейлист Кинопоиска, сборка пакетов Nuget
Browse files Browse the repository at this point in the history
  • Loading branch information
K1llMan committed Mar 8, 2022
1 parent 1e0a378 commit 84cb337
Show file tree
Hide file tree
Showing 33 changed files with 127 additions and 129 deletions.
11 changes: 3 additions & 8 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,9 @@
/.vs
/.vscode
/docs/build
/Yandex.Music.Api/bin
/Yandex.Music.Api/obj
/Yandex.Music.Api.Tests/bin
/Yandex.Music.Api.Tests/obj
/Yandex.Music.Client/bin
/Yandex.Music.Client/obj
/Yandex.Music.Client.Tests/bin
/Yandex.Music.Client.Tests/obj
*/bin
*/obj
/output

/Yandex.Music.Api.sln.DotSettings.user
/Yandex.Music.Api/Yandex.Music.Api.csproj.user
Expand Down
20 changes: 20 additions & 0 deletions Configs/Common.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<TargetFrameworks>net5.0;netstandard2.0;netstandard2.1</TargetFrameworks>
<SatelliteResourceLanguages>en</SatelliteResourceLanguages>
</PropertyGroup>

<ItemGroup>
<None Include="$(SolutionDir)LICENSE" Pack="true" Visible="false" PackagePath=""/>
</ItemGroup>

<PropertyGroup>
<Version>1.0.0</Version>
<AssemblyVersion>1.0.0</AssemblyVersion>
<FileVersion>1.0.0</FileVersion>
<Authors>K1llM@n</Authors>
<ProjectUrl>https://github.com/K1llMan/Yandex.Music.Api</ProjectUrl>
<RepositoryUrl>https://github.com/K1llMan/Yandex.Music.Api</RepositoryUrl>
<PackageLicenseFile>LICENSE</PackageLicenseFile>
</PropertyGroup>
</Project>
7 changes: 7 additions & 0 deletions Configs/Tests.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<TargetFrameworks>net5.0</TargetFrameworks>
<IsPackable>false</IsPackable>
<SatelliteResourceLanguages>en</SatelliteResourceLanguages>
</PropertyGroup>
</Project>
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
[![Build Status](https://travis-ci.com/K1llMan/Yandex.Music.Api.svg?branch=master)](https://travis-ci.com/K1llMan/Yandex.Music.Api)
[![Documentation Status](https://readthedocs.org/projects/yandexmusicapicsharp/badge/?version=latest)](https://yandexmusicapicsharp.readthedocs.io/ru/latest/?badge=latest)
[![Nuget API](https://www.nuget.org/packages/KM.Yandex.Music.Api/)](https://img.shields.io/nuget/dt/KM.Yandex.Music.Api)
[![Nuget Client](https://www.nuget.org/packages/KM.Yandex.Music.Client/)](https://img.shields.io/nuget/dt/KM.Yandex.Music.Client)


Yandex.Music API (Unofficial) for .Net Core
Expand Down
3 changes: 3 additions & 0 deletions Utils/pack.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
cd ..
dotnet pack -c Release -o output
@pause
2 changes: 1 addition & 1 deletion Yandex.Music.Api.Tests/Tests/API/PlaylistAPITest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ public void Podcasts_ValidData_True()
[Order(8)]
public void Rewind_ValidData_True()
{
YResponse<YPlaylist> response = Fixture.API.Playlist.Rewind(Fixture.Storage);
YResponse<YPlaylist> response = Fixture.API.Playlist.Kinopoisk(Fixture.Storage);

response.Should().NotBeNull();
}
Expand Down
7 changes: 1 addition & 6 deletions Yandex.Music.Api.Tests/Yandex.Music.Api.Tests.csproj
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<IsPackable>false</IsPackable>
<SatelliteResourceLanguages>en</SatelliteResourceLanguages>
</PropertyGroup>
<Import Project="$(SolutionDir)\Configs\Tests.xml" />
<ItemGroup>
<PackageReference Include="FluentAssertions" Version="5.10.3" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.6.1" />
Expand Down
8 changes: 4 additions & 4 deletions Yandex.Music.Api.sln
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29911.84
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yandex.Music.Api", "Yandex.Music.Api\Yandex.Music.Api.csproj", "{1D367F66-175A-46D8-80E5-DA1272ACA1B4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yandex.Music.Api.Tests", "Yandex.Music.Api.Tests\Yandex.Music.Api.Tests.csproj", "{2508C0DA-86D2-4D61-8F15-EE69D4085682}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Yandex.Music.Client", "Yandex.Music.Client\Yandex.Music.Client.csproj", "{F12919EA-CAE9-42F9-B833-7F9DF991A59A}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yandex.Music.Client", "Yandex.Music.Client\Yandex.Music.Client.csproj", "{F12919EA-CAE9-42F9-B833-7F9DF991A59A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Yandex.Music.Client.Tests", "Yandex.Music.Client.Tests\Yandex.Music.Client.Tests.csproj", "{ED0FC303-CFCC-424B-B62E-0DD427794AD6}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yandex.Music.Client.Tests", "Yandex.Music.Client.Tests\Yandex.Music.Client.Tests.csproj", "{ED0FC303-CFCC-424B-B62E-0DD427794AD6}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Expand Down
8 changes: 4 additions & 4 deletions Yandex.Music.Api/API/YPlaylistAPI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -245,19 +245,19 @@ public YResponse<YPlaylist> Podcasts(AuthStorage storage)
/// </summary>
/// <param name="storage">Хранилище</param>
/// <returns></returns>
public async Task<YResponse<YPlaylist>> RewindAsync(AuthStorage storage)
public async Task<YResponse<YPlaylist>> KinopoiskAsync(AuthStorage storage)
{
return await GetPersonalPlaylist(storage, YGeneratedPlaylistType.Rewind21);
return await GetPersonalPlaylist(storage, YGeneratedPlaylistType.Kinopoisk);
}

/// <summary>
/// Большая перемотка
/// </summary>
/// <param name="storage">Хранилище</param>
/// <returns></returns>
public YResponse<YPlaylist> Rewind(AuthStorage storage)
public YResponse<YPlaylist> Kinopoisk(AuthStorage storage)
{
return RewindAsync(storage).GetAwaiter().GetResult();
return KinopoiskAsync(storage).GetAwaiter().GetResult();
}

#endregion Стандартные плейлисты
Expand Down
52 changes: 26 additions & 26 deletions Yandex.Music.Api/API/YTrackAPI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,20 +23,20 @@ public class YTrackAPI : YCommonAPI
private string BuildLinkForDownload(YTrackDownloadInfo mainDownloadResponse,
YStorageDownloadFile storageDownload)
{
var path = storageDownload.Path;
var host = storageDownload.Host;
var ts = storageDownload.Ts;
var s = storageDownload.S;
var codec = mainDownloadResponse.Codec;
string path = storageDownload.Path;
string host = storageDownload.Host;
string ts = storageDownload.Ts;
string s = storageDownload.S;
string codec = mainDownloadResponse.Codec;

var secret = $"XGRlBW9FXlekgbPrRHuSiA{path.Substring(1, path.Length - 1)}{s}";
var md5 = MD5.Create();
var md5Hash = md5.ComputeHash(Encoding.UTF8.GetBytes(secret));
var hmacsha1 = new HMACSHA1();
var hmasha1Hash = hmacsha1.ComputeHash(md5Hash);
var sign = BitConverter.ToString(hmasha1Hash).Replace("-", "").ToLower();
string secret = $"XGRlBW9FXlekgbPrRHuSiA{path.Substring(1, path.Length - 1)}{s}";
MD5 md5 = MD5.Create();
byte[] md5Hash = md5.ComputeHash(Encoding.UTF8.GetBytes(secret));
HMACSHA1 hmacsha1 = new HMACSHA1();
byte[] hmasha1Hash = hmacsha1.ComputeHash(md5Hash);
string sign = BitConverter.ToString(hmasha1Hash).Replace("-", "").ToLower();

var link = $"https://{host}/get-{codec}/{sign}/{ts}{path}";
string link = $"https://{host}/get-{codec}/{sign}/{ts}{path}";

return link;
}
Expand Down Expand Up @@ -155,8 +155,8 @@ public YStorageDownloadFile GetDownloadFileInfo(AuthStorage storage, YTrackDownl
/// <returns></returns>
public string GetFileLink(AuthStorage storage, string trackKey)
{
var mainDownloadResponse = GetMetadataForDownload(storage, trackKey).Result.First(m => m.Codec == "mp3");
var storageDownloadResponse = GetDownloadFileInfo(storage, mainDownloadResponse);
YTrackDownloadInfo mainDownloadResponse = GetMetadataForDownload(storage, trackKey).Result.First(m => m.Codec == "mp3");
YStorageDownloadFile storageDownloadResponse = GetDownloadFileInfo(storage, mainDownloadResponse);

return BuildLinkForDownload(mainDownloadResponse, storageDownloadResponse);
}
Expand All @@ -169,8 +169,8 @@ public string GetFileLink(AuthStorage storage, string trackKey)
/// <returns></returns>
public string GetFileLink(AuthStorage storage, YTrack track)
{
var mainDownloadResponse = GetMetadataForDownload(storage, track).Result.First(m => m.Codec == "mp3");
var storageDownloadResponse = GetDownloadFileInfo(storage, mainDownloadResponse);
YTrackDownloadInfo mainDownloadResponse = GetMetadataForDownload(storage, track).Result.First(m => m.Codec == "mp3");
YStorageDownloadFile storageDownloadResponse = GetDownloadFileInfo(storage, mainDownloadResponse);

return BuildLinkForDownload(mainDownloadResponse, storageDownloadResponse);
}
Expand All @@ -185,10 +185,10 @@ public string GetFileLink(AuthStorage storage, YTrack track)
/// <param name="filePath">Путь для файла</param>
public void ExtractToFile(AuthStorage storage, string trackKey, string filePath)
{
var fileLink = GetFileLink(storage, trackKey);
string fileLink = GetFileLink(storage, trackKey);

try {
using (var client = new WebClient()) {
using (WebClient client = new WebClient()) {
client.DownloadFile(fileLink, filePath);
}
}
Expand All @@ -205,11 +205,11 @@ public void ExtractToFile(AuthStorage storage, string trackKey, string filePath)
/// <param name="filePath">Путь для файла</param>
public void ExtractToFile(AuthStorage storage, YTrack track, string filePath)
{
var fileLink = GetFileLink(storage, track.GetKey().ToString());
string fileLink = GetFileLink(storage, track.GetKey().ToString());

try
{
using (var client = new WebClient())
using (WebClient client = new WebClient())
{
client.DownloadFile(fileLink, filePath);
}
Expand All @@ -228,12 +228,12 @@ public void ExtractToFile(AuthStorage storage, YTrack track, string filePath)
/// <returns></returns>
public byte[] ExtractData(AuthStorage storage, string trackKey)
{
var fileLink = GetFileLink(storage, trackKey);
string fileLink = GetFileLink(storage, trackKey);

var bytes = default(byte[]);
byte[] bytes = default(byte[]);

try {
using (var client = new WebClient()) {
using (WebClient client = new WebClient()) {
bytes = client.DownloadData(fileLink);
}
}
Expand All @@ -252,13 +252,13 @@ public byte[] ExtractData(AuthStorage storage, string trackKey)
/// <returns></returns>
public byte[] ExtractData(AuthStorage storage, YTrack track)
{
var fileLink = GetFileLink(storage, track.GetKey().ToString());
string fileLink = GetFileLink(storage, track.GetKey().ToString());

var bytes = default(byte[]);
byte[] bytes = default(byte[]);

try
{
using (var client = new WebClient())
using (WebClient client = new WebClient())
{
bytes = client.DownloadData(fileLink);
}
Expand Down
10 changes: 5 additions & 5 deletions Yandex.Music.Api/Common/DebugSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,12 @@ public class DebugSettings

public T Deserialize<T>(string url, string json, JsonSerializerSettings settings)
{
var errors = new Dictionary<string, List<string>>();
Dictionary<string, List<string>> errors = new Dictionary<string, List<string>>();

settings.Error = (sender, args) => {
var pos = args.ErrorContext.Error.Message.IndexOf("Path");
var error = args.ErrorContext.Error.Message.Substring(0, pos);
var path = args.ErrorContext.Error.Message.Substring(pos);
int pos = args.ErrorContext.Error.Message.IndexOf("Path");
string error = args.ErrorContext.Error.Message.Substring(0, pos);
string path = args.ErrorContext.Error.Message.Substring(pos);
if (!errors.ContainsKey(error))
errors[error] = new List<string>();
Expand All @@ -46,7 +46,7 @@ public T Deserialize<T>(string url, string json, JsonSerializerSettings settings

settings.MissingMemberHandling = MissingMemberHandling.Error;

var obj = JsonConvert.DeserializeObject<T>(json, settings);
T obj = JsonConvert.DeserializeObject<T>(json, settings);

// Запись ответа от API с ошибкой
if (errors.Count > 0) {
Expand Down
10 changes: 5 additions & 5 deletions Yandex.Music.Api/Common/Encryptor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
namespace Yandex.Music.Api.Common
{
/// <summary>
/// Класс для шифровки потом
/// Класс для шифровки
/// </summary>
public class Encryptor
{
Expand Down Expand Up @@ -46,8 +46,8 @@ public Encryptor(string key)

public byte[] Encrypt(byte[] data)
{
using (var ms = new MemoryStream()) {
using (var csEncrypt = new CryptoStream(ms, rijAlg.CreateEncryptor(keyHash, IVHash), CryptoStreamMode.Write)) {
using (MemoryStream ms = new MemoryStream()) {
using (CryptoStream csEncrypt = new CryptoStream(ms, rijAlg.CreateEncryptor(keyHash, IVHash), CryptoStreamMode.Write)) {
csEncrypt.Write(data, 0, data.Length);

if (!csEncrypt.HasFlushedFinalBlock)
Expand All @@ -60,8 +60,8 @@ public byte[] Encrypt(byte[] data)

public byte[] Decrypt(byte[] data)
{
using (var ms = new MemoryStream()) {
using (var csDecrypt = new CryptoStream(ms, rijAlg.CreateDecryptor(keyHash, IVHash), CryptoStreamMode.Write)) {
using (MemoryStream ms = new MemoryStream()) {
using (CryptoStream csDecrypt = new CryptoStream(ms, rijAlg.CreateDecryptor(keyHash, IVHash), CryptoStreamMode.Write)) {
csDecrypt.Write(data, 0, data.Length);

if (!csDecrypt.HasFlushedFinalBlock)
Expand Down
4 changes: 2 additions & 2 deletions Yandex.Music.Api/Models/Common/Cover/YCover.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
if (reader.TokenType == JsonToken.Null)
return null;

var jObject = JObject.Load(reader);
JObject jObject = JObject.Load(reader);
YCover cover;

try {
var type = jObject["error"] != null
YCoverType type = jObject["error"] != null
? YCoverType.Error
: jObject["type"].ToObject<YCoverType>();

Expand Down
16 changes: 0 additions & 16 deletions Yandex.Music.Api/Models/Library/YLibraryArtist.cs

This file was deleted.

4 changes: 2 additions & 2 deletions Yandex.Music.Api/Models/Playlist/YGeneratedPlaylistType.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ public enum YGeneratedPlaylistType
Podcasts,

/// <summary>
/// Большая перемотка
/// Кинопоиск
/// </summary>
Rewind21,
Kinopoisk,
}
}
2 changes: 1 addition & 1 deletion Yandex.Music.Api/Models/Radio/Restriction/YRestriction.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
if (reader.TokenType == JsonToken.Null)
return null;

var jObject = JObject.Load(reader);
JObject jObject = JObject.Load(reader);
YRestriction restriction;

try
Expand Down
6 changes: 3 additions & 3 deletions Yandex.Music.Api/Models/Search/YSearchBest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
if (reader.TokenType == JsonToken.Null)
return null;

var obj = JObject.Load(reader);
var contract = (JsonObjectContract) serializer.ContractResolver.ResolveContract(objectType);
var best = existingValue as YSearchBest ?? (YSearchBest) contract.DefaultCreator();
JObject obj = JObject.Load(reader);
JsonObjectContract contract = (JsonObjectContract) serializer.ContractResolver.ResolveContract(objectType);
YSearchBest best = existingValue as YSearchBest ?? (YSearchBest) contract.DefaultCreator();

best.Type = (YSearchType) Enum.Parse(typeof(YSearchType), obj["type"].ToString(), true);

Expand Down
4 changes: 2 additions & 2 deletions Yandex.Music.Api/Requests/Auth/YAuthorizeRequest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@ internal class YAuthorizeRequest : YRequest

public YRequest Create(string login, string password)
{
var headers = new List<KeyValuePair<string, string>> {
List<KeyValuePair<string, string>> headers = new List<KeyValuePair<string, string>> {
YRequestHeaders.Get(YHeader.ContentType, "application/x-www-form-urlencoded")
};

var body = new Dictionary<string, string> {
Dictionary<string, string> body = new Dictionary<string, string> {
{ "grant_type", "password" },
{ "client_id", CLIENT_ID },
{ "client_secret", CLIENT_SECRET },
Expand Down
8 changes: 4 additions & 4 deletions Yandex.Music.Api/Requests/HttpContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ public HttpContext()

public long GetTimeInterval()
{
var dt = TimeZoneInfo.ConvertTimeToUtc(DateTime.Now);
var dt1970 = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
var tsInterval = dt.Subtract(dt1970);
var iMilliseconds = Convert.ToInt64(tsInterval.TotalMilliseconds);
DateTime dt = TimeZoneInfo.ConvertTimeToUtc(DateTime.Now);
DateTime dt1970 = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
TimeSpan tsInterval = dt.Subtract(dt1970);
long iMilliseconds = Convert.ToInt64(tsInterval.TotalMilliseconds);

return iMilliseconds;
}
Expand Down

0 comments on commit 84cb337

Please sign in to comment.