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); }
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)); }