0

I tried making a parser for both RSS and Atom where RSS feed shows the headlines while Atom shows with images and description plus link. It seems my parser works only for RSS. Can you tell me why? Check this one:

public void Get_Parse_Feed(String URL_link, Input_Streamer_Class is, List<String> headlines, List<String> links)
{
    try
    {
        // URL
        is = new Input_Streamer_Class();

        /*
         * 
         *             Reserved URLS:
         *             --> http://feeds.pcworld.com/pcworld/latestnews
         *             --> http://feeds2.feedburner.com/boy-kuripot
         *             --> http://feeds2.feedburner.com/phcreditcardpromos
         *             --> http://feeds.feedburner.com/blogspot/MKuf
         *             --> http://googleblog.blogspot.com/atom.xml
         * 
         */

        is.Set_URL(URL_link);

        // Set XML pull factory.
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        factory.setNamespaceAware(false);
        XmlPullParser xpp = factory.newPullParser();

        // Picking up input stream...
        xpp.setInput(is.Get_Input_Stream(is.Get_URL()), "UTF_8");

        // Check for inside item.
        boolean insideItem = false;

        // Pick event type. (START_TAG, END_TAG, etc.)
        int eventType = xpp.getEventType();
        while(eventType != XmlPullParser.END_DOCUMENT)
        {
            if(eventType == XmlPullParser.START_TAG)
            {
                if(xpp.getName().equalsIgnoreCase("item"))
                {
                    insideItem = true;

                } else if(xpp.getName().equalsIgnoreCase("title")) {

                    if(insideItem)
                    {
                        headlines.add(xpp.nextText()); // --> Extract the headline.
                    }

                } else if(xpp.getName().equalsIgnoreCase("link")) {

                    if(insideItem)
                    {
                        links.add(xpp.nextText()); // --> Extract the link of article.
                    }

                }

            } else if((eventType == XmlPullParser.END_TAG) && xpp.getName().equalsIgnoreCase("item")) {

                insideItem = false;

            }

            eventType = xpp.next(); // --> Move to the next element.
        }

    } catch(MalformedURLException e) {

        e.printStackTrace();

    } catch(XmlPullParserException e) {

        e.printStackTrace();

    } catch(IOException e) {

        e.printStackTrace();

    }
}

Every time when I found this tutorial plus managing with MVC for myself, the results is impressive. However, when I try implementing a URL contains Atom feed and it didn't show up.

Dan Lowe
  • 51,713
  • 20
  • 123
  • 112
David Dimalanta
  • 548
  • 6
  • 19

1 Answers1

1

Its obvious the structure is different, you need 2 different parsers! Or 2 packed in one (don't really know how helpful will be that)

Because:

RSS 2.0:

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
        <channel>

                <title>Example Feed</title>
                <description>Insert witty or insightful remark here</description>
                <link>http://example.org/</link>
                <lastBuildDate>Sat, 13 Dec 2003 18:30:02 GMT</lastBuildDate>
                <managingEditor>johndoe@example.com (John Doe)</managingEditor>

                <item>
                        <title>Atom-Powered Robots Run Amok</title>
                        <link>http://example.org/2003/12/13/atom03</link>
                        <guid isPermaLink="false">urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</guid>
                        <pubDate>Sat, 13 Dec 2003 18:30:02 GMT</pubDate>
                        <description>Some text.</description>
                </item>

        </channel>
</rss>

Atom 1.0:

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

        <title>Example Feed</title>
        <subtitle>Insert witty or insightful remark here</subtitle>
        <link href="http://example.org/"/>
        <updated>2003-12-13T18:30:02Z</updated>
        <author>
                <name>John Doe</name>
                <email>johndoe@example.com</email>
        </author>
        <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id>

        <entry>
                <title>Atom-Powered Robots Run Amok</title>
                <link href="http://example.org/2003/12/13/atom03"/>
                <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
                <updated>2003-12-13T18:30:02Z</updated>
                <summary>Some text.</summary>
        </entry>

</feed>

Comparison here, the difference problem in your code is that on atom you have entry not item as in rss!

madlymad
  • 6,367
  • 6
  • 37
  • 68
  • But, these two codes are used in HTML websites contained feeds: RSS or Atom. – David Dimalanta Feb 22 '13 at 13:40
  • And, If I'm wrong on the first comment on your answer, where do you put these? In the **layout** folder under **res** folder? How to connect or how does it work? – David Dimalanta Feb 22 '13 at 13:42
  • Hmm...I see. I'll try and find out. – David Dimalanta Feb 22 '13 at 13:57
  • you can change line `if(xpp.getName().equalsIgnoreCase("item"))` to `if(xpp.getName().equalsIgnoreCase("item") || xpp.getName().equalsIgnoreCase("entry"))` but if you want to parse more elements it will be better to think a more sophisticated and safe way to do that. – madlymad Feb 22 '13 at 14:00
  • I'm using this URL that contains an Atom feed, `http://googleblog.blogspot.com/atom.xml`, and it still not showing up. Did I get the right URL that contains an Atom feed? – David Dimalanta Feb 23 '13 at 07:16
  • check the error log... the url does not seem to me like atom feed... its html and redirects to http://feeds.feedburner.com/blogspot/MKuf but if you get through code `View Feed XML` where http://feeds.feedburner.com/blogspot/MKuf?format=xml actually return XML look like atom feed! – madlymad Feb 23 '13 at 15:11