【问题标题】:How to get all possible image URLs from RSS feed item?如何从 RSS 提要项中获取所有可能的图像 URL?
【发布时间】:2012-05-10 17:41:13
【问题描述】:

我尝试使用此示例从http://www.nydailynews.com/cmlink/NYDN.Article.rss 获取图片网址

但没有成功

你能帮我找到所有正确的方法来从SyndicationItem类的RSS提要项中获取所有可能的图像URL吗?

有草案解决方案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);
                            }
}

【问题讨论】:

  • 有一个元素 你想要那个部分的 url 还是你想要 的 url ?
  • @Habib.OSU 主要问题是我很困惑,因为在 RSS 提要项下有很多表示图像 URL 的方法。所以我尝试编写一些代码来从提要项的不同位置获取图像。现在我必须从

标签: c# .net image url syndication-feed


【解决方案1】:

我找到了解决办法。

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

    【讨论】:

    • 谢谢!但是如何通过 SyndicationItem 来完成呢?我只是尝试使用 Microsoft 类...
    【解决方案3】:

    从字符串中获取图片列表

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

    【讨论】:

    • 在大文件中使用正则表达式不是一个好主意。因此,对已接受答案中建议的元素进行迭代要好得多。
    【解决方案4】:

    我通过解析 HTML 代码使用的另一种方式:

    Public Function GetImagesUrlListromHtmlCode(strHtmlPageCode As String) As List(Of String)
            Dim regexPattern As String = "\bhttps?:[^)''" & Chr(34) & "]+\.(?:ase|art|bmp|blp|cd5|cit|cpt|cr2|cut|dds|dib|djvu|egt|exif|gif|gpl|grf|icns|ico|iff|jng|jpeg|jpg|jfif|jp2|jps|lbm|max|miff|mng|msp|nitf|ota|pbm|pc1|pc2|pc3|pcf|pcx|pdn|pgm|PI1|PI2|PI3|pict|pct|pnm|pns|ppm|psb|psd|pdd|psp|px|pxm|pxr|qfx|raw|rle|sct|sgi|rgb|int|bw|tga|tiff|tif|vtf|xbm|xcf|xpm|3dv|amf|ai|awg|cgm|cdr|cmx|dxf|e2d|egt|eps|fs|gbr|odg|svg|stl|vrml|x3d|sxd|v2d|vnd|wmf|emf|art|xar|png|webp|jxr|hdp|wdp|cur|ecw|iff|lbm|liff|nrrd|pam|pcx|pgf|sgi|rgb|rgba|bw|int|inta|sid|ras|sun|tga)(?![a-z])"
            Dim matchedImage As Match
            Dim intImageFound As Integer
            Dim GetImagesUrlListromHtmlCodeTemp As New List(Of String)
            Dim strMsgException As String = "Erreur dans le module GetImagesUrlListromHtmlCode"
    
            Try
                For Each matchedImage In Regex.Matches(strHtmlPageCode, regexPattern)
                    GetImagesUrlListromHtmlCodeTemp.Add(Replace(Replace(matchedImage.Value, Chr(34), ""), "=", ""))
                    intImageFound = intImageFound + 1
                    
                Next
    
                Return GetImagesUrlListromHtmlCodeTemp.Distinct().ToList
    
            Catch ex As Exception            
                Return Nothing
                Exit Try
    
            End Try
    
    End Function
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-21
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-04
      相关资源
      最近更新 更多