http://www.warcraftchina.com/services/realm-status/
这个是魔兽世界服务器状态页面,但是我用java代码获取到的网页内容并没包含服务器状态内容,特向高人请教这个网页的服务器状态如何获取。附获取到的HTML代码如下:
应该是在下文红色字符附近获取服务器状态,但是如何实现?<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>魔兽世界服务器状态 - 魔兽世界中文官方网站 World Of Warcraft</title>
<meta name="robots" content="all" />
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>
<meta name="copyright" content="(c)2009 暴雪娱乐股份有限公司 上海网之易网络科技发展有限公司" />
<link rel="icon" type="image/x-icon" href="/favicon.ico" media="screen" />
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" media="screen" />
<link rel="apple-touch-icon" href="/media/images/iphone_icon.png" />
<link rel="stylesheet" type="text/css" media="screen" href="/styles/master.css?091111" />
<link rel="stylesheet" type="text/css" media="screen" href="/styles/overide/service/realmstatus.css" />
<!--[if IE]>
<link rel="stylesheet" type="text/css" media="screen" href="/styles/ie.css?091111" />
<![endif]-->
<script type="text/javascript" charset="utf-8" src="/scripts/mootools.js?100116"></script>
<script type="text/javascript" charset="utf-8" src="/scripts/libs.js?100116"></script>
<script type="text/javascript" charset="utf-8" src="/scripts/services/realmstatus.js"></script>
<link rel="home" href="http://www.warcraftchina.com" title="魔兽世界中文官方网站 World Of Warcraft" />
<meta name="description" content="请进入本页面,查询魔兽世界游戏服务器状态。" />
</head>
<body class="realm-status-page">
<div id="s-ol">
<div id="t">
<div id="nav-main">
   <h1><a href="/index.html" title="魔兽世界官网 WoW">魔兽世界·巫妖王之怒·中文官方网站 World Of Warcraft</a></h1>
<ul id="nav-body">
  <li class="first-child">
   <dl>
    <dt><a href="/index.html" title="魔兽世界官网 WoW">首  页</a></dt>
    <dd class="seo">
     <p><a href="/index.html" title="魔兽世界官网 WoW">魔兽世界 巫妖王之怒官网 WoW</a></p>
    </dd>
   </dl>
  </li>
  <li>
   <dl>
    <dt><a href="/news" title="新闻公告">新闻公告</a></dt>
    <dd class="nav-dropdown">
     <div>
      <p><a href="/news" title="新闻">新闻动态</a></p>
      <p><a href="/events" title="活动">热点活动</a></p>
      <p><a href="/service-alerts" title="系统公告">系统公告</a></p>
     </div>
    </dd>
   </dl>
  </li>
  <li>
   <dl>
    <dt><a href="/features" title="专题">专  题</a></dt>
    <dd class="seo">
     <p><a href="/features" title="专题">专题</a></p>
    </dd>
   </dl>
  </li>
  <li>
   <dl>
    <dt><a href="/fans" title="玩家互动">玩家互动</a></dt>
    <dd class="nav-dropdown">
     <div>
      <p><a href="/fans" title="玩家互动">玩家互动</a></p>
      <p><a href="/fans/pictures" title="精选图片">精选图片</a></p>
      <p><a href="/download/video" title="相关下载">相关下载</a></p>
     </div>
    </dd>
   </dl>
  </li>
  <li>
   <dl>
    <dt><a href="/info" title="游戏资料">游戏资料</a></dt>
    <dd class="nav-widedropdown">
     <div>
      <p><a href="/newplayer/index.html" title="新手指引">新手指引</a><a href="/info/faq/index.html" title="游戏F.A.Q.">游戏FAQ</a></p>
      <p><a href="/info/intro/features/index.html" title="游戏特色">游戏特色</a><a href="/info/index.html#character" title="人物角色">人物角色</a></p>
      <p><a href="/info/factions/index.html" title="声望系统">声望系统</a><a href="/info/index.html#pvp" title="PvP系统">PvP系统</a></p>
      <p><a href="/info/events/index.html" title="活动事件">活动事件</a><a href="/info/index.html#items" title="物品装备">物品装备</a></p>
      <p><a href="/info/index.html#transportation" title="交通工具">交通工具</a><a href="/info/index.html#world" title="世界地理">世界地理</a></p>
      <p><a href="/info/instance/default.html" title="副本专题">副本专题</a><a href="http://cn.wowarmory.com" target="_blank" title="英雄榜"><strong>英雄榜</strong></a></p>
      <p><a href="http://cn.wowarmory.com/talent-calc.xml" target="_blank" title="天赋模拟器"><strong>天赋模拟器</strong></a></p>
     </div>
    </dd>
   </dl>
  </li>
  <li>
   <dl>
    <dt><a href="/info/patch" title="游戏版本">游戏版本</a></dt>
    <dd class="nav-dropdown">
     <div>
      <p><a href="/burningcrusade" title="燃烧的远征" target="_blank">燃烧的远征</a></p>
      <p><a href="/info/patch" title="版本大全">版本大全</a></p>
     </div>
    </dd>
   </dl>
  </li>
  <li>
   <dl>
    <dt><a href="/download/client" title="下载客户端">下载客户端</a></dt>
    <dd class="seo">
     <p><a href="/download/client" title="下载魔兽世界巫妖王之怒客户端">下载魔兽世界巫妖王之怒客户端</a></p>
    </dd>
   </dl>
  </li>
  <li>
   <dl>
    <dt><a href="http://forums.warcraftchina.com" title="魔兽世界官方论坛" target="_blank">官方论坛</a></dt>
    <dd class="seo">
     <p><a href="http://forums.warcraftchina.com" title="魔兽世界官方论坛">魔兽世界官方论坛</a></p>
    </dd>
   </dl>
  </li>
</ul>
<script type="text/javascript">
//<![CDATA[
siteOverall.navDecEffect();
//]]>
</script>
</div>
</div>
<h1 id="art-bg" title="在《魔兽世界》服务器的硬盘上,宝藏海湾其实是这个样子的@_@">魔兽世界服务器状态 - 魔兽世界中文官方网站 World Of Warcraft</h1>
<div id="w">
  <div id="m">
   <div id="main-wide">
    <h2 id="main-title-interface"><span>魔兽世界服务器状态</span></h2>
    <div class="article">
     <p>这里显示的是目前各服务器的状态。《魔兽世界》服务器会定期维护,请密切注意官网相关公告。</p>
     <p>箭头<img src="http://images.warcraftchina.com/_.png" class="arrow-icon up" title="正常" alt="正常" />表示服务器正常运作中    箭头<img src="http://images.warcraftchina.com/_.png" class="arrow-icon down" title="维护" alt="维护" />表示服务器停机维护中    箭头<img src="http://images.warcraftchina.com/_.png" class="arrow-icon unknown" title="异常" alt="异常" />表示服务器状态异常</p>
     <p id="now-loading" style="visibility:hidden">更新数据中  <span id="superLoadingContainer"></span></p>
     <p id="error-loading" style="display:none">数据更新失败……T_T 请稍候刷新页面再试</p>
     <div id="resultHolder"></div>
    </div>
    <p id="main-bottom-dec"> </p>
   </div>
   <p class="dec-art" id="running-goblin" title="在不为人知的角落,地精科技正在神奇地支持着《魔兽世界》服务器正常运行……"> </p>
  </div>
</div>
<div id="f">
<div id="f-c">
  <p id="blz-logo" class="footer-logo"><a href="http://www.blizzard.com/" title="暴雪娱乐股份有限公司">暴雪娱乐股份有限公司</a></p>
  <p id="ne-logo" class="footer-logo"><a href="http://www.netease.com/" title="上海网之易网络科技发展有限公司">上海网之易网络科技发展有限公司</a></p>
  <p id="copyright-info">
   <a href="http://www.battlenet.com.cn/support/article.xml?locale=zh_CN&articleId=27428" title="联系方法" target="_blank">联系方法</a> - <a href="http://hr.163.com/gmshanghai/" title="招聘信息" target="_blank">招聘信息</a> - <a href="/sitemap.html" title="网站地图" target="_blank">网站地图</a> - <a href="https://www.battlenet.com.cn/support" title="客服中心" target="_blank">客服中心</a> - <a href="/wow-eula.html">魔兽世界最终用户许可协议</a> - <a href="/wow-tou.html">魔兽世界使用条款</a><br />
   ©2010 暴雪娱乐股份有限公司 上海网之易网络科技发展有限公司 版权所有<br />
   文网进字[2009]6号 <a href="https://www.battlenet.com.cn/account/_images/_locale/zh-CN/license.png" target="_blank">文网文[2008]164号</a> <a href="http://www.miibeian.gov.cn/CX/main.jsp?3544164702=2195413823" target="_blank">增值电信业务经营许可证编号:沪B2-20080012</a><br />
   文化部网络游戏举报与联系邮箱:<a href="mailto:[email protected]">[email protected]</a> <a href="/internetlegal.html">《互联网文化管理暂行规定》</a>
  </p>
  <p id="cybercop" class="footer-logo"><a href="http://cyberpolice.sh.cn/" target="_blank">上海网警</a></p>
</div>
</div>
</div>
<script type="text/javascript">
//<![CDATA[
window.siteOverall.data.currentNav = 2;
//]]>
</script>
<script src="//analytics.163.com/ntes.js" type="text/javascript"></script>
<script type="text/javascript">
_ntes_nacc = "wow";
neteaseTracker();
</script>
<!-- END NetEase Devilfish 2006 -->
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-544112-25");
pageTracker._trackPageview();
} catch(err) {}
</script>
<script type="text/javascript">
neteaseClickStat();
</script>
</body>
</html>
 

解决方案 »

  1.   

    你采集到的只是html静态部分,服务器的状态信息在这里:
    http://www.warcraftchina.com/action/system/realmStatus.aux
    最后有个精确到毫秒的时间戳,大体上来看这个aux文件应该是每5分钟更新一次。浏览器客户端也会跟着定期更新列表。我现在正在尝试用php山寨一个服务器状态页,
    进度已接近尾声,等偶做完了再来和楼主做进一步的交流。
      

  2.   

    通过分析http://www.warcraftchina.com/scripts/services/realmstatus.js
    可以得知最终呈现的服务器状态列表是通过浏览器客户端JS写到<div id="resultHolder"></div>这里的
    其实只要分析一下 realmStatus.aux 和 realmstatus.js 就可以做一个山寨的状态页了
      

  3.   

    服务器状态页php山寨版出炉了<?php define(DEBUG,false); // 载入远程文件 将特殊字符串写入变量$content
    $urlfile = "http://www.warcraftchina.com/action/system/realmStatus.aux";
    $localfile = "realmStatus.aux";
    if(file_exists($localfile)) {
    $thistime = time();
    $filemtime = filemtime($localfile);
    $timediff = $thistime - $filemtime;
    if($timediff >= 3)
    if(!copy($urlfile,$localfile)) {
    exit("远程文件载入失败或本地文件覆盖错误");
    }
    }else{
    copy($urlfile,$localfile);
    }
    $content = file_get_contents($localfile); // 利用正则对字符串变量进行转换 使其看起来至少像是个php多维数组(依然是string)
    $pattern = array('/\{/','/\[/','/:/','/\]/','/\}/','/\s/');
    $replace = array('Array(','Array(','=>',')',')','');
    $content2 = preg_replace($pattern,$replace,$content); // 用eval将变了形的数组(字符串变量)还原成数组变量
    $content3 = '$content3 = '.$content2.';';
    eval($content3); // 测试结果(真正的数组)
    if(DEBUG) {
    echo "<pre>\n";
    print_r($content3);
    echo "</pre>";
    } // 输出html
    echo '<table class="huge-table"><tr>';
    $length = count($content3[data][realmstatus]);
    switch($length % 3) {
    case 0:
    $l = $length / 3;
    $cols = array($l, $l, $l);
    break;
    case 1:
    $l = intval($length / 3);
    $cols = array($l+1, $l, $l);
    break;
    case 2:
    $l = intval($length / 3);
    $cols = array($l+1, $l+1, $l);
    break;
    default:
    break;
    }
    if(DEBUG) {
    var_dump($length);
    var_dump($l);
    var_dump($cols);
    }
    $p = 0;
    $r = $content3[data][realmstatus];
    for($i=0; $i < count($cols); $i++) {
    echo '<td class="colh"><table class="a-column"><tr><td class="column-head"><table><tr><td class="col-0">&nbsp;</td><td class="col-1">状态</td><td class="col-2">服务器名称</td><td class="col-3">类型</td><td class="col-4">负载</td><td class="col-5">&nbsp;</td></tr></table></td></tr><tr><td><table class="column-body">';
    for($j=0;$j<$cols[$i];$j++) {
    $arealm = $r[$p];
    echo '<tr class="'.($j%2==1?'odd':'even').'"><td class="col-0">&nbsp;</td>';
    switch(strtolower($arealm[s])) {
    case "up":
    echo '<td class="col-1"><img src="http://images.warcraftchina.com/_.png" class="arrow-icon up" title="正常" alt="正常" /></td>';
    break;
    case "down":
    echo '<td class="col-1"><img src="http://images.warcraftchina.com/_.png" class="arrow-icon down" title="维护" alt="维护" /></td>';
    break;
    default:
    echo '<td class="col-1"><img src="http://images.warcraftchina.com/_.png" class="arrow-icon unknown" title="异常" alt="异常" /></td>';
    }
    echo '<td class="col-2"><div>'.$arealm[n].'</div></td><td class="col-3">'.$arealm[t].'</td>';
    switch(strtolower($arealm[l])) {
    case "low":
    echo '<td class="col-4"><span class="light easy">正常</span></td>';
    break;
    case "medium":
    echo '<td class="col-4"><span class="light busy">拥挤</span></td>';
    break;
    case "high":
    echo '<td class="col-4"><span class="light full">满</span></td>';
    break;
    default:
    echo '<td class="col-4"><span class="light mal">异常</span></td>';
    }
    echo '<td class="col-5">&nbsp;</td></tr>';
    $p++;
    }
    echo '</table></td></tr><tr><td class="column-foot">&nbsp;</td></tr></table></td>';
    }
    echo '</tr></table>';?>仅供楼主参考学习,质量有点粗糙,别笑我哦,我只是一个php新手。