Android:当网站包含:link rel=”时如何下载RSS;候补;类型=";应用程序/rss+;xml";

Android:当网站包含:link rel=”时如何下载RSS;候补;类型=";应用程序/rss+;xml";,android,html,rss,Android,Html,Rss,我正在制作一个与RSS相关的应用程序。 我希望能够下载RSS(xml),只要网站URL包含: <link rel="alternate" type="application/rss+xml" title="Engadget" href="http://www.engadget.com/rss.xml"> link rel=“alternate”type=“应用程序/rss+xml” 例如,源包含: <link rel="alternate" type="application

我正在制作一个与RSS相关的应用程序。
我希望能够下载RSS(xml),只要网站URL包含:

<link rel="alternate" type="application/rss+xml" title="Engadget" href="http://www.engadget.com/rss.xml">
link rel=“alternate”type=“应用程序/rss+xml”

例如,源包含:

<link rel="alternate" type="application/rss+xml" title="Engadget" href="http://www.engadget.com/rss.xml">

在我不知道的情况下http://www.engadget.com/rss.xml'url,输入时如何下载RSS'http://www.engadget.com“?

要完成此任务,您需要:

  • 检测URL是否指向HTML文件。请参阅下面代码中的
    isHtml
    方法
  • 如果URL指向HTML文件,请从中提取RSS URL。请参阅下面代码中的
    extractRssUrl
    方法
  • 以下代码是您在问题中粘贴的代码的修改版本。对于I/O,我用于有用的
    IOUtils
    FileUtils
    类。
    IOUtils.toString
    用于将输入流转换为字符串,如文章中所建议的

    extracterssurl
    使用正则表达式来解析HTML,尽管它受到高度反对。(请参阅“.”中的咆哮)。考虑到这一点,让
    extracterssurl
    作为起点。
    extracterssurl
    中的正则表达式是基本的,并不涵盖所有情况

    请注意,对
    isRss(str)
    的调用已被注释掉。如果要进行RSS检测,请参阅“”


    我想最明显的答案是你首先获取你拥有的URL(http://www.engadget.com),然后在HTML中查找具有正确类型的
    标记,然后获取其
    href
    属性

    URL url = new URL("http://www.engadget.com");
    InputStream is = url.openStream();
    int ptr = 0;
    StringBuffer buffer = new StringBuffer();
    while ((ptr = is.read()) != -1) {
      buffer.append((char)ptr);
    }
    String html = buffer.toString();
    Pattern rsspatt = Pattern.compile("<link[^>]*rss[^>]*>");
    Matcher m = rsspatt.matcher(html);
    String link = "";
    if (m.find()) {
      String rsslink = m.group();
      Pattern xmllinkpatt = Pattern.compile("href=\"([^\"]+)\"");
      Matcher m2 = xmllinkpatt.matcher(rsslink);
      m2.find();
      link = m2.group(1);
    }
    
    URL=新URL(“http://www.engadget.com");
    InputStream=url.openStream();
    int-ptr=0;
    StringBuffer=新的StringBuffer();
    而((ptr=is.read())!=-1){
    buffer.append((char)ptr);
    }
    字符串html=buffer.toString();
    Pattern rsspatt=Pattern.compile(“]*rss[^>]*>”;
    Matcher m=rsspat.Matcher(html);
    字符串链接=”;
    if(m.find()){
    字符串rsslink=m.group();
    模式xmlinkpatt=Pattern.compile(“href=\”([^\“]+)\”);
    匹配器m2=xmllinkpatt.Matcher(rsslink);
    m2.find();
    link=m2组(1);
    }
    
    最后,变量
    link
    将为空或包含所需的链接,您可以将其输入到downloadXml函数中


    通常我不建议通过正则表达式解析HTML,但我假设这是针对手机应用程序的,您希望它保持简单,并尽可能只使用核心。当然,如果您想获得更多乐趣,您可以使用Jsoup检查链接标记和正确属性的存在性,并提取所需的链接。

    谢谢您,我感谢您的帮助。这也是XML解析的一个很好的资源,更重要的是,它甚至包含一个工作示例:谢谢。虽然你的回答对我也有帮助,但我不得不选择一个。
    obj.downloadXml("http://www.engadget.com/", "rss");
    
    URL url = new URL("http://www.engadget.com");
    InputStream is = url.openStream();
    int ptr = 0;
    StringBuffer buffer = new StringBuffer();
    while ((ptr = is.read()) != -1) {
      buffer.append((char)ptr);
    }
    String html = buffer.toString();
    Pattern rsspatt = Pattern.compile("<link[^>]*rss[^>]*>");
    Matcher m = rsspatt.matcher(html);
    String link = "";
    if (m.find()) {
      String rsslink = m.group();
      Pattern xmllinkpatt = Pattern.compile("href=\"([^\"]+)\"");
      Matcher m2 = xmllinkpatt.matcher(rsslink);
      m2.find();
      link = m2.group(1);
    }