public ActionResult _Microblog_Attachments(long microblogId, long?forwardMicroblogId) { MicroblogEntity microblog = microBlogService.Get(microblogId); if (microblog == null) { return(new EmptyResult()); } if (microblog.HasPhoto) { IEnumerable <Attachment> attachments = attachementService.GetsByAssociateId(microblog.MicroblogId); if (attachments != null && attachments.Count() > 0) { microblog.ImageUrl = SiteUrls.Instance().ImageUrl(attachments.First(), TenantTypeIds.Instance().Microblog(), ImageSizeTypeKeys.Instance().Medium()); ViewData["imageCount"] = attachments.Count(); } } if (microblog.HasVideo) { ParsedMedia parsedMedia = parsedMediaService.Get(microblog.VideoAlias); if (parsedMedia != null) { ViewData["videoThumbnailUrl"] = parsedMedia.ThumbnailUrl; } } ViewData["ForwardMicroblogId"] = forwardMicroblogId; return(View(microblog)); }
private double GetMatchScore(ParsedMedia searchedMedia, ParsedMedia parsedSearchResult) { double matchScore = 1.0; var maximalDistances = new[] { new { Name = nameof(ParsedMedia.Title), Ratio = 0.2 }, new { Name = nameof(ParsedMedia.Season), Ratio = 0.0 }, new { Name = nameof(ParsedMedia.Episode), Ratio = 0.0 }, new { Name = nameof(ParsedMedia.Quality), Ratio = 0.5 }, new { Name = nameof(ParsedMedia.Resolution), Ratio = 0.0 } }; Type type = typeof(ParsedMedia); foreach (var maximalDistance in maximalDistances) { string searchedMediaPropertyValue = type.GetProperty(maximalDistance.Name).GetValue(searchedMedia) as string; string searchResultPropertyValue = type.GetProperty(maximalDistance.Name).GetValue(parsedSearchResult) as string; if (!LevenshteinDistance.CheckLevenshteinDistanceRatio(searchedMediaPropertyValue, searchResultPropertyValue, maximalDistance.Ratio)) { matchScore -= 1.0 - maximalDistance.Ratio; } } return(matchScore); }
/// <summary> /// 解析Url /// </summary> /// <returns></returns> private string UrlTagGenerate(string url, long associateId, long userId, ParsedMedia parsedMedia) { if (parsedMedia == null) { return(string.Empty); } if (parsedMedia != null) { var microblog = new MicroblogService().Get(associateId); if (parsedMedia.MediaType == MediaType.Video) { microblog.VideoAlias = parsedMedia.Alias; } else if (parsedMedia.MediaType == MediaType.Audio) { microblog.AudioAlias = parsedMedia.Alias; } } if (parsedMedia.MediaType == MediaType.Video) { return(string.Format("<a id=\"attachmentsListLiVideo-{0}\" href=\"{3}\" target=\"_blank\" data-microblogId=\"{1}\">{2}<span class=\"tn-icon tn-icon-movie tn-icon-inline\"></span></a>", parsedMedia.Alias, associateId, url, SiteUrls.Instance()._Microblog_Attachments_Video(userId, associateId, parsedMedia.Alias))); } else if (parsedMedia.MediaType == MediaType.Audio) { return(string.Format("<a id=\"attachmentsListLiMusic-{0}\" href=\"{3}\" target=\"_blank\" data-microblogId=\"{1}\" >{2}<span class=\"tn-icon tn-icon-music tn-icon-inline\"></span></a>", parsedMedia.Alias, associateId, url, SiteUrls.Instance()._Microblog_Attachments_Music(userId, associateId, parsedMedia.Alias))); } else { return(string.Format("<a href=\"{0}\" target=\"_blank\">{1}</a>", parsedMedia.Url, DIContainer.Resolve <ISettingsManager <ShortUrlSettings> >().Get().ShortUrlDomain + url)); } }
public void ApiTest() { ParsedMedia parsedMedia = _filenameParser.Parse("The.Secret.Life.of.Walter.Mitty.2013.1080p.BluRay.x264.YIFY"); MediaSearchResult searchResult = _apiSearchService.SearchMultiByQuery(parsedMedia.Title)[0]; MediaDetail apiResult = _apiSearchService.GetItemDetail(searchResult.MediaType, searchResult.Id); Console.WriteLine(apiResult); }
public ActionResult _Microblog_Attachments_Music(long microblogId, string alias, long?forwardMicroblogId) { ParsedMedia entity = parsedMediaService.Get(alias); if (entity == null) { return(new EmptyResult()); } ViewData["ForwardMicroblogId"] = forwardMicroblogId; return(View(entity)); }
public void TorrentSearchTest() { ParsedMedia parsedMedia = _filenameParser.Parse("The.Secret.Life.of.Walter.Mitty.2013.1080p.BluRay.x264.YIFY"); Site leedX = SiteProvider.LeedX; IEnumerable <ParsedMedia> searchResults = _torrentFinder.GetSearchResultsFromSite(SiteProvider.ThePirateBay, $"{parsedMedia.Title} {parsedMedia.Year}", 10) .Select(result => _filenameParser.Parse(result.Name)); //TorrentSiteDetail torrentDetail = TorrentFinderService.GetTorrentDetail(searchResults[0]); foreach (ParsedMedia searchResult in searchResults) { Console.WriteLine(searchResult); } }
private IEnumerable <Match <ParsedMedia, TorrentSiteSearchResult> > GetMatches(ParsedMedia searchedMedia, List <TorrentSiteSearchResult> searchResults) { foreach (TorrentSiteSearchResult searchResult in searchResults) { ParsedMedia searchResultParsed = TorrentFilenameParserService.Parse(searchResult.Name); double matchScore = GetMatchScore(searchedMedia, searchResultParsed); if (matchScore > 0.2) { yield return(new Match <ParsedMedia, TorrentSiteSearchResult> { Source = searchedMedia, Target = searchResult, Score = matchScore }); } } }
public ParsedMedia Parse(string filename) { ParsedMedia parsedMedia = new ParsedMedia(); // First index of parsed data (year, season..) int firstIndex = filename.Length - 1; parsedMedia.Season = MatchByRegexPattern(RegexPattern.Season, filename, ref firstIndex); parsedMedia.Episode = MatchByRegexPattern(RegexPattern.Episode, filename, ref firstIndex); parsedMedia.Year = MatchByRegexPattern(RegexPattern.Year, filename, ref firstIndex); parsedMedia.Resolution = MatchByRegexPattern(RegexPattern.Resolution, filename, ref firstIndex); parsedMedia.Quality = MatchByRegexPattern(RegexPattern.Quality, filename, ref firstIndex); parsedMedia.Codec = MatchByRegexPattern(RegexPattern.Codec, filename, ref firstIndex); parsedMedia.Audio = MatchByRegexPattern(RegexPattern.Audio, filename, ref firstIndex); parsedMedia.Group = MatchByRegexPattern(RegexPattern.Group, filename, ref firstIndex); parsedMedia.Size = MatchByRegexPattern(RegexPattern.Size, filename, ref firstIndex); parsedMedia.Title = filename.Remove(firstIndex).Replace('.', ' ').Trim(); return(parsedMedia); }
/// <summary> /// Get's the query string for searching for the <see cref="ParsedMedia"/> on various web sites /// </summary> /// <param name="parsedMedia"><see cref="ParsedMedia"/> that is going to be used to create query string.</param> /// <returns>Query string that can be used for searching</returns> private string GetSearchQuery(ParsedMedia parsedMedia) { if (String.IsNullOrWhiteSpace(parsedMedia.Title)) { throw new ArgumentNullException("parsedMedia.Title", "Title can not be null, empty or whitespace."); } StringBuilder queryBuilder = new StringBuilder(parsedMedia.Title.Trim()); if (!String.IsNullOrWhiteSpace(parsedMedia.Season) && !String.IsNullOrWhiteSpace(parsedMedia.Episode)) { AppendIfNotNull($"S{parsedMedia.Season}E{parsedMedia.Episode}"); } else { AppendIfNotNull(parsedMedia.Year); } AppendIfNotNull(parsedMedia.Quality); AppendIfNotNull(parsedMedia.Resolution); AppendIfNotNull(parsedMedia.Group); return(queryBuilder.ToString()); bool AppendIfNotNull(string text) { if (String.IsNullOrWhiteSpace(text)) { return(false); } text = text.Trim(); queryBuilder.Append(' '); queryBuilder.Append(text); return(true); } /*void AppendFirstNotNull(params string[] texts) * { * for (int i = 0; i < texts.Length && !AppendIfNotNull(texts[i]); i++) ; * }*/ }
/// <summary> /// 生成多媒体内容标签 /// </summary> /// <param name="shrotUrl">短网址</param> /// <param name="parsedMedia">多媒体连接实体</param> private string ParsedMediaTagGenerateForMobile(string shrotUrl, ParsedMedia parsedMedia) { if (parsedMedia == null) { return(string.Empty); } if (parsedMedia.MediaType == MediaType.Audio) { string musicHtml = "<p><a href=\"{1}\" ntype='mediaPlay'>点击播放音乐</a></p>"; ShortUrlEntity shortUrlEntity = new ShortUrlService().Get(parsedMedia.Alias); return(string.Format(musicHtml, SiteUrls.FullUrl(SiteUrls.Instance()._MusicDetail(parsedMedia.Alias)), shortUrlEntity == null ? null : shortUrlEntity.Url)); } else if (parsedMedia.MediaType == MediaType.Video) { string videoHtml = "<p><a href=\"{1}\" ntype=\"mediaPlay\">{1}<img src=\"{2}\"></a></p>"; ShortUrlEntity shortUrlEntity = new ShortUrlService().Get(parsedMedia.Alias); return(string.Format(videoHtml, SiteUrls.FullUrl(SiteUrls.Instance()._VideoDetail(parsedMedia.Alias)), shortUrlEntity == null ? null : shortUrlEntity.Url, parsedMedia.ThumbnailUrl)); } return(string.Empty); }
/// <summary> /// 生成多媒体内容标签 /// </summary> /// <param name="shrotUrl">短网址</param> /// <param name="parsedMedia">多媒体连接实体</param> private string ParsedMediaTagGenerate(string shrotUrl, ParsedMedia parsedMedia) { if (parsedMedia == null) { return(string.Empty); } if (parsedMedia.MediaType == MediaType.Audio) { string musicHtml = "<p><a href=\"{0}\" ntype=\"mediaPlay\">{1}<span class=\"tn-icon tn-icon-music tn-icon-inline\"></span></a><br />" + "<a href=\"{0}\" ntype=\"mediaPlay\" class=\"tn-button tn-corner-all tn-button-default tn-button-text-icon-primary\">" + "<span class=\"tn-icon tn-icon-triangle-right\"></span><span class=\"tn-button-text\">音乐播放</span></a></p>"; return(string.Format(musicHtml, SiteUrls.Instance()._MusicDetail(parsedMedia.Alias), shrotUrl)); } else if (parsedMedia.MediaType == MediaType.Video) { string videoHtml = "<p><a href=\"{0}\" ntype=\"mediaPlay\">{1}<span class=\"tn-icon tn-icon-movie tn-icon-inline\"></span></a><br />" + "<a ntype=\"mediaPlay\" href=\"{0}\"><img src=\"{2}\"></a></p>"; return(string.Format(videoHtml, SiteUrls.Instance()._VideoDetail(parsedMedia.Alias), shrotUrl, parsedMedia.ThumbnailUrl)); } return(string.Empty); }
/// <summary> /// 解析Url /// </summary> /// <returns></returns> private string UrlTagGenerateForMobile(string url, long associateId, long userId, ParsedMedia parsedMedia) { if (parsedMedia == null) { return(string.Empty); } if (parsedMedia != null) { var microblog = new MicroblogService().Get(associateId); if (parsedMedia.MediaType == MediaType.Video) { microblog.VideoAlias = parsedMedia.Alias; } else if (parsedMedia.MediaType == MediaType.Audio) { microblog.AudioAlias = parsedMedia.Alias; } } string fullUrl = DIContainer.Resolve <ISettingsManager <SiteSettings> >().Get().MainSiteRootUrl + "/" + parsedMedia.Alias; return(string.Format("{0}", fullUrl)); }
private Match <ParsedMedia, TorrentSiteSearchResult> GetBestMatch(ParsedMedia searchedMedia, List <TorrentSiteSearchResult> searchResults) { return(GetMatches(searchedMedia, searchResults) .OrderByDescending(match => match.Score) .FirstOrDefault()); }