`
pengjj2
  • 浏览: 138441 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

java读取rss源,jquery显示新闻

 
阅读更多

因为jquery的ajax有跨域问题,使用java来读取rss源,用jquery解析返回回来的xml文件并显示

1、html代码,tab页面样式

 <div class="adlike dcsbox">
      <div class="h">
        <h3>&nbsp;</h3>
        <a class="dcsbox-h-more" href="/templates/index.jsp" target="_blank">更多</a>
        <ul class="poptab" id="poptab1"></ul>
      </div>
      <div class="b" id="poptab1-c"></div>
      <div class="f"><b></b></div>
    </div>

2、jquery代码

<script type="text/javascript">
//tab插件
(function($){
  $.poptab=function(tabs,targets,num){
   var curtab=$('poptab'),curtarget=curtab,
   add=function(k,v,n){
    if(!k) return false
    k.each(function(i,o){
     $(o).mouseover(function(){
      curtab.removeClass("cur");
      curtab=$(o).addClass("cur");
      curtarget.hide();
      curtarget=v.eq(i).show();
      });
      if(n===i){
       $(o).mouseover();
       }
     });
   return add;
    };
  if(tabs){
   if(tabs.size()==0) return add;
   add(tabs,targets,num);
   if(num===undefined){
     tabs.eq(0).mouseover();
    }
   };
  return add;
   }
})(jQuery);
//jQuery.poptab(jQuery("#poptab1>li"),jQuery("#poptab1-c>div"),2)
(function($){
 var poptab=$.poptab($("#poptab1>li"),$("#poptab1-c>div"));
 //var poptab=$.poptab(),
 hasTumb=function(o){
  if(o.getElementsByTagName("description").length>0){
   return o.getElementsByTagName("description")[0].firstChild.data.match(/<img\s.*?src=.*?>/i);
   }
  },
 markrss=function(title,src,num){
      var tt,url="/static/downloadService?action=rssDown";
   if(src.indexOf("http://")<0) url=src;
   if(this instanceof $){
    tt=this;
    }else{
     tt=$("<li><span></span>"+title+"</li>").appendTo("#poptab1");
     };
   $.ajax({
   url:url,
   type:"POST",
   data:{url:src},
   dataType:"xml",
   success:function(m){
    var pho=null,//图片新闻
    photitle="",
    pholink="",
    head="",//标题新闻
    list=[],//新闻列表
    items=m.getElementsByTagName("item");
    for(var i=0,len=items.length;i<len;i++){
     if(pho==null){
      pho=hasTumb(items[i]);
      photitle=items[i].getElementsByTagName("title")[0].firstChild.data;
      pholink=items[i].getElementsByTagName("link")[0].firstChild.data;
      if(pho!=null){
       pho=unescape(pho.toString()).replace("http://t1.baidu.com/it/u=","").replace("&fm=30","");
       pho=pho.replace('src="images/','src="/templates/images/');
       continue;
       }
      };
     if(head==""){
      head='<a href="'+items[i].getElementsByTagName("link")[0].firstChild.data+'" class="p-news-head" target="_blank">'+items[i].getElementsByTagName("title")[0].firstChild.data+'</a>';
      continue;
      };
     if(list.length<5){
      list.push('<li><a href="'+items[i].getElementsByTagName("link")[0].firstChild.data+'" target="_blank">'+items[i].getElementsByTagName("title")[0].firstChild.data+'</a></li>');
      }
     };
     tt.find("span").remove();
        poptab(tt,
     $('<div class="p-news" style="display:none">\
          <div class="p-news-pho">\
            <a class="p-news-pho-img" href="'+pholink+'" target="_blank">'+pho+'</a>\
            <a href="'+pholink+'" target="_blank"><span>'+photitle+'</span></a>\
          </div>\
          <div class="p-news-list">\
            '+head+'\
            <ul>\
              '+list.join("")+'\
            </ul>\
          </div>\
        </div>').appendTo("#poptab1-c").find("img").bind("load",function(){
   var w=this.width,h=this.height,_w=145,_h=131;
   if(w==0){
    var t=this,f=arguments.callee,
    fixIE=function(){
     tt.unbind("mouseover",fixIE)
     f.apply(t);
     };
    tt.bind("mouseover",fixIE);
    return false;
    }
   if(w/h>_w/_h){
    this.style.height=_h+"px";
    this.style.width=_h*w/h+"px";
    this.style.marginLeft="-"+(_h*w/h-_w)/2+"px";
    }else{
     this.style.width=_w+"px";
     this.style.height=_w*h/w+"px";
     this.style.marginTop="-"+(_w*h/w-_h)/2+"px";
     };
   }).end(),num);
    },
   error:function(){
    tt.find("span").remove();
    $("<a href='#'>刷新</a>").click(function(){
     markrss.apply(tt,[title,src,num]);
     $(this).remove();
     tt.prepend("<span/>");
     return false;
     }).appendTo(tt);
    }
   });
  };
 //rss来源:http://www.baidu.com/search/rss.html#02
 //markrss("新闻","/templates/cnrss.xml",0);//公司
 markrss("公告","/templates/ggrss.xml",0);//公告
 //markrss("行业","/templates/hyrss.xml");//行业
 
 markrss("热点","http://news.baidu.com/n?cmd=1&class=civilnews&tn=rss");
 markrss("国际","http://news.baidu.com/n?cmd=1&class=internews&tn=rss");
 markrss("财经","http://news.baidu.com/n?cmd=1&class=finannews&tn=rss");
 markrss("社会","http://news.baidu.com/n?cmd=1&class=socianews&tn=rss");
})(jQuery);
</script>

这里用的是百度的源

3、servlet读取源信息

response.setContentType("text/xml;charset=utf-8");
             System.out.println("rss");
             String url = request.getParameter("url");
             System.out.println(url);
             StringBuffer content = new StringBuffer();
             String line = "";
             String xml = "";
             Element el = null;
             //先从缓存中获取
             Cache rssCache = MyEcache.getCache("rsscache");
          el = rssCache.get(url);
          if(el!=null)
          {
           xml = (String) el.getObjectValue();
           if(xml!=null && !"".equals(xml) && !xml.contains("访问出错"))
           {
            response.getWriter().print(xml);
                  response.getWriter().flush();
                  response.getWriter().close();
                  return;
           }
          }
             URL ser = new URL(url);
             HttpURLConnection con = (HttpURLConnection) ser.openConnection();
             //con.connect();
             InputStream in = con.getInputStream();
             BufferedReader br = new BufferedReader(new InputStreamReader(in,"gb2312"));
             while((line=br.readLine())!=null)
             {
              content.append(line);
             }
             in.close();
             con.disconnect();
             xml = content.toString();
             //byte[] b = cc.getBytes("UTF-8");
             //String xml = new String(b, 0, b.length, "UTF-8");
//             Document doc = DocumentHelper.parseText(xml);
//             System.out.println("(2)"+xml);
             xml = xml.replace("gb2312", "UTF-8");
             el = new Element(url, xml);
                rssCache.putQuiet(el);
             response.getWriter().print(xml);
             response.getWriter().flush();
             response.getWriter().close();

注:百度的rss源会判断你是否机器读取,如果你不停的链接它的话,会屏蔽你哦,使用采用ehcache做个缓存,5分钟,或者半个小时读取一次,就可以解决这个问题

分享到:
评论

相关推荐

    JAVA上百实例源码以及开源项目源代码

    Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java存储与读取对象 1个目标文件 如题 Java调色板面板源代码 1个目标文件 摘要:Java源码,窗体界面,调色板 使用Java语言编写的一款...

    SWATO

    例如,index.html通常是网站的主页,crud.html可能涉及CRUD(创建、读取、更新、删除)操作的演示,jst_demo.html可能包含JavaScript或jQuery的示例,而rss_reader.html可能是RSS订阅功能的实现。auto_suggest.html...

    课程设计说明文档1

    对于Spring MVC框架,需要配置DispatcherServlet、ApplicationContext以及相关的XML或Java配置文件来定义服务和数据源。此外,C#项目中可能还需要配置.NET Framework、数据库连接字符串等。 相关路径的设定则关系到...

    培训资料_ajax技术

    Web2.0的出现改变了互联网应用的格局,它强调用户参与和交互,如博客、RSS、Wiki、SNS等。Ajax是Web2.0的重要技术之一,它允许在不打断用户交互的情况下与服务器交换数据并局部更新页面。这显著提升了网页的响应...

    primefaces

    - **FeedReader**:RSS/Atom源读取器组件。 - **Fieldset**:用于组织表单字段的容器组件。 - **FileDownload**:文件下载组件,允许用户下载文件。 - **FileUpload**:文件上传组件,支持多文件上传。 - **Focus**...

    XML编程从入门到精通

    - **文档存储**:如DocBook用于技术文档,RSS用于新闻订阅。 - **数据存储**:数据库如MongoDB支持XML存储,便于数据交换。 - **软件集成**:通过XML描述接口,实现不同系统间的集成。 5. **XML验证** - **DTD*...

Global site tag (gtag.js) - Google Analytics