Thứ Sáu, 24 tháng 3, 2006

RSS Parser

Một thư viện nhỏ được cài đặt với nhiệm vụ parse xml (ở mức đơn giản) cho phép parse các tài liệu RSS hoặc Atom.

10 nhận xét:

  1. Ví dụ đơn giản:

        try{
          String address  =
          "http://today.java.net/pub/q/news_rss?x-ver=1.0"; // RSS 1.0
          //"http://nhuthuan.blogspot.com/atom.xml" ;//Atom 0.3
          //"http://www.javavietnam.org/javavn/mvnforum/atom?sort=ThreadLastPostDate&order=DESC"; //Atom 0.3
          //"http://www.javavietnam.org/javavn/mvnforum/rss2?sort=ThreadLastPostDate&order=DESC"; // RSS 2.0
          //"http://www.javavietnam.org/javavn/mvnforum/rss?sort=ThreadLastPostDate&order=DESC"; // RSS 0.91
          //"http://www.snellspace.com/wp/wp-atom1.php";//Atom 1.0
          URL url = new URL(address);
          RSSParser parser  = new RSSParser();
          RSSDocument document = parser.createDocument(url.openStream(), "utf-8");
          //get channel
          RSSChannel channel = document.getChannel();
          if(channel != null) {
            System.out.println("Title: "+channel.getTitle());
            System.out.println("Generator: "+channel.getGenerator());
            System.out.println("Link: "+channel.getLink());
            XMLNode node = channel.getItem("image");
            if(node != null)
              System.out.println("Image :"+node.getChild(1).getChild(0).getTextContent().trim());
          }
          System.out.println("****************************************************");
          List<RSSItem> items = document.getItems();
          for(RSSItem ele : items ){
            System.out.println("Title: "+ele.getTitle());
            System.out.println("Link: "+ele.getLink());
            System.out.println("Description: "+ele.getDesc());
            System.out.println("-----------------------------------------------");
          }
        }catch(Exception exp){
          exp.printStackTrace();

    Trả lờiXóa
  2. kết quả :

    Title: java.net News
    Generator:
    Link: http://today.java.net/today/news
    ****************************************************
    Title: EXteded Java Compiler (EXJC) Initial Release
    Link: http://today.java.net/pub/n/4154
    Description: The <a href="https://exjc.dev.java.net/">EXtended Java Compiler (EXJC)</a> project has announced their <a href="https://exjc.dev.java.net/servlets/NewsItemView?newsItemID=3480">initial release</a>. They write in, "EXJC is a tool that integrates javac as well as lint tools to create a compiler that is very configurable by developers."
    -----------------------------------------------
    Title: JOnAS 4.7.1 RC
    Link: http://today.java.net/pub/n/4155
    Description: The <a href="http://www.objectweb.org">ObjectWeb Consortium</a> have announced the release of version <a href="http://www.objectweb.org/phorum/read.php?f=29&i=10657&t=10657">4.7.1 RC</a> of <a href="http://jonas.objectweb.org/">JOnAS</a>. "JOnAS 4.7 provides new features mainly for cluster and management."
    -----------------------------------------------
    Title: jNetStream 0.2.3.2
    Link: http://today.java.net/pub/n/4156
    Description: The <a href="http://jnetstream.sf.net">jNetStream</a> project, a sniffer and a protocol analyzer, has released <a href="http://freshmeat.net/projects/jnetstream/?branch_id=58450&release_id=223112">version 0.2.3.2</a>. "Filtering on the command line did not work for MAC addresses, and hexdump field returned an Address object instead of byte[]. These have been fixed. This release adds NPL definitions for IEEE 802.1QinQ, the RTP protocol, and the SIP protocol. It has a visual NPL debugger."
    -----------------------------------------------

    Trả lờiXóa
  3. bản Release hiện hành có tính chất thử nghiệm cài đặt.

    Trả lờiXóa
  4. anh Thuận!
    em dùng thư viện của anh và có modify lại cái ví dụ mẫu trong đó, biên dịch thành công nhưng chạy nó báo lỗi như sau:
    java.lang.IndexOutOfBoundsException: Path have incorrect index
    at org.vietspider.parser.common.NodeHandler.findNodeByPath(NodeHandler.java:53)
    at org.vietspider.parser.html.HTMLDocument.getNode(HTMLDocument.java:29)
    at com.softech.news.TestHTMLParser.main(TestHTMLParser.java:34)

    anh fix cho em với
    em, tinhtinh!

    Trả lờiXóa
  5. à quên, em sửa lại file TestHTMLParser.java như sau:
    URL url=null;
    try{
    url=new URL("http://www2.thanhnien.com.vn/news/default.aspx?");
    }catch(Exception ex){
    }
    HTMLParser parser = new HTMLParser();
    HTMLDocument document = parser.createDocument(url.openStream(), "utf-8");
    HTMLNode htmlContent = document.getNode("0.1.0.0.2.0.0.0.0.1.0.1.0.0.0.0") ;
    System.out.println(htmlContent.getTextContent());

    Trả lờiXóa
  6. bạn đã truy xuất sai cấu trúc tài liệu html, cụ thể là tại vị trí 0.1.0.0.2 trả về một single node, hoàn toàn không có node con trong nó nên nếu truy xuất path index bằng 0.1.0.0.2.0.0.0.0.1.0.1.0.0.0.0 thì sẽ bị sai path, lỗi IndexOutOfBound. Bạn phải truy xuất đúng cấu trúc thì mới chạy. Ví dụ, chẳng hạn tôi muốn lấy ra tên tổng biên tập báo, tôi sẽ truy xuất path = 0.1.0.0.18.0.0.0.0.0.2.0.0.4.3.0.0

    code như sau :

    HTMLNode htmlContent = document.getNode("0.1.0.0.18.0.0.0.0.0.2.0.0.4.3.0.0") ;
    System.out.println(htmlContent.getTextContent());

    khi đó sẽ in ra table chứa tên tổng biên tập báo. Nhớ là truy xuất đúng cấu trúc tài liệu.

    Trả lờiXóa
  7. cảm ơn doibuon.
    nhưng cho tôi hỏi thêm là phải chăng cấu trúc trong ứng dụng VietSpider không sử dụng được trong thư viện này?
    Bởi vì tôi sử dụng tool trong VietSpider để lấy cấu trúc rồi sau đó truyền cấu trúc này vào ví dụ mẫu trong thư viện, nhưng nó vẫn báo lỗi java.lang.IndexOutOfBoundsException: Path have incorrect index.
    Tôi đã thử rất nhiều trang (thanhnien.com.vn, tuoitre.com.vn...) nhưng đều báo lỗi
    Đây là ví dụ bị lỗi: (dù là trong VietSpider vẫn duyệt và chọn vùng được)
    try{
    url=new URL("http://www.tuoitre.com.vn/Tianyon/Index.aspx?ChannelID=3");
    }catch(Exception ex){
    }
    HTMLParser parser = new HTMLParser();
    HTMLDocument document = parser.createDocument(url.openStream(), "utf-8");
    HTMLNode htmlContent = document.getNode("0.1.2.1.2.0") ;
    System.out.println(htmlContent.getTextContent());
    doibuon có thể giải thích cho thỏa đáng được không?

    Trả lờiXóa
  8. bộ thư viện trên sourceforge là bộ thư viện mới nhất của parser được sử dụng trong VietSpider 3.0. Phiên bản VietSpider bạn có được trên net là phiên bản 2.0. Do đó khi parse bằng tool của VietSpider 2.0 rồi test thử với htmlparser mới này sẽ báo lỗi . Cụ thể htmlparser này đã nâng cấp và sửa đổi nhiều so với phiên bản cũ. do vậy chúng không thể hoàn toàn tương thích với nhau được. Tôi đang cố gắng release bản build mới nhất của vietspider 3 vào cuối tuần này, như vậy thì sẽ có tool để sinh ra path id cho việc truy xuất tài liệu html.

    Trả lờiXóa
  9. giải thích rất thỏa đáng, hix
    doibuon làm việc quá cật lực hè!!!!!!!!!
    mong là phiên bản 3.0 của VietSpider sớm release
    hic

    Trả lờiXóa

nhudinhthuan@gmail.com