2012-05-10 68 views
3

我试图用这个例子从http://www.nydailynews.com/cmlink/NYDN.Article.rss如何从RSS提要项目获取所有可能的图片网址?

获得图像的URL,但没有成功

可以ü帮助我找到正确的方式来获得从RSS源项目的所有可能的图像的URL通过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或你想从网址<媒体:内容>? – Habib

+0

@ Habib.OSU主要的问题是我很困惑,因为在RSS提要条目下有很多方法来表示图片网址。因此,我尝试制作一些代码以从Feed项目的不同位置获取图像。现在我必须从中获得它,但我不知道如何。 –

回答

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

- 编辑 -

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