LoginSignup
24
25

More than 5 years have passed since last update.

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

Last updated at Posted at 2013-02-17

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;
    }
24
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
25