Пример #1
0
        public override dynamic ProcessDOMNode(XElement xmlParceRule, IDOMElement expectedDOMElement, PostModel postModel)
        {
            IPostContentModel result = null;

            var searchCritereaNode = xmlParceRule.Elements().FirstOrDefault(el => el.Name.ToString().ToLower() == SEARCH_CRITEREA_NODE_NAME.ToLower());

            var expectedNode = SearchForNode(searchCritereaNode.Elements(), expectedDOMElement, postModel);

            if (expectedNode != null)
            {
                string videoName = string.Empty;
                string videoData = string.Empty;

                var searchCritereaVideoNameNode = xmlParceRule.Elements().FirstOrDefault(el => el.Name.ToString().ToLower() == (SUB_SEARCH_CRITEREA_NODE_NAME + VIDEO_NAME_POSTFIX_NAME).ToLower());
                var videoNameNode = SearchForNode(searchCritereaVideoNameNode.Elements(), expectedNode, postModel);
                if (videoNameNode != null)
                {
                    videoName = ProcessGetCriterea(xmlParceRule, videoNameNode, postModel, VIDEO_NAME_POSTFIX_NAME);
                }

                var searchCritereaVideoLinkNode = xmlParceRule.Elements().FirstOrDefault(el => el.Name.ToString().ToLower() == (SUB_SEARCH_CRITEREA_NODE_NAME + VIDEO_LINK_POSTFIX_NAME).ToLower());
                if (searchCritereaVideoLinkNode != null)
                {
                    var videoLinkNode = SearchForNode(searchCritereaVideoLinkNode.Elements(), expectedNode, postModel);
                    if (videoNameNode != null)
                    {
                        videoData = ProcessGetCriterea(xmlParceRule, videoLinkNode, postModel, VIDEO_LINK_POSTFIX_NAME);
                    }
                }
                else
                {
                    var externalGetNode = xmlParceRule.Elements().FirstOrDefault(el => el.Name.ToString().ToLower() == EXTERNAL_GET_NODE_NAME.ToLower());
                    if (externalGetNode != null)
                    {
                        var videoDataTask = ProcessExternlaGetCriterea(externalGetNode.Elements(), expectedNode, postModel);
                        videoDataTask.Wait();

                        videoData = videoDataTask.Result;
                    }
                }

                if (!string.IsNullOrEmpty(videoData))
                {
                    if (!string.IsNullOrEmpty(videoName))
                    {
                        result = PostContentModelfactory.GetInitializedFactory(PostContentTypeEnum.Video, postModel.PostContent.Count, new VideoPostContentContainerModel(videoName, videoData));
                    }
                    else
                    {
                        Logger.LogException("VideoContentXMLParcer factory returned empty video name", LogTypeEnum.CORE);
                    }
                }
                else
                {
                    Logger.LogException("VideoContentXMLParcer factory returned empty video data", LogTypeEnum.CORE);
                }
            }


            return(result);
        }
        public override dynamic ProcessDOMNode(XElement xmlParceRule, IDOMElement expectedDOMElement, PostModel postModel)
        {
            IPostContentModel result = null;

            var searchCritereaNode = xmlParceRule.Elements().FirstOrDefault(el => el.Name.ToString().ToLower() == SEARCH_CRITEREA_NODE_NAME.ToLower());

            var expectedNode = SearchForNode(searchCritereaNode.Elements(), expectedDOMElement, postModel);

            if (expectedNode != null)
            {
                var imgUrls = new List <string>();

                Parallel.ForEach(expectedNode.Childs, child =>
                {
                    if (!child.BadTag)
                    {
                        var subSearchCritereaNode = xmlParceRule.Elements().FirstOrDefault(el => el.Name.ToString().ToLower() == SUB_SEARCH_CRITEREA_NODE_NAME.ToLower());

                        var expectedSubNode = SearchForNode(subSearchCritereaNode.Elements(), child, postModel);
                        if (expectedSubNode != null)
                        {
                            var imgUrl = string.Empty;

                            var getCritereaNode = xmlParceRule.Elements().FirstOrDefault(el => el.Name.ToString().ToLower() == GET_CRITEREA_NODE_NAME.ToLower());
                            var getCriterea     = getCritereaNode.Elements().First();

                            var getResult = Regex.Matches(expectedSubNode.GetContent(getCriterea.Name.ToString()), getCriterea.Value, RegexOptions.IgnoreCase);

                            var trimCritereaNode = xmlParceRule.Elements().FirstOrDefault(el => el.Name.ToString().ToLower() == TRIM_CRITEREA_NODE_NAME.ToLower());

                            foreach (Match resultPart in getResult)
                            {
                                if (trimCritereaNode != null)
                                {
                                    imgUrl += (trimCritereaNode.Attributes().Any(attr => attr.Name.ToString().ToLower() == STRING_TRIM_ATTRIBUTE_NAME.ToLower() && bool.Parse(attr.Value))
                                            ? resultPart.Value.Split(trimCritereaNode.Value.Split(new[] { ' ' }), StringSplitOptions.RemoveEmptyEntries)[0]
                                            : resultPart.Value.Trim(trimCritereaNode.Value.ToArray())).Trim();
                                }
                                else
                                {
                                    imgUrl += resultPart.Value.Trim();
                                }
                            }

                            var extNode = xmlParceRule.Elements().FirstOrDefault(el => el.Name.ToString().ToLower() == IMG_EXT_NAME.ToLower());
                            if (extNode != null && !string.IsNullOrEmpty(imgUrl))
                            {
                                imgUrl += string.Format(".{0}", extNode.Value.Trim());
                            }

                            if (string.IsNullOrEmpty(imgUrl))
                            {
                                Logger.LogException("ImgContentXMLParcer factory returned an empty link", LogTypeEnum.CORE);
                            }
                            else
                            {
                                var filename = Path.GetFileNameWithoutExtension(imgUrl);
                                if (string.IsNullOrEmpty(filename))
                                {
                                    Logger.LogException(string.Format("ImgContentXMLParcer factory returned a link without name: {0}", imgUrl), LogTypeEnum.CORE);
                                }
                                else
                                {
                                    var extension = Path.GetExtension(imgUrl);
                                    if (string.IsNullOrEmpty(extension))
                                    {
                                        Logger.LogException(string.Format("ImgContentXMLParcer factory returned a link without extension: {0}", imgUrl), LogTypeEnum.CORE);
                                    }
                                    else
                                    {
                                        imgUrls.Add(imgUrl);
                                    }
                                }
                            }
                        }
                    }
                });

                if (imgUrls.Any())
                {
                    result = PostContentModelfactory.GetInitializedFactory(PostContentTypeEnum.Img, postModel.PostContent.Count, imgUrls.ToArray());
                }
                else
                {
                    Logger.LogException("ImgContentXMLParcer factory returned no records", LogTypeEnum.CORE);
                }
            }

            return(result);
        }
        public override dynamic ProcessDOMNode(XElement xmlParceRule, IDOMElement expectedDOMElement, PostModel postModel)
        {
            IPostContentModel result = null;

            var searchCritereaNode = xmlParceRule.Elements().FirstOrDefault(el => el.Name.ToString().ToLower() == SEARCH_CRITEREA_NODE_NAME.ToLower());

            var expectedNode = SearchForNode(searchCritereaNode.Elements(), expectedDOMElement, postModel);

            if (expectedNode != null)
            {
                var songsData = new List <AudioPostContentContainerModel>();

                Parallel.ForEach(expectedNode.Childs, child => {
                    var songAuthor = string.Empty;
                    var songName   = string.Empty;

                    var searchCritereaSongLinkNode = xmlParceRule.Elements().FirstOrDefault(el => el.Name.ToString().ToLower() == (SUB_SEARCH_CRITEREA_NODE_NAME + SONG_LINK_POSTFIX_NAME).ToLower());
                    var songLinkNode = SearchForNode(searchCritereaSongLinkNode.Elements(), child, postModel);
                    if (songLinkNode != null)
                    {
                        var songLink = ProcessGetCriterea(xmlParceRule, songLinkNode, postModel, SONG_LINK_POSTFIX_NAME);
                        if (!string.IsNullOrEmpty(songLink))
                        {
                            var searchCritereaSongAuthorNode = xmlParceRule.Elements().FirstOrDefault(el => el.Name.ToString().ToLower() == (SUB_SEARCH_CRITEREA_NODE_NAME + SONG_AUTHOR_POSTFIX_NAME).ToLower());
                            if (searchCritereaSongAuthorNode != null)
                            {
                                var songAuthorNode = SearchForNode(searchCritereaSongAuthorNode.Elements(), child, postModel);
                                songAuthor         = ProcessGetCriterea(xmlParceRule, songAuthorNode, postModel, SONG_AUTHOR_POSTFIX_NAME);
                            }


                            var searchCritereaSongNameNode = xmlParceRule.Elements().FirstOrDefault(el => el.Name.ToString().ToLower() == (SUB_SEARCH_CRITEREA_NODE_NAME + SONG_NAME_POSTFIX_NAME).ToLower());
                            if (searchCritereaSongNameNode != null)
                            {
                                var songNameNode = SearchForNode(searchCritereaSongNameNode.Elements(), child, postModel);
                                songName         = ProcessGetCriterea(xmlParceRule, songNameNode, postModel, SONG_NAME_POSTFIX_NAME);
                            }

                            var filename = Path.GetFileName(songLink);
                            if (string.IsNullOrEmpty(filename))
                            {
                                Logger.LogException(string.Format("AudioContentXMLParcer factory returned a link without name: {0}", songLink), LogTypeEnum.CORE);
                            }
                            else
                            {
                                var extension = Path.GetExtension(songLink);
                                if (string.IsNullOrEmpty(extension))
                                {
                                    Logger.LogException(string.Format("AudioContentXMLParcer factory returned a link without extension: {0}", songLink), LogTypeEnum.CORE);
                                }
                                else
                                {
                                    songsData.Add(new AudioPostContentContainerModel(songAuthor, songName, songLink));
                                }
                            }
                        }
                        else
                        {
                            Logger.LogException("AudioContentXMLParcer factory returned an empty link", LogTypeEnum.CORE);
                        }
                    }
                });

                if (songsData.Any())
                {
                    result = PostContentModelfactory.GetInitializedFactory(PostContentTypeEnum.Audio, postModel.PostContent.Count, songsData.ToArray());
                }
                else
                {
                    Logger.LogException("AudioContentXMLParcer factory returned no records", LogTypeEnum.CORE);
                }
            }

            return(result);
        }
Пример #4
0
        public override dynamic ProcessDOMNode(XElement xmlParceRule, IDOMElement expectedDOMElement, PostModel postModel)
        {
            dynamic textContent = base.ProcessDOMNode(xmlParceRule, expectedDOMElement, postModel);

            return(string.IsNullOrEmpty(textContent) ? null : PostContentModelfactory.GetInitializedFactory(PostContentTypeEnum.Text, postModel.PostContent.Count, textContent));
        }