大佬教程收集整理的这篇文章主要介绍了Android:如何在网站包含时下载RSS:link rel =“alternate”type =“application / rss xml”,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
link rel =“alternate”type =“application / RSS xml”
例如,http://www.engaget.com源包含:
<link rel="alternate" type="application/RSS+xml" title="Engadget" href="http://www.engadget.com/RSS.xml">
我假设如果我将此站点作为RSS应用程序打开,它将重定向到http://www.engadget.com/rss.xml页面.
我下载xml的代码如下:
private Boolean downloadXml(String url,String fileName) { try { URL urlxml = new URL(url); URLConnection ucon = urlxml.openConnection(); ucon.setConnectTimeout(4000); ucon.setReadTimeout(4000); InputStream is = ucon.geTinputStream(); BufferedInputStream bis = new BufferedInputStream(is,128); FiLeoutputStream fOut = openFiLeoutput(filename + ".xml",Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE); OutputStreamWriter osw = new OutputStreamWriter(fOut); int current = 0; while ((current = bis.read()) != -1) { osw.write((bytE) current); } osw.flush(); osw.close(); } catch (Exception E) { return false; } return true; }
在我不知道’http://www.engadget.com/RSS.xml’url的情况下,当我输入’http://www.engadget.com’时如何下载RSS?
>检测URL是否指向HTML文件.请参阅下面的代码中的isHtml方法.
>如果URL指向HTML文件,请从中提取RSS URl.请参阅下面的代码中的extractRSSUrl方法.
以下代码是您在问题中粘贴的代码的修改版本.对于I / O,我使用Apache Commons IO作为有用的IoUtils和FileUtils类. IoUtils.toString用于将输入流转换为字符串,如文章“In Java,how do I read/convert an InputStream to a String?”中所建议的那样
extractRSSUrl使用正则表达式来解析HTML,即使它非常不受欢迎. (参见“RegEx match open tags except XHTML self-contained tags”中的咆哮.)考虑到这一点,让extractRSSUrl成为一个起点. extractRSSUrl中的正则表达式是基本的,并未涵盖所有情况.
请注意,对isRSS(str)的调用已被注释掉.如果要进行RSS检测,请参阅“How to detect if a page is an RSS or ATOM feed”.
private Boolean downloadXml(String url,String fileName) { InputStream is = null; try { URL urlxml = new URL(url); URLConnection ucon = urlxml.openConnection(); ucon.setConnectTimeout(4000); ucon.setReadTimeout(4000); is = ucon.geTinputStream(); String str = IoUtils.toString(is,"UTF-8"); if (isHtml(str)) { String RSSURL = extractRSSUrl(str); if (RSSURL != null && !url.equals(RSSURL)) { return downloadXml(RSSURL,filename + ".xml"); } } else { // if (isRSS(str)) { // For Now,we'll assume that we're an RSS Feed at this point FileUtils.write(new File(fileName),str); return true; } } catch (Exception E) { // do nothing } finally { IoUtils.closeQuietly(is); } return false; } private Boolean isHtml(String str) { Pattern pattern = Pattern.compile("<html",Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE); Matcher matcher = pattern.matcher(str); return matcher.find(); } private String extractRSSUrl(String str) { Pattern pattern = Pattern.compile("<link(?:\\s+href=\"([^\"]*)\"|\\s+[a-z\\-]+=\"[^\"]*\")*\\s+type=\"application/RSS\\+(?:xml|atom)\"(?:\\s+href=\"([^\"]*)\"|\\s+[a-z\\-]+=\"[^\"]*\")*?\\s*/?>",Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE); Matcher matcher = pattern.matcher(str); if (matcher.find()) { for (int i = 1; i <= matcher.groupCount(); i++) { if (matcher.group(i) != null) { return matcher.group(i); } } } return null; }
obj.downloadXml("http://www.engadget.com/","RSS");
以上是大佬教程为你收集整理的Android:如何在网站包含时下载RSS:link rel =“alternate”type =“application / rss xml”全部内容,希望文章能够帮你解决Android:如何在网站包含时下载RSS:link rel =“alternate”type =“application / rss xml”所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。