over 3 years ago

用中央氣象局的rss

我想取得rss > channel > item > link 的內容

src/RSSReader.java
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

public class RSSReader {

    /**
     * @param args
     * @throws IOException 
     * @throws SAXException 
     * @throws ParserConfigurationException 
     */
    public static void main(String[] args) throws Exception {
        String url = "http://www.cwb.gov.tw/rss/forecast/36_04.xml";
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.parse(url);
        NodeList items = doc.getElementsByTagName("item");
        
        // 走訪所有節點

        for(int i=0;i<items.getLength();i++)
        {
            Element item = (Element)items.item(i);
            // 取得網址

            System.out.println(item.getElementsByTagName("link").item(0).getFirstChild().getNodeValue());
        }
    }
}
結果:
http://www.cwb.gov.tw/rss/index.php?area=04&period=20141230_2
http://www.cwb.gov.tw/rss/index.php?area=04&period=20141230_2

如果遇到這種的,然後要取得url屬性

<enclosure url="http://luckily.github.io/images/my_car/Audi-R8-GT_1280x1024.jpeg" />

可以這樣寫

src/RSSReader.java
    item.getElementsByTagName("link").item(0).getFirstChild().getNodeValue();
    換成
    item.getElementsByTagName("enclosure").item(0).getAttributes().getNamedItem("url").getNodeValue();

如果爬到圖片網址想到抓回來的話,看看這段

src/RSSReader.java
    URL url = new URL("http://luckily.github.io/images/my_car/Audi-R8-GT_1280x1024.jpeg");
    InputStream inputStream = new BufferedInputStream(url.openStream());
    BufferedImage bufferedImage = ImageIO.read(inputStream);
    ImageIO.write(bufferedImage, "jpg", new FileOutputStream("images/car.jpg"));

但現在有jsoup可以使用,使用概念跟jquery很像,更好上手
參考 【JAVA】使用JSOUP讓JAVA取得網頁上的文字(文末提供範例下載)

有機會我在來分享jsoup的使用情形囉XDD

← Yii filter、beforeAction、beforeRender、afterAction、afterRender執行順序 Yii controller action 跟 view path 之間的關係 →