headタグ内に以下のタグが存在していれば、RSSフィードがあるってことになるので、
Webページをパースすれば検出可能。
rssfeed.html
<link rel="alternate" type="application/rss+xml" title="RSSのタイトル" href="RSSフィードのIRL">
以下、適当に作ったパース処理とか。
Android用にTagSoupを使用しているので、そのままではたぶん動きません。
ちなみに、RSSのフィードは複数ある可能性があるので、リストで取得しています。
実際に使用する際は、バックグラウンドで行うことを推奨。
FeedEntity.java
public class FeedEntity {
public String Title;
public String feedUrl;
}
GetFeedUrlService.java
//コンストラクタとかは省略。
/**
* 指定されたURLのフィードを取得する。
* @param url
* @return
*/
public ArrayList<FeedEntity> GetFeedUrl(String feedUrl){
ArrayList<FeedEntity> feedList = new ArrayList<FeedEntity>();
try {
//指定されたURLに接続する。
URL url = new URL(feedUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(10 * 000); //10秒でタイムアウトにしておく
InputStream ul = connection.getInputStream();
//接続したサイトのソースを取得し、パースする。
InputSource source = new InputSource(new InputStreamReader(ul,"utf-8"));
Transformer transformer = TransformerFactory.newInstance().newTransformer();
DOMResult result = new DOMResult();
XMLReader reader = new Parser();
transformer.transform(new SAXSource(reader, source), result);
//linkタグを取得する。
Document doc = (Document) result.getNode();
NodeList childs = doc.getElementsByTagName("link");
for (int i = 0; i < childs.getLength(); i++) {
Element element = (Element) childs.item(i);
String rel = element.getAttribute("rel");
String type = element.getAttribute("type");
if("alternate".equals(rel) &&
"application/rss+xml".equals(type)){
FeedEntity entity = new FeedEntity();
entity.Title = element.getAttribute("title");
entity.feedUrl = element.getAttribute("href");
feedList.add(entity);
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (TransformerFactoryConfigurationError e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
return feedList;
}