免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 剑心通明

如何在自己的网页上调用各大网站的新闻? [复制链接]

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
发表于 2006-10-16 13:51 |显示全部楼层
要么:源网站提供了调用代码

要么:自己用程序抓取分析,不过小剑你要会一些编程,否则找相好或者外包。

论坛徽章:
2
丑牛
日期:2013-09-29 09:47:222015七夕节徽章
日期:2015-08-21 11:06:17
发表于 2006-10-16 14:47 |显示全部楼层
原帖由 HonestQiao 于 2006-10-16 13:51 发表
要么:源网站提供了调用代码

要么:自己用程序抓取分析,不过小剑你要会一些编程,否则找相好或者外包。

找你行不?:wink:

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
发表于 2006-10-16 15:18 |显示全部楼层

  1. <?php

  2. // --------------------------------------------------------------------------
  3. // File name   : 文件名称.php
  4. // Description : 文件说明
  5. // Requirement : PHP4 (http://www.php.net)
  6. //
  7. // Copyright(C), HonestQiao, 2006, All Rights Reserved.
  8. //
  9. // Author: HonestQiao (honestqiao@hotmail.com)
  10. //
  11. // --------------------------------------------------------------------------
  12. $strHTML = file_get_contents("http://www.sohu.com/");
  13. mb_convert_encoding($strHTML,'UTF-8','auto,GBK');
  14. $strNEWS = preg_replace('/^.*?<!-- Content -->(.+?)<!-- End:Content -->.*?$/s', '$1', $strHTML);
  15. echo($strNEWS);
  16. ?>
复制代码


An simple test.

论坛徽章:
0
发表于 2006-10-16 23:53 |显示全部楼层
10楼提供的下载,源文件有一处笔误,使程序不能正确运行(IE6 sp1)。

源代码笔误处:
//白菜修改核心算法End
-->
</script>


注释符号“-->”前加://,即可。

论坛徽章:
2
丑牛
日期:2013-09-29 09:47:222015七夕节徽章
日期:2015-08-21 11:06:17
发表于 2006-10-17 09:49 |显示全部楼层
我只想要新闻,复制了<a href="javascript:loadrss('http://rss.xinhuanet.com/rss/it.xml');">新&nbsp;华&nbsp;网&nbsp;&nbsp;</a><br />,前面的javascript都复制了,怎么不能显示新华网的新闻?

论坛徽章:
0
发表于 2006-10-17 10:45 |显示全部楼层
是不是节点ID的引用不对?
比如:
节点:
<DIV id=subtree8 style="DISPLAY: none">
    <IMG src="images/line_05.gif" align=left>  <a href="javascript:loadrss('http://rss.xinhuanet.com/rss/native.xml');">新&nbsp;华&nbsp;网&nbsp;&nbsp;</a><br />

脚本引用:

function showdiv(num)
{
  var imagename
  var name
  var total
  if (document.all("subtree"+num).style.display=="none" )
  {       
        document.all.item("subtree"+num).style.display=""


要注意“白菜”原来的代码中各节点的ID,以及这些ID在脚本中的引用。

论坛徽章:
0
发表于 2006-10-19 08:43 |显示全部楼层

我把原来代码中,无关紧要的部分已经注释了。

声明:下面的所做的修改只是为了与“剑心通明”共同学习这个程序,并无修改原文代码的意思。

我把原来代码中,无关核心的部分做了注释。这样,看代码就容易了。如下:
=================================================
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>白菜世纪-RSS无刷新聚合器(1221修正)</title>

<script language="JavaScript" type="text/javascript">
<!--
//加载变灰
function listen(a){
// document.getElementById('prolist').className=a;
}
function btnSty(objId,objStyle)
{
// document.getElementById(objId).style.display = objStyle;
}
//提示窗口控制
function ifodis(){
// btnSty('loadifo','none');
}
function settime(a){
// setTimeout(a,1000);
}
function loadtime(){
// loadifo.innerHTML += "."
}
//以上几个函数可以全部删除;


//XML数据绑定
var xmldoc = false;
function loadrss(n){
// listen('mainbg2');
//生成随机数,同时限制刷新次数
  var Num=Math.floor(Math.random()*100);
//定义往址参数
  url = n+"?id="+Num;
//定义为异步传输模式
  xmldoc = false;
//Mozill,Safari等浏览器时需要创建的XMLHttp类
  if(window.XMLHttpRequest){
    xmldoc = new XMLHttpRequest();
    if(xmldoc.overrideMimeType){
        xmldoc.overrideMimeType('text/xml');
    }
  }
//IE浏览器时创建的XMLHttp类
  else if(window.ActiveXObject){
    try{
      xmldoc = new ActiveXObject("Msxml3.XMLHTTP");
    }
    catch(e){
      try{
        xmldoc = new ActiveXObject("Msxml2.XMLHTTP");
      }
      catch(e){
        try{
          xmldoc = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(e){}
      }
    }
  }
//不能创建XMLHTTP类时返回
  if(! xmldoc){
    return false;
  }
//调用CheckState函数
  xmldoc.onreadystatechange = CheckState;   //如果不检查状态,可以不要。
  xmldoc.open('GET',url,true);
  xmldoc.send(null);
}
//状态检测
function CheckState(){

//这个函数检查连接服务器的状态,并在文本中间显示一个状态框

  var response = xmldoc.responseXML.documentElement;
//  btnSty('loadifo','block')
//收到完整的服务器响应
  if(xmldoc.readyState == 1){
   // loadifo.innerHTML = "连接服务器"
    }
  else if(xmldoc.readyState == 2){
   // loadifo.innerHTML = "开始加载数据"
    }
  else if(xmldoc.readyState == 3){
   // loadifo.innerHTML = "正在加载数据"
    settime(loadtime)
    }
  else if(xmldoc.readyState == 4){
//HTTP服务器响应值成功
    if(xmldoc.status == 200){
//将服务器返回的字符串写到页面中ID为showdiv的区域
//loadifo.innerHTML = "加载完成"
//     settime(ifodis);

//调用NUM函数,原文作者写JS代码也喜欢丢分号,这里补上。^O^
    num(response);  //注意:通过调用NUM函数来显示文章列表
    }
    else{
     // loadifo.innerHTML = "错误"+xmldoc.status+"点这里刷新";
    }
  }

}



//记录集总数
function num(b){


  try{
  var titleNode = b.selectNodes("//rss/channel/title");
  var a = b.getElementsByTagName("item").length
// titleV = titleNode(0).firstChild.nodeValue;
// listnum.innerHTML = "共有"+a+"篇文章 来源于:"+titleV;   //以上统计文章篇数

  setlist(a,b);   //调用显示函数。
  }
  catch(e){}
}


//  if (top.location != self.location)top.location=self.location;  //这是不被框架

//节目列表显示
//定义接收指向各个元素的节点信息的变量
var titleNode,linkNode,categoryNameNode,authorNode,pubDateNode,descriptionNode
//定义接收元素值的变量
var titleV,linkV,categoryNameV,authorV,pubDateV,descriptionV
//分类聚合
function setlist(a,b)
{
  var prograNode = b.getElementsByTagName("item");
  var adminlinkNode = b.selectNodes("//rss/channel/link");
  var titleNode = b.selectNodes("//rss/channel/item/title");
  var linkNode = b.selectNodes("//rss/channel/item/link");
  var categoryNode = b.selectNodes("//rss/channel/item/category");
  var authorNode = b.selectNodes("//rss/channel/item/author");
  var pubDateNode = b.selectNodes("//rss/channel/item/pubDate");
  var descriptionNode = b.selectNodes("//rss/channel/item/description");
  var category2sNode = b.selectNodes("//rss/channel/item/dc:subject");
  var author2sNode = b.selectNodes("//rss/channel/item/dc:creator");
  var pubDate2sNode = b.selectNodes("//rss/channel/item/dc:date");
  var listchar=""
//使用for循环,产生列表信息
  for (i=0; i<a; i++)
  {
//下面的代码,测试RSS的内容是否可用,不是必需的
    try{titleV = titleNode(i).firstChild.nodeValue;}
    catch(e){titleV = "没有可用信息"}
    try{linkV = linkNode(i).firstChild.nodeValue;}
    catch(e){linkV = "没有可用信息"}
    try{categoryV = categoryNode(i).firstChild.nodeValue;}
    catch(e){
      try{categoryV = category2sNode(i).firstChild.nodeValue;}
      catch(e){categoryV = "没有可用信息"}
    }
    try{authorV = authorNode(i).firstChild.nodeValue;}
    catch(e){
      try{authorV = author2sNode(i).firstChild.nodeValue;}
      catch(e){authorV = "没有可用信息"}
    }
    try{pubDateV = pubDateNode(i).firstChild.nodeValue;}
    catch(e){
      try{pubDateV = pubDate2sNode(i).firstChild.nodeValue;}
      catch(e){pubDateV = "没有可用信息"}
    }
    try{descriptionV = descriptionNode(i).firstChild.nodeValue;}
    catch(e){descriptionV = "没有可用信息"}

//这里就是显示的形式了,用table 还是用 div 来显示,你自己看吧。
    adminlinkV = adminlinkNode(0).firstChild.nodeValue;


    //将得到的元素值装载到产生表格的字符串中
    //每生成一行元素,在首单元格内添加函数showmore(),并将序列号作为参数传入
    listchar += "<h5><a href='"+linkV+"' target='_blank'>"+titleV+"</a></h5><span>发表时间:"+pubDateV+"</span><div class='article'>"+descriptionV+"</div><div class='bottom'>文章分类:"+categoryV+" <a href='"+adminlinkV+"' target='_blank'>作者:"+authorV+"</a></div>";
  }
  //将生成的表格输出到页面的DIV元素
  prolist.innerHTML = listchar;    //注意这个语句,在id=prolist处插入一行


//  listen('mainbg')   ;//  
}
// -->
</script>

<!--白菜JS2   以下到   "白菜修改核心算法End "     可以全部不要-->
<script language="JavaScript">
/*这个显示左边的菜单,不是必需的
<!--
if (document.images){
t_sub=new Image
tsub=new Image
tsub_e=new Image //t_sub_end.gif备用图片
t_plus=new Image
tplus=new Image
tplus_e=new Image
t_open=new Image
t_close=new Image

t_sub.src="images/t_sub.gif";
tsub.src="images/t_sub_begin.gif";
tsub_e.src="images/t_sub_end.gif"; //t_sub_end.gif备用图片
t_plus.src="images/t_plus.gif"
tplus.src="images/t_plus_begin.gif"
tplus_e.src="images/t_plus_end.gif"
t_open.src="images/open.gif"
t_close.src="images/close.gif"

}
*/
//白菜修改核心算法Begin
function showdiv(num)

{
/*菜单收、放,不是必需的
  var imagename
  var name
  var total
  if (document.all("subtree"+num).style.display=="none" )
  {       
        document.all.item("subtree"+num).style.display=""

        if(num<2)
        {
        document.all.item("image"+num).src=tsub.src       
        }
        else{
        document.all.item("image"+num).src=t_sub.src       
        }
        document.all.item("img"+num).src=t_open.src
  }
  else
  {
        document.all.item("subtree"+num).style.display="none"

        if(num>12)
        {
        document.all.item("image"+num).src=tplus_e.src       
        }
        else if(num<2)
        {
        document.all.item("image"+num).src=tplus.src       
        }
        else
        {
        document.all.item("image"+num).src=t_plus.src
        }
        document.all.item("img"+num).src=t_close.src
  }
  */
}

//白菜修改核心算法End
//-->
</script>


</head>
<body onload="loadrss('http://rss.xinhuanet.com/rss/native.xml');">
<!--注意这里,由setlist ()函数中的显示方式决定,这里的ID被setlist()引用-->
<div class="body">

  
  <!--di v class="main" id="main"  不是必须        -->
    <!--di v class="maintit" id="listnum" > </ d iv  显示 统计数据--->
    <!--di v class="nonetab"></div  -->
    <!--xm l i  d="xml_file"></x  ml  -->


    <div class="mainbg" id="prolist">
    </div>


  <!--/di v  -->

  </div>
</body>
</html>
=================================
注释的部分删除后,就庐山真面貌了

用微软的 msscrdbg.exe把程序走一遍,就全部很清楚了。

[ 本帖最后由 青萍之末 于 2006-10-19 21:42 编辑 ]

论坛徽章:
2
丑牛
日期:2013-09-29 09:47:222015七夕节徽章
日期:2015-08-21 11:06:17
发表于 2006-10-25 10:31 |显示全部楼层

这段代码在freebsd+apache下怎么不能用?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title> New Document </title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
</head>

<body>
<div id="news"></div>
<script language="JavaScript">
<!--
function readRss(url,n)
{
var xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async = "false";
xml.load(url);
var str = "<div><strong>";
str += xml.selectSingleNode("/rss/channel/description").text;
str += "</strong></div><ul>";
var nodes = xml.selectNodes("/rss/channel/item");
for (var i=0; i<nodes.length && i<n; i++)
{
var title = nodes[i].selectSingleNode("title").text;
var link = nodes[i].selectSingleNode("link").text;
str += '<li><a href="'+link+'" target="_blank">'+title+'</a></li>';
}
str += "</ul>";
document.getElementById("news").innerHTML += str;
}
readRss("http://news.163.com/special/00011K6L/rss_newstop.xml",5);
readRss("http://news.163.com/special/00011K6L/rss_gn.xml",5);
//-->
</script>
</body>
</html>
我在windows的机器上浏览的时候是可以的,怎么放到了服务器上就不行了?

论坛徽章:
0
发表于 2006-10-25 11:19 |显示全部楼层
RSS的目的,就是把上述代码发送到客户端,由浏览器执行。

论坛徽章:
2
丑牛
日期:2013-09-29 09:47:222015七夕节徽章
日期:2015-08-21 11:06:17
发表于 2006-10-25 11:30 |显示全部楼层
原帖由 青萍之末 于 2006-10-25 11:19 发表
RSS的目的,就是把上述代码发送到客户端,由浏览器执行。

但是我在windows下用dreamweaver编辑的html文件,按F12浏览可以出效果,放到服务器上以后就不行了,为什么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP