增加快手
This commit is contained in:
5
.idea/.idea.ACBuildService/.idea/workspace.xml
generated
5
.idea/.idea.ACBuildService/.idea/workspace.xml
generated
@@ -73,11 +73,13 @@
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||
</component>
|
||||
<component name="HighlightingSettingsPerFile">
|
||||
<setting file="mock:///Immediate 窗口" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/DecompilerCache/decompiler/56fad711d44d4d47bc9f3128de5ae30ac90920/14/78d2f3c4/CultureInfo.cs" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/DecompilerCache/decompiler/759e68a39ef64bf8b91a2ed761bcd8a92e3400/05/7b368181/ISugarQueryable`1.cs" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/DecompilerCache/decompiler/759e68a39ef64bf8b91a2ed761bcd8a92e3400/59/e6a3fb28/IInsertable`1.cs" root0="SKIP_HIGHLIGHTING" />
|
||||
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/DecompilerCache/decompiler/83d0691b2ff94d50bae98091380d202e27e00/40/dca6e351/StorageClient.cs" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/DecompilerCache/decompiler/9a4eaacbc57349edb521efd6830794901f4910/b4/311bb478/MD5.cs" root0="SKIP_HIGHLIGHTING" />
|
||||
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/DecompilerCache/decompiler/a53c3f74ca7d4dd0864b7294afafa3603f920/64/a75dc014/Uri.cs" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/DecompilerCache/decompiler/ba9546ad90c246358f902e6522c620ddc9910/71/404fbeda/EndpointRouteBuilderExtensions.cs" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/DecompilerCache/decompiler/bbcd33dffc534f7b961b0763775ac78b1de938/f9/08f50080/ControllerBase.cs" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$APPLICATION_CONFIG_DIR$/resharper-host/DecompilerCache/decompiler/fb4ef246b9c147be90cf03bb4a45b1ce20938/a1/2cc30e09/Channel`2.cs" root0="FORCE_HIGHLIGHTING" />
|
||||
@@ -96,6 +98,7 @@
|
||||
<setting file="file://$PROJECT_DIR$/Http/Page/NBControllerBase.cs" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/Http/SignValidationAttribute.cs" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/VideoDownload/DouyinShareRouterData.cs" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/VideoDownload/KuaishouShareVideoData.cs" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/VideoDownload/Platforms/DouYin.cs" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/VideoDownload/Platforms/DownloadPlatforms.cs" root0="FORCE_HIGHLIGHTING" />
|
||||
<setting file="file://$PROJECT_DIR$/VideoDownload/Platforms/KuaiShou.cs" root0="FORCE_HIGHLIGHTING" />
|
||||
@@ -176,7 +179,7 @@
|
||||
<updated>1768872588133</updated>
|
||||
<workItem from="1768872589085" duration="31265000" />
|
||||
<workItem from="1769505886159" duration="1492000" />
|
||||
<workItem from="1770512793250" duration="25794000" />
|
||||
<workItem from="1770512793250" duration="28201000" />
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
|
||||
@@ -13,4 +13,5 @@
|
||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ARoutePatternParser_002Ecs_002Fl_003AC_0021_003FUsers_003F60527_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003F3831116b66390bb3a7f83dd22df6aab756e1807336836727888e69a5b413a_003FRoutePatternParser_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AStorageClient_002Ecs_002Fl_003AC_0021_003FUsers_003F60527_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F83d0691b2ff94d50bae98091380d202e27e00_003F8c_003Ff8d922d0_003FStorageClient_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AStorageClient_002Ecs_002Fl_003AC_0021_003FUsers_003FFIREBAT_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F83d0691b2ff94d50bae98091380d202e27e00_003F40_003Fdca6e351_003FStorageClient_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AString_002Ecs_002Fl_003AC_0021_003FUsers_003F60527_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F5147b10c5a8c4522b56fba0a889139cfc8f908_003Fd9_003F39b4342b_003FString_002Ecs/@EntryIndexedValue">ForceIncluded</s:String></wpf:ResourceDictionary>
|
||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AString_002Ecs_002Fl_003AC_0021_003FUsers_003F60527_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003F5147b10c5a8c4522b56fba0a889139cfc8f908_003Fd9_003F39b4342b_003FString_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AUri_002Ecs_002Fl_003AC_0021_003FUsers_003FFIREBAT_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E3_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fa53c3f74ca7d4dd0864b7294afafa3603f920_003F64_003Fa75dc014_003FUri_002Ecs/@EntryIndexedValue">ForceIncluded</s:String></wpf:ResourceDictionary>
|
||||
@@ -1,5 +1,6 @@
|
||||
using System.ComponentModel;
|
||||
using System.Text.RegularExpressions;
|
||||
using ACBuildService.Platforms.DouYin;
|
||||
using Downloader;
|
||||
using Newtonsoft.Json;
|
||||
using RestSharp;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace ACBuildService;
|
||||
namespace ACBuildService.Platforms.DouYin;
|
||||
|
||||
/// <summary>
|
||||
/// 抖音 分享文本中的视频数据
|
||||
@@ -1,53 +1,206 @@
|
||||
using System.ComponentModel;
|
||||
using System.Text.RegularExpressions;
|
||||
using ACBuildService.Platforms.KuaiShow;
|
||||
using Downloader;
|
||||
using Newtonsoft.Json;
|
||||
using RestSharp;
|
||||
|
||||
namespace ACBuildService;
|
||||
|
||||
public class KuaiShou : DownloadPlatforms
|
||||
{
|
||||
private static readonly Dictionary<string, string> _defaultHeaders = new()
|
||||
private static readonly Dictionary<string, string> _locationHeaders = new()
|
||||
{
|
||||
{
|
||||
"Accept",
|
||||
"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"
|
||||
},
|
||||
{ "Accept-Language", "zh-CN,zh;q=0.9" },
|
||||
{ "Cache-Control", "no-cache" },
|
||||
{ "Connection", "keep-alive" },
|
||||
{ "DNT", "1" },
|
||||
{ "Host", "www.kuaishou.com" },
|
||||
{ "Pragma", "no-cache" },
|
||||
{ "Sec-Fetch-Dest", "document" },
|
||||
{ "Sec-Fetch-Mode", "navigate" },
|
||||
{ "Sec-Fetch-Site", "none" },
|
||||
{ "Sec-Fetch-User", "?1" },
|
||||
{ "Upgrade-Insecure-Requests", "1" },
|
||||
{
|
||||
"UserAgent",
|
||||
"Mozilla/5.0 (Linux; Android 8.0.0; SM-G955U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Mobile Safari/537.36"
|
||||
},
|
||||
{ "sec-ch-ua", "\"Chromium\";v=\"128\", \"Not;A=Brand\";v=\"24\", \"Google Chrome\";v=\"128\"" },
|
||||
{ "sec-ch-ua-mobile", "?1" },
|
||||
{ "sec-ch-ua-platform", "\"Android\"" }
|
||||
// {
|
||||
// "Cookie",
|
||||
// "kpf=PC_WEB; kpn=KUAISHOU_VISION; clientid=3; did=web_6ece7cfdd334f69ac1fe2579040329d0; didv=1725957114469"
|
||||
// }
|
||||
};
|
||||
|
||||
private static readonly Dictionary<string, string> _videoInfoHeaders = new()
|
||||
{
|
||||
{
|
||||
"Accept",
|
||||
"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"
|
||||
},
|
||||
{ "Accept-Encoding", "gzip, deflate, br, zstd" },
|
||||
{ "Accept-Language", "zh-CN,zh;q=0.9" },
|
||||
{ "Cache-Control", "no-cache" },
|
||||
{ "Connection", "keep-alive" },
|
||||
{
|
||||
"Cookie",
|
||||
"kpf=PC_WEB; clientid=3; did=web_5ee38d442bc5387e413eeeefc42ed4a2; didv=1734437469000; kpn=KUAISHOU_VISION"
|
||||
},
|
||||
{ "DNT", "1" },
|
||||
{ "Host", "m.gifshow.com" },
|
||||
{ "Origin", "https://m.gifshow.com" },
|
||||
{ "Pragma", "no-cache" },
|
||||
// {
|
||||
// "Referer",
|
||||
// "https://m.gifshow.com/fw/photo/3xvfmfagspjxq9q?cc=share_copylink&kpf=PC_WEB&utm_campaign=pc_share&shareMethod=token&utm_medium=pc_share&kpn=KUAISHOU_VISION&subBiz=SINGLE_ROW_WEB&ztDid=web_126778f97e238efa29915c708f0789b6&shareId=18063407013272&shareToken=X-1KuDdzw7LGTYAM&shareMode=app&efid=0&shareObjectId=3xvfmfagspjxq9q&utm_source=pc_share"
|
||||
// },
|
||||
{ "Sec-Fetch-Dest", "document" },
|
||||
{ "Sec-Fetch-Mode", "navigate" },
|
||||
{ "Sec-Fetch-Site", "none" },
|
||||
{
|
||||
"User-Agent",
|
||||
"Mozilla/5.0 (Linux; Android 8.0.0; SM-G955U Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Mobile Safari/537.36"
|
||||
},
|
||||
{ "sec-fetch-site", "same-origin" },
|
||||
{ "sec-fetch-mode", "cors" },
|
||||
{ "sec-fetch-dest", "empty" },
|
||||
{ "sec-ch-ua-platform", "Windows" },
|
||||
{ "sec-ch-ua-mobile", "?0" },
|
||||
{ "sec-ch-ua", "\"Not/A)Brand\";v=\"8\", \"Chromium\";v=\"126\", \"Google Chrome\";v=\"126\"" },
|
||||
{ "referer", "https://www.douyin.com/?recommend=1" },
|
||||
{ "priority", "u=1, i" },
|
||||
{ "pragma", "no-cache" },
|
||||
{ "cache-control", "no-cache" },
|
||||
{ "accept-language", "zh-CN,zh;q=0.9,en;q=0.8" },
|
||||
{
|
||||
"accept",
|
||||
"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"
|
||||
},
|
||||
{ "dnt", "1" }
|
||||
{ "content-type", "application/json" },
|
||||
{ "sec-ch-ua", "\"Chromium\";v=\"128\", \"Not;A=Brand\";v=\"24\", \"Google Chrome\";v=\"128\"" },
|
||||
{ "sec-ch-ua-mobile", "?1" },
|
||||
{ "sec-ch-ua-platform", "\"Android\"" }
|
||||
};
|
||||
|
||||
public override Task<string> ExtractUrlAsync(string text)
|
||||
|
||||
public override async Task<string> ExtractUrlAsync(string text)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
Log.Info($"开始解析快手链接 {text}");
|
||||
return text.Trim();
|
||||
}
|
||||
|
||||
public override Task<VideoModel> ParseShare(string DownloadUrlText)
|
||||
public override async Task<VideoModel> ParseShare(string DownloadUrlText)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
if (!DownloadUrlText.Contains("https://"))
|
||||
{
|
||||
Log.Error("请输入正确的分享链接");
|
||||
return null;
|
||||
}
|
||||
|
||||
var downloadUrl = await ExtractUrlAsync(DownloadUrlText);
|
||||
VideoModel Data = await ExtractVideoDataAsync(downloadUrl);
|
||||
|
||||
return Data;
|
||||
}
|
||||
|
||||
public override Task<VideoModel> ExtractVideoDataAsync(string url)
|
||||
public override async Task<VideoModel> ExtractVideoDataAsync(string url)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
try
|
||||
{
|
||||
Log.Info($"开始解析链接 {url}");
|
||||
|
||||
var client = new RestClient();
|
||||
var locationRequest = new RestRequest(url);
|
||||
|
||||
locationRequest.AddHeaders(_locationHeaders);
|
||||
var locationResponse = client.Execute(locationRequest);
|
||||
|
||||
if (locationResponse.ResponseUri is null)
|
||||
{
|
||||
Log.Error("获取location参数失败");
|
||||
throw new InvalidDataException("获取location参数失败");
|
||||
}
|
||||
|
||||
// 发送请求并获取响应
|
||||
Log.Info($"开始解析location,reponse {locationResponse.ResponseUri.AbsoluteUri}");
|
||||
|
||||
var videoRequestUrl =
|
||||
locationResponse.ResponseUri.AbsoluteUri.Replace("https://www.kuaishou.com/short-video",
|
||||
"https://m.gifshow.com/fw/photo");
|
||||
var videoRequest = new RestRequest(videoRequestUrl);
|
||||
videoRequest.AddHeaders(_videoInfoHeaders);
|
||||
var videoResponse = client.Execute(videoRequest);
|
||||
|
||||
if (!videoResponse.IsSuccessful) throw new HttpRequestException("request is fail");
|
||||
|
||||
var content = videoResponse.Content;
|
||||
Log.Info($"开始解析响应内容 {content}");
|
||||
if (content is null) throw new InvalidDataException("content is null");
|
||||
|
||||
const string routerDataPattern = @"""photo"":\s*\{(.*?)\},\s*""serialInfo""";
|
||||
|
||||
var matchJson = Regex.Match(content, routerDataPattern);
|
||||
|
||||
Log.Info($"开始解析匹配到的json {matchJson}");
|
||||
if (matchJson.Groups.Count < 2) throw new InvalidDataException("未匹配到合法的数据,matchJson.Groups.Count < 2");
|
||||
|
||||
var videoJson = "{" + matchJson.Groups[1].Value + "}";
|
||||
Log.Info($"开始解析匹配到的json {videoJson}");
|
||||
// 反序列化JSON字符串为C#对象
|
||||
var videoData = JsonConvert.DeserializeObject<KuaishouShareVideoData>(videoJson);
|
||||
if (videoData is null) throw new InvalidDataException("JSON解析数据为空,请检查分享链接是否正确,如有更多问题请查看日志");
|
||||
return new VideoModel
|
||||
{
|
||||
Platform = ShortVideoPlatformEnum.KuaiShou,
|
||||
VideoId = videoData.Manifest.VideoId,
|
||||
AuthorName = videoData.UserName,
|
||||
AuthorAvatar = videoData.HeadUrl.ToString(),
|
||||
UniqueId = videoData.Manifest.VideoId,
|
||||
Title = videoData.Caption,
|
||||
Cover = videoData.CoverUrls.First().Url.ToString(),
|
||||
VideoUrl = videoData.MainMvUrls.First().Url.ToString(),
|
||||
Mp3Url = "",
|
||||
CreatedTime =
|
||||
DateTimeOffset.FromUnixTimeMilliseconds(videoData.Timestamp)
|
||||
.ToString("yyyy-MM-dd HH:mm:ss"),
|
||||
Desc = videoData.Caption,
|
||||
Duration = videoData.Duration.ToString(),
|
||||
DiggCount = videoData.LikeCount,
|
||||
ViewCount = videoData.ViewCount,
|
||||
CollectCount = 0,
|
||||
CommentCount = videoData.CommentCount,
|
||||
ShareCount = videoData.ShareCount
|
||||
};
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Log.Error(e.Message);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
public override Task<bool> DownloadAsync(string url, string savePath, string fileName,
|
||||
public override async Task<bool> DownloadAsync(string url, string savePath, string fileName,
|
||||
EventHandler<DownloadProgressChangedEventArgs> onProgressChanged,
|
||||
EventHandler<AsyncCompletedEventArgs> onProgressCompleted)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
DownloadConfiguration downloadConfiguration = new()
|
||||
{
|
||||
ChunkCount = 8, // Download in 8 chunks (increase for larger files)
|
||||
MaxTryAgainOnFailure = 5, // Retry up to 5 times on failure
|
||||
Timeout = 10000, // 10 seconds timeout for each request
|
||||
RequestConfiguration = new RequestConfiguration
|
||||
{
|
||||
UserAgent = _videoInfoHeaders.GetValueOrDefault("User-Agent")
|
||||
}
|
||||
};
|
||||
|
||||
DownloadService downloader = new(downloadConfiguration);
|
||||
|
||||
downloader.DownloadProgressChanged += onProgressChanged;
|
||||
downloader.DownloadFileCompleted += onProgressCompleted;
|
||||
|
||||
try
|
||||
{
|
||||
await downloader.DownloadFileTaskAsync(url, savePath + fileName);
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Info($"Download failed: {ex}");
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
293
VideoDownload/Platforms/KuaishouShareVideoData.cs
Normal file
293
VideoDownload/Platforms/KuaishouShareVideoData.cs
Normal file
@@ -0,0 +1,293 @@
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace ACBuildService.Platforms.KuaiShow;
|
||||
|
||||
public partial class KuaishouShareVideoData
|
||||
{
|
||||
[JsonProperty("adminTags")] public List<object> AdminTags { get; set; }
|
||||
|
||||
[JsonProperty("soundTrack")] public SoundTrack SoundTrack { get; set; }
|
||||
|
||||
[JsonProperty("headUrl")] public Uri HeadUrl { get; set; }
|
||||
|
||||
[JsonProperty("caption")] public string Caption { get; set; }
|
||||
|
||||
[JsonProperty("forcePublic")] public string ForcePublic { get; set; }
|
||||
|
||||
[JsonProperty("likeCount")] public long LikeCount { get; set; }
|
||||
|
||||
[JsonProperty("exp_tag")] public string ExpTag { get; set; }
|
||||
|
||||
[JsonProperty("type")] public long Type { get; set; }
|
||||
|
||||
[JsonProperty("mainMvUrls")] public List<KuaiShouShareVideoDatarUrl> MainMvUrls { get; set; }
|
||||
|
||||
[JsonProperty("userEid")] public string UserEid { get; set; }
|
||||
|
||||
[JsonProperty("duration")] public long Duration { get; set; }
|
||||
|
||||
[JsonProperty("shareCount")] public long ShareCount { get; set; }
|
||||
|
||||
[JsonProperty("serverExpTag")] public string ServerExpTag { get; set; }
|
||||
|
||||
[JsonProperty("ext_params")] public ExtParams ExtParams { get; set; }
|
||||
|
||||
[JsonProperty("viewCount")] public long ViewCount { get; set; }
|
||||
|
||||
[JsonProperty("headUrls")] public List<KuaiShouShareVideoDatarUrl> HeadUrls { get; set; }
|
||||
|
||||
[JsonProperty("forwardCount")] public long ForwardCount { get; set; }
|
||||
|
||||
[JsonProperty("tagShow")] public TagShow TagShow { get; set; }
|
||||
|
||||
[JsonProperty("singlePicture")] public bool SinglePicture { get; set; }
|
||||
|
||||
[JsonProperty("timestamp")] public long Timestamp { get; set; }
|
||||
|
||||
[JsonProperty("height")] public long Height { get; set; }
|
||||
|
||||
[JsonProperty("webpCoverUrls")] public List<KuaiShouShareVideoDatarUrl> WebpCoverUrls { get; set; }
|
||||
|
||||
[JsonProperty("userSex")] public string UserSex { get; set; }
|
||||
|
||||
[JsonProperty("manifest")] public Manifest Manifest { get; set; }
|
||||
|
||||
[JsonProperty("share_info")] public string ShareInfo { get; set; }
|
||||
|
||||
[JsonProperty("sameFrame")] public SameFrame SameFrame { get; set; }
|
||||
|
||||
[JsonProperty("verified")] public bool Verified { get; set; }
|
||||
|
||||
[JsonProperty("photoId")] public string PhotoId { get; set; }
|
||||
|
||||
[JsonProperty("userName")] public string UserName { get; set; }
|
||||
|
||||
[JsonProperty("userId")] public long UserId { get; set; }
|
||||
|
||||
[JsonProperty("commentCount")] public long CommentCount { get; set; }
|
||||
|
||||
[JsonProperty("commentShowType")] public long CommentShowType { get; set; }
|
||||
|
||||
[JsonProperty("width")] public long Width { get; set; }
|
||||
|
||||
[JsonProperty("photoType")] public string PhotoType { get; set; }
|
||||
|
||||
[JsonProperty("coverUrls")] public List<KuaiShouShareVideoDatarUrl> CoverUrls { get; set; }
|
||||
}
|
||||
|
||||
public partial class KuaiShouShareVideoDatarUrl
|
||||
{
|
||||
[JsonProperty("cdn")] public string Cdn { get; set; }
|
||||
|
||||
[JsonProperty("url")] public Uri Url { get; set; }
|
||||
}
|
||||
|
||||
public partial class ExtParams
|
||||
{
|
||||
[JsonProperty("mtype")] public long Mtype { get; set; }
|
||||
|
||||
[JsonProperty("color")] public string Color { get; set; }
|
||||
|
||||
[JsonProperty("w")] public long W { get; set; }
|
||||
|
||||
[JsonProperty("sound")] public long Sound { get; set; }
|
||||
|
||||
[JsonProperty("h")] public long H { get; set; }
|
||||
|
||||
[JsonProperty("interval")] public long Interval { get; set; }
|
||||
|
||||
[JsonProperty("video")] public long Video { get; set; }
|
||||
}
|
||||
|
||||
public partial class Manifest
|
||||
{
|
||||
[JsonProperty("playInfo")] public PlayInfo PlayInfo { get; set; }
|
||||
|
||||
[JsonProperty("manualDefaultSelect")] public bool ManualDefaultSelect { get; set; }
|
||||
|
||||
[JsonProperty("videoFeature")] public VideoFeature VideoFeature { get; set; }
|
||||
|
||||
[JsonProperty("stereoType")] public long StereoType { get; set; }
|
||||
|
||||
[JsonProperty("adaptationSet")] public List<AdaptationSet> AdaptationSet { get; set; }
|
||||
|
||||
[JsonProperty("mediaType")] public long MediaType { get; set; }
|
||||
|
||||
[JsonProperty("videoId")] public string VideoId { get; set; }
|
||||
|
||||
[JsonProperty("hideAuto")] public bool HideAuto { get; set; }
|
||||
|
||||
[JsonProperty("businessType")] public long BusinessType { get; set; }
|
||||
|
||||
[JsonProperty("version")] public string Version { get; set; }
|
||||
}
|
||||
|
||||
public partial class AdaptationSet
|
||||
{
|
||||
[JsonProperty("duration")] public long Duration { get; set; }
|
||||
|
||||
[JsonProperty("id")] public long Id { get; set; }
|
||||
|
||||
[JsonProperty("representation")] public List<Representation> Representation { get; set; }
|
||||
}
|
||||
|
||||
public partial class Representation
|
||||
{
|
||||
[JsonProperty("hidden")] public bool Hidden { get; set; }
|
||||
|
||||
[JsonProperty("backupUrl")] public List<Uri> BackupUrl { get; set; }
|
||||
|
||||
[JsonProperty("normalizeGain")] public long NormalizeGain { get; set; }
|
||||
|
||||
[JsonProperty("maxBitrate")] public long MaxBitrate { get; set; }
|
||||
|
||||
[JsonProperty("hdrType")] public long HdrType { get; set; }
|
||||
|
||||
[JsonProperty("frameRate")] public long FrameRate { get; set; }
|
||||
|
||||
[JsonProperty("qualityLabel")] public string QualityLabel { get; set; }
|
||||
|
||||
[JsonProperty("oriLoudness")] public double OriLoudness { get; set; }
|
||||
|
||||
[JsonProperty("bitratePattern")] public List<long> BitratePattern { get; set; }
|
||||
|
||||
[JsonProperty("id")] public long Id { get; set; }
|
||||
|
||||
[JsonProperty("kvqScore")] public KvqScore KvqScore { get; set; }
|
||||
|
||||
[JsonProperty("disableAdaptive")] public bool DisableAdaptive { get; set; }
|
||||
|
||||
[JsonProperty("videoCodec")] public string VideoCodec { get; set; }
|
||||
|
||||
[JsonProperty("height")] public long Height { get; set; }
|
||||
|
||||
[JsonProperty("avgBitrate")] public long AvgBitrate { get; set; }
|
||||
|
||||
[JsonProperty("defaultSelect")] public bool DefaultSelect { get; set; }
|
||||
|
||||
[JsonProperty("mute")] public bool Mute { get; set; }
|
||||
|
||||
[JsonProperty("url")] public Uri Url { get; set; }
|
||||
|
||||
[JsonProperty("p2spCode")] public string P2SpCode { get; set; }
|
||||
|
||||
[JsonProperty("quality")] public double Quality { get; set; }
|
||||
|
||||
[JsonProperty("featureP2sp")] public bool FeatureP2Sp { get; set; }
|
||||
|
||||
[JsonProperty("makeupGain")] public double MakeupGain { get; set; }
|
||||
|
||||
[JsonProperty("fileSize")] public long FileSize { get; set; }
|
||||
|
||||
[JsonProperty("width")] public long Width { get; set; }
|
||||
|
||||
[JsonProperty("comment")] public string Comment { get; set; }
|
||||
|
||||
[JsonProperty("qualityType")] public string QualityType { get; set; }
|
||||
|
||||
[JsonProperty("minorInfo")] public string MinorInfo { get; set; }
|
||||
|
||||
[JsonProperty("agc")] public bool Agc { get; set; }
|
||||
}
|
||||
|
||||
public partial class KvqScore
|
||||
{
|
||||
[JsonProperty("FRPost", NullValueHandling = NullValueHandling.Ignore)]
|
||||
public long? FrPost { get; set; }
|
||||
|
||||
[JsonProperty("NR")] public double Nr { get; set; }
|
||||
|
||||
[JsonProperty("NRPost")] public double NrPost { get; set; }
|
||||
}
|
||||
|
||||
public partial class PlayInfo
|
||||
{
|
||||
[JsonProperty("cdnTimeRangeLevel")] public long CdnTimeRangeLevel { get; set; }
|
||||
}
|
||||
|
||||
public partial class VideoFeature
|
||||
{
|
||||
[JsonProperty("mosScore")] public double MosScore { get; set; }
|
||||
|
||||
[JsonProperty("blurProbability")] public double BlurProbability { get; set; }
|
||||
|
||||
[JsonProperty("blockyProbability")] public double BlockyProbability { get; set; }
|
||||
|
||||
[JsonProperty("avgEntropy")] public double AvgEntropy { get; set; }
|
||||
}
|
||||
|
||||
public partial class SameFrame
|
||||
{
|
||||
[JsonProperty("allow")] public bool Allow { get; set; }
|
||||
|
||||
[JsonProperty("availableDepth")] public long AvailableDepth { get; set; }
|
||||
}
|
||||
|
||||
public partial class SoundTrack
|
||||
{
|
||||
[JsonProperty("genreId")] public long GenreId { get; set; }
|
||||
|
||||
[JsonProperty("audioUrls")] public List<KuaiShouShareVideoDatarUrl> AudioUrls { get; set; }
|
||||
|
||||
[JsonProperty("finalStatus")] public long FinalStatus { get; set; }
|
||||
|
||||
[JsonProperty("artist")] public string Artist { get; set; }
|
||||
|
||||
[JsonProperty("avatarUrls")] public List<KuaiShouShareVideoDatarUrl> AvatarUrls { get; set; }
|
||||
|
||||
[JsonProperty("hasCopyright")] public bool HasCopyright { get; set; }
|
||||
|
||||
[JsonProperty("loudness")] public long Loudness { get; set; }
|
||||
|
||||
[JsonProperty("audioType")] public long AudioType { get; set; }
|
||||
|
||||
[JsonProperty("photoId")] public double PhotoId { get; set; }
|
||||
|
||||
[JsonProperty("type")] public long Type { get; set; }
|
||||
|
||||
[JsonProperty("usageCount")] public long UsageCount { get; set; }
|
||||
|
||||
[JsonProperty("photoCount")] public long PhotoCount { get; set; }
|
||||
|
||||
[JsonProperty("disableEnhancedEntry")] public bool DisableEnhancedEntry { get; set; }
|
||||
|
||||
[JsonProperty("imageUrls")] public List<KuaiShouShareVideoDatarUrl> ImageUrls { get; set; }
|
||||
|
||||
[JsonProperty("name")] public string Name { get; set; }
|
||||
|
||||
[JsonProperty("isOffline")] public bool IsOffline { get; set; }
|
||||
|
||||
[JsonProperty("id")] public long Id { get; set; }
|
||||
|
||||
[JsonProperty("user")] public User User { get; set; }
|
||||
}
|
||||
|
||||
public partial class User
|
||||
{
|
||||
[JsonProperty("user_sex")] public string UserSex { get; set; }
|
||||
|
||||
[JsonProperty("eid")] public string Eid { get; set; }
|
||||
|
||||
[JsonProperty("user_id")] public long UserId { get; set; }
|
||||
|
||||
[JsonProperty("user_name")] public string UserName { get; set; }
|
||||
|
||||
[JsonProperty("following")] public bool Following { get; set; }
|
||||
|
||||
[JsonProperty("headurl")] public Uri Headurl { get; set; }
|
||||
|
||||
[JsonProperty("headurls")] public List<KuaiShouShareVideoDatarUrl> Headurls { get; set; }
|
||||
|
||||
[JsonProperty("visitorBeFollowed")] public bool VisitorBeFollowed { get; set; }
|
||||
}
|
||||
|
||||
public partial class TagShow
|
||||
{
|
||||
[JsonProperty("bannerType")] public long BannerType { get; set; }
|
||||
|
||||
[JsonProperty("bizId")] public string BizId { get; set; }
|
||||
|
||||
[JsonProperty("type")] public long Type { get; set; }
|
||||
|
||||
[JsonProperty("usedCount")] public long UsedCount { get; set; }
|
||||
}
|
||||
@@ -45,6 +45,7 @@ public class VideoModel
|
||||
// 点赞数
|
||||
public long DiggCount { get; set; }
|
||||
|
||||
public long ViewCount { get; set; }
|
||||
// 分享数
|
||||
public long ShareCount { get; set; }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user