2012-05-10 2 views
3

я пытаюсь использовать этот пример, чтобы получить изображения из URL-адреса http://www.nydailynews.com/cmlink/NYDN.Article.rssКак получить все возможные URL изображения из позиции RSS-канала?

, но никакого успеха

Может у мне помочь найти все правильные пути получают все возможные адреса изображения из RSS элемента канала от SyndicationItem класса?

Существует проектное решение here, но я думаю, это должно быть более общее решение.

Спасибо!

List<RssFeedItem> rssItems = new List<RssFeedItem>(); 
        Stream stream = e.Result; 
        XmlReader response = XmlReader.Create(stream); 
        SyndicationFeed feeds = SyndicationFeed.Load(response); 
        foreach (SyndicationItem f in feeds.Items) 
        { 
         RssFeedItem rssItem = new RssFeedItem(); 

         rssItem.Description = f.Summary.Text; 
foreach (SyndicationLink enclosure in f.Links.Where<SyndicationLink>(x => x.RelationshipType == "enclosure")) 
          { 
           Uri url = enclosure.Uri; 
           long length = enclosure.Length; 
           string mediaType = enclosure.MediaType; 
           rssItem.ImageLinks.Add(url.AbsolutePath); 
          } 
} 
+0

Существует элемент вы хотите URL-адрес из этой части, или вы хотите URL-адреса из <СМИ: содержание>? – Habib

+0

@ Habib.OSU Основная проблема заключается в том, что я запутался, потому что существует множество способов представления URL-адресов изображений под элементом RSS-ленты. Поэтому я пытаюсь сделать код для получения изображений из разных мест элемента фида. Теперь я должен получить его из

ответ

4

Я нашел решение.

foreach (SyndicationElementExtension extension in f.ElementExtensions) 
{ 
    XElement element = extension.GetObject<XElement>(); 

    if (element.HasAttributes) 
    { 
     foreach (var attribute in element.Attributes()) 
     { 
      string value = attribute.Value.ToLower(); 
      if (value.StartsWith("http://") && (value.EndsWith(".jpg") || value.EndsWith(".png") || value.EndsWith(".gif"))) 
      { 
        rssItem.ImageLinks.Add(value); // Add here the image link to some array 
      } 
     }         
    }        
} 
2
XDocument xDoc = XDocument.Load("http://www.nydailynews.com/cmlink/NYDN.Article.rss"); 
XNamespace media = XNamespace.Get("http://search.yahoo.com/mrss/"); 

var images = xDoc.Descendants(media+"content") 
    .Where(m=>m.Attribute("type").Value=="image/jpeg") 
    .Select(m=>m.Attribute("url").Value) 
    .ToArray(); 

--EDIT--

var images = feeds.Items 
    .SelectMany(i => i.ElementExtensions 
         .Select(e => e.GetObject<XElement>().Attribute("url").Value) 
       ) 
    .ToArray(); 
+0

Спасибо! Но как это можно сделать через SyndicationItem? Я просто пытаюсь использовать для этого класс Microsoft ... –

1

Получает список изображений из строки

var text = "your text with image links"; 
Regex regx = new Regex("http://([\\w+?\\.\\w+])+([a-zA-Z0-9\\~\\!\\@\\#\\$\\%\\^\\&amp;\\*\\(\\)_\\-\\=\\+\\\\\\/\\?\\.\\:\\;\\'\\,]*)?.(?:jpg|bmp|gif|png)", RegexOptions.IgnoreCase); 
MatchCollection mactches = regx.Matches(text); 
+0

Не рекомендуется использовать регулярное выражение в больших файлах. Таким образом, итерация по элементу, предложенная в принятом ответе, намного лучше. – scriptmonster

Смежные вопросы