2012-05-10 111 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