【问题标题】:IOS How to find full rss feed link with nsscanner classIOS 如何使用 nsscanner 类查找完整的 rss 提要链接
【发布时间】:2015-10-08 18:04:31
【问题描述】:

我正在从基于 rss 提要的项目中获取数据。通过在谷歌上搜索,我发现通常在 HTML 源中以这种格式找到 RSS 链接。

<link rel="alternate" type="application/rss+xml" title="RSS Feed" href="http://feeds.abcnews.com/abcnews/topstories" />

所以,我必须使用 nsscanner 类从 HTML 源中找到 RSS 提要的链接。但我不知道正确的模式,我必须设置 scanUpToString:haracterSetWithCharactersInString: 等等。 所以,请帮助我如何找到 RSS 提要的完整链接。

这是我的尝试:

- (void)viewDidLoad {
NSString *googleString = @"http://abcnews.go.com/";
NSURL *googleURL = [NSURL URLWithString:googleString];
NSError *error;
NSString *googlePage = [NSString stringWithContentsOfURL:googleURL encoding:NSASCIIStringEncoding
                                                   error:&error];

NSLog(@"%@",[self yourStringArrayWithHTMLSourceString:googlePage]);//will return NSMutableArray
}

-(NSMutableArray *)yourStringArrayWithHTMLSourceString:(NSString *)html
{
NSString *from = @"<a href=\"";
NSString *to = @"</a>";
NSMutableArray *array = [[NSMutableArray alloc]init];

NSScanner* scanner = [NSScanner scannerWithString:html];

[scanner scanUpToString:@"<link" intoString:nil];
if (![scanner isAtEnd]) {
    NSString *url = nil;

    [scanner scanUpToString:@"RSS Feed" intoString:nil];
    NSCharacterSet *charset = [NSCharacterSet characterSetWithCharactersInString:@"/>"];
    [scanner scanUpToCharactersFromSet:charset intoString:nil];
    [scanner scanCharactersFromSet:charset intoString:nil];
    [scanner scanUpToCharactersFromSet:charset intoString:&url];
    NSLog(@"%@",url);
    // "url" now contains the URL of the img
 }

return array;
}

目前我只能找到此代码的链接。

输出:

但完整的链接是:-

http://feeds.abcnews.com/abcnews/topstories

【问题讨论】:

    标签: ios objective-c xml-parsing rss nsscanner


    【解决方案1】:

    那是因为

    [NSCharacterSet characterSetWithCharactersInString:@"/>"];
    

    包含字符“/”,它是http://的最后一个字符/ 还有 feeds.abcnews.com 之后的字符。

    编辑:这是一个展示您可以采取的方法的游乐场。(未完全测试)

    它在 Swift 中,但在 Obj-C 中的 API 是相同的。

    var str = "<link rel=\"alternate\" type=\"application/rss+xml\" title=\"RSS Feed\" href=\"http://feeds.abcnews.com/abcnews/topstories\" />";
    
    var scanner = NSScanner.init(string: str);
    var result: NSString?  = nil
    
    scanner.scanUpToString("href=\"", intoString: nil);
    scanner.scanString("href=\"", intoString: nil);
    scanner.scanUpToString("\" />", intoString: &result);
    

    【讨论】:

    • 你能告诉我这叫什么格式吗? &lt;link[^&gt;]*rss[^&gt;]*&gt; 你有什么想法吗?
    • 感谢重播。我不仅要为包含 rss 提要的任何 url 找到 1 个 url。
    • 问题是“如何找到RSS的完整链接”。目前我只得到一半链接需要任何包含 rss 链接的网站的完整 rss 链接。
    【解决方案2】:

    使用“链接”而不是此参考中的“a”标签。

    参考:Regular expression in ios to extract href url and discard rest of anchor tag

    【讨论】:

    • 是的,我可以使用链接,但我的链接不是静态的,它会根据用户的搜索而有所不同。
    • 你的意思是说它也可以是一个标签?
    • 不,它会带有这种格式。 &lt;link rel="alternate" type="application/rss+xml" title="RSS Feed" href="http://feeds.abcnews.com/abcnews/topstories" /&gt;
    猜你喜欢
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    • 2015-11-03
    • 2013-10-15
    • 2010-10-03
    相关资源
    最近更新 更多