javaxmlrssrome

get image url of rss with rome library


I having a rss file in following :

<?xml version="1.0" encoding="UTF-8" ?>
  <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
   <channel>
     <title> سایپا نیوز </title>
     <link>http://www.saipanews.com/</link>
     <description></description>
     <language>fa</language>

       <item>
        <author></author>
        <pretitle></pretitle>
        <title>پیام تبریک دکتر جمالی به مناسبت فرارسیدن سالروز ولادت حضرت علی(ع) و روز پدر</title>
        <link>http://www.saipanews.com/view-6751.html</link>
        <pubdate>2016-04-20 10:58:00</pubdate>
        <description>سایپا نیوز: مدیرعامل گروه خودروسازی سایپا همزمان با فرارسیدن سالروز میلاد باسعادت حضرت علی(ع) و روز پدر، طی پیامی به تمامی پدران متعهد و پرتلاش ایران زمین تبریک گفت.</description>
        <secid>0</secid>
        <typid>8</typid>
        <image>http://www.saipanews.com/media/image/jamali/jmali.JPG</image>
    </item>

    <item>
        <author></author>
        <pretitle></pretitle>
        <title>فرهنگ رانندگی بین خطوط در معابر شهری در حال گسترش است </title>
        <link>http://www.saipanews.com/view-6748.html</link>
        <pubdate>2016-04-19 11:27:00</pubdate>
        <description>سایپا نیوز: به گزارش سایپا نیوز و به نقل از فرارو، از آنجایی که فرهنگ رانندگی مجموعه ای از رفتارهای درست رانندگی و آداب زندگی اجتماعی بهنگام تردد در شهرها و جاده ها است، رانندگی در بین خطوط معابر شهری یکی از نمادهای فرهنگ رانندگی در کشورهای درحال توسعه و توسعه یافته می باشد.</description>
        <secid>0</secid>
        <typid>8</typid>
        <image>http://www.saipanews.com/media/image/farhang%20ranandegi/252887_331.jpg</image>

    </item>
  </channel>
 </rss>

I want to get image's urls.
I use Rome library but not found any solution.
how to get image's url in item with Rome library ?


Solution

  • I for that get image tag , build new rss parser on the following:

    public class NewRssParser extends RSS094Parser implements WireFeedParser {
    
    public NewRssParser() {
        this("rss_2.0");
    }
    
    protected NewRssParser(String type) {
        super(type);
    }
    
    protected String getRSSVersion() {
        return "2.0";
    }
    
    protected boolean isHourFormat24(Element rssRoot) {
        return false;
    }
    
    protected Description parseItemDescription(Element rssRoot, Element eDesc) {
        Description desc = super.parseItemDescription(rssRoot, eDesc);
        desc.setType("text/html"); // change as per
                                    // https://rome.dev.java.net/issues/show_bug.cgi?id=26
        return desc;
    }
    
    public boolean isMyType(Document document) {
        boolean ok;
        Element rssRoot = document.getRootElement();
        ok = rssRoot.getName().equals("rss");
        if (ok) {
            ok = false;
            Attribute version = rssRoot.getAttribute("version");
            if (version != null) {
                // At this point, as far ROME is concerned RSS 2.0, 2.00 and
                // 2.0.X are all the same, so let's use startsWith for leniency.
                ok = version.getValue().startsWith(getRSSVersion());
            }
        }
        return ok;
    }
    
    @Override
    public Item parseItem(Element arg0, Element arg1) {
        Item item = super.parseItem(arg0, arg1);
    
        Element imageElement = arg1.getChild("image", getRSSNamespace());
        if (imageElement != null) {
            String imageUrl = imageElement.getText();
    
            Element urlElement = imageElement.getChild("url");
            imageUrl = urlElement != null ? urlElement.getText() : imageUrl;
    
            Enclosure enc = new Enclosure();
            enc.setType("image");
            enc.setUrl(imageUrl);
    
            item.getEnclosures().add(enc);
        }
    
        return item;
    }
    
    }
    

    in the class override parseItem method and add code for get image element and add image's url to Enclosures.

    then add following line to rome.properties file :

    WireFeedParser.classes=[packge name].NewRssParser

    Example :

    WireFeedParser.classes=ir.armansoft.newscommunity.newsgathering.parser.impl.NewRssParser