Beispiel #1
0
        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);
        }
Beispiel #3
0
 /// <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);
        }
Beispiel #5
0
        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
                    });
                }
            }
        }
Beispiel #8
0
        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);
        }
Beispiel #9
0
        /// <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);
        }
Beispiel #11
0
        /// <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());
 }