Java
Android

WebページからRSSのURLを取得する。

More than 5 years have passed since last update.

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;
}