我有问题,我在我的 iOS 应用程序中使用 MWFeedParser Rss 阅读器,它运行良好,但我需要从我的提要中获取图像。你能帮我吗?
2 回答
我在 cellForRowAtIndexPath 函数中使用了它,以便在显示单元格时搜索图像
MWFeedItem *item = itemsToDisplay[indexPath.row];
if (item) {
NSString *htmlContent = item.content;
NSString *imgSrc;
// find match for image
NSRange rangeOfString = NSMakeRange(0, [htmlContent length]);
NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@"(<img.*?src=\")(.*?)(\".*?>)" options:0 error:nil];
if ([htmlContent length] > 0) {
NSTextCheckingResult *match = [regex firstMatchInString:htmlContent options:0 range:rangeOfString];
if (match != NULL ) {
NSString *imgUrl = [htmlContent substringWithRange:[match rangeAtIndex:2]];
NSLog(@"url: %@", imgUrl);
//NSLog(@"match %@", match);
if ([[imgUrl lowercaseString] rangeOfString:@"feedburner"].location == NSNotFound) {
imgSrc = imgUrl;
}
}
}
}
请注意,如果 URL 中有“feedburner”,我也会忽略该图像,以避免使用 feedburner 类型的图标。
稍后显示图像时,我也在使用 AFNetwork 的类
if (imgSrc != nil && [imgSrc length] != 0 ) {
[myimage setImageWithURL:[NSURL URLWithString:imgSrc] placeholderImage:[UIImage imageNamed:IMAGETABLENEWS]];
} else {
NSLog(@"noimage");
cell.imageView.image = [UIImage imageNamed:IMAGETABLENEWS];
//[myimage setImage:[UIImage imageNamed:IMAGETABLENEWS]];
}
我已经在我评论的 NSLog 部分留下了,所以你可以取消评论并检查你是否想要
确保您有一个占位符的 IMAGETABLENEWS 常量,或者根据需要删除该部分。
这只是对html文本中的图像进行非常简单的检查,并不全面。它符合我的目的,并且可以帮助您正确地做一些更详细的事情。
如果您MWFeedItem
的图像中嵌入了图像enclosure-tag
,您可能需要考虑执行以下操作:
MWFeedItem
有一个名为 的属性enclosures
。它是一个包含一个或多个字典的数组。
该词典在
- (BOOL)createEnclosureFromAttributes:(NSDictionary *)attributes andAddToItem:(MWFeedItem *)currentItem
( MWFeedParser.M
) 中生成。
这些字典具有三个键(如果可用):url
、type
& length
。
第一个可能就是你要找的那个。我设法得到它:
提要示例
<item>
<title>Item title</title>
<link>http://www.yourdomain.com</link>
<description>Item description</description>
<pubDate>Mon, 01 Jan 2016 12:00:00 +0000</pubDate>
<enclosure url="http://www.yourdomain.com/image.jpg" length="0" type="image/jpeg"></enclosure>
<category>Algemeen</category>
</item>
请注意里面的图片链接<enclosure></enclosure>
你的视图控制器.m
- (void)feedParser:(MWFeedParser *)parser didParseFeedItem:(MWFeedItem *)item {
NSArray *EnclosureArray = item.enclosures;
NSDictionary *ImageDict = [EnclosureArray objectAtIndex:0]; // 0 Should be replaced with the index of your image dictionary.
NSString *ImageLink = [ImageDict objectForKey:@"url"];
// Returns: http://www.yourdomain.com/image.jpg
}