<html>
<head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">
<title>留言板_新浪网</title>
</head>
<body>
<script type="text/javascript" src=/comment/cmnt_xml.js>
</script>
<script type="text/javascript">
var DEFAULT_SKIN = "default";
var params = params( document.location );
if ( params == null ) error_page( "参数错误" );
//temp for sc
var channel = cgi_param( params, "channel" );
if ( channel == "sc" )
document.location = "/cgi-bin/comment/view.cgi?"+params;
else
{
// channel default skin
var channel_skin = DEFAULT_SKIN;
var Channel = get_channel( channel );
if ( Channel!=null && Channel.ch_skin!="" )
channel_skin = Channel.ch_skin;
// skin param
var skin = cgi_param( params, "face" );
if ( skin=="" || !url_exist(skin_url(skin)) )
skin = channel_skin;
if ( skin=="" || !url_exist(skin_url(skin)) )
skin = DEFAULT_SKIN;
// jump
document.location = skin_url(skin) + "?" + params;
}
</script>
</body>
</html>
/comment/cmnt_xml.js内容:
// 评论V4 XML数据JS接口
////////////////////////////////////////////////////////////////////////////////
// defines
/*
var SERVER_ADDR = "/comment/server_addr.shtml";
var BASE_HOST = "";
*/
var XML_CGI = "/cgi-bin/comment/page_xml.cgi?type=";
var VIEW_CGI = "/comment/comment4.html";
var POST_CGI = "/cgi-bin/comment/post.cgi";
var SKIN_PATH = "/comment/skin";
var XML_PATH = "/comment/xml";
var ERRPR_PAGE = "/comment/error.html";
var SUB_COUNT_1 = 128;
var SUB_COUNT_2 = 255;
var MSGS_PERPAGE = 20;
var AUTO_REFRESH = "1";
var TOP_FLAG = "TOP_FLAG";
var TYPE_CHANNEL = "P_TYPE_CHANNEL";
var TYPE_HOTLIST = "P_TYPE_HOTLIST";
var TYPE_NEWS = "P_TYPE_NEWS";
var TYPE_GLIST = "P_TYPE_GLIST";
var TYPE_CMSG = "P_TYPE_CMSG";
var TYPE_COUNT = "P_TYPE_COUNT";
var TYPE_RATING = "P_TYPE_RATING";
var TYPE_TOPCMSG = "P_TYPE_TOPCMSG";
var TYPE_SCMSG = "P_TYPE_SCMSG";
var SUFFIX_CHANNEL = "_channel.xml";
var SUFFIX_HOTLIST = "_hotlist.xml";
var SUFFIX_NEWS = "_news.xml";
var SUFFIX_GLIST = "_glist.xml";
var SUFFIX_CMSG = "_cmsg_";
var SUFFIX_COUNT = "_count_";
var SUFFIX_RATING = "_rating_";
var SUFFIX_TOPCMSG = "_topcmsg_";
var REQUEST_TAG = 0;
var undefined; // for IE5
////////////////////////////////////////////////////////////////////////////////
// convert a single digit (0 - 16) into hex
function hex( i ) {
return ( "0123456789ABCDEF".substring(i,i+1) );
}
// Convert a 8bit number to hex
function to_hex( i ) {
var c1 = hex( (0x0000f0&i)>>4 );
var c2 = hex( (0x00000f&i)>>0 );
if ( c1 != "0" ) return c1+c2;
else return c2;
}
// signed int to unsigned int
function to_unsigned( i ) {
if ( i < 0 ) return i + 4294967296;
else if ( i >= 4294967296 ) return i - 4294967296;
else return i;
}
////////////////////////////////////////////////////////////////////////////////
// string length
function strlen( str ) {
if ( str==null || str=="" ) return 0;
var newstr = new String( str );
return newstr.length;
}
// trim string
function trim( str ) {
if ( str==null || str=="" ) return "";
var newstr = str.replace( /^\s*/, "" );
return newstr.replace( /\s*$/, "" );
}
// substring
function substr( str, len ) {
if ( str==null || str=="" ) return "";
var buf = new String( str );
return str.substr( 0, len );
}
// uri encode
function uri_encode( str ) {
if ( str==null || str=="" ) return "";
var toescape = ";/?:@&=+ \"#%<>'`[],~!$^(){}|\\";
var newstr="", chr="";
for ( var i=0; i<str.length; i++ ){
chr = str.charAt(i);
if ( toescape.indexOf(chr) == -1 ) newstr += chr;
else newstr += escape( chr );
}
return newstr;
}
// push elements to array, replace Array.push() in IE5
function push_array( array, item ){
array[array.length] = item;
}
// force return long string
function force_return( str, max_len ) {
if ( max_len <=0 ) return str;
var truncated = "";
var j = 0;
for ( var i=0; i<str.length; i++ ) {
j++;
truncated += str.charAt( i );
if ( j >= max_len ) {
j = 0;
if ( str.charAt(i)=="," || str.charAt(i)=="!" )
truncated += "\n"; // for IE
else truncated += " ";
}
}
return truncated;
}
// escape xml string
function escape_xml( str ) {
// force return
str = str.replace( /<br>/ig, "\n" ); // hide <br>
str = force_return( str, 30 );
// escape xml
str = str.replace( /&/g, "&" );
str = str.replace( /</g, "<" );
str = str.replace( />/g, ">" );
str = str.replace( /'/g, "'" );
str = str.replace( /"/g, """ );
str = str.replace( /\t/g, " " );
str = str.replace( /\n/g, "<br>" ); // restore <br>
return str;
}
// set cookie
function set_cookie( name, value, expires ){
if ( expires != "" )
document.cookie = name+"="+uri_encode(value)+";expires="+expires;
else document.cookie = name+"="+uri_encode(value);
}
// get cookie by name
function get_cookie( cookie ){
if ( cookie == "" ) return "";
var cookies = document.cookie;
var pos1 = cookies.indexOf( cookie+"=" );
if( pos1 == -1 ) return "";
var pos2 = cookies.indexOf( ";", pos1 );
if( pos2 == -1 ) pos2 = cookies.length;
return unescape( cookies.substring(pos1+cookie.length+1,pos2) );
}
////////////////////////////////////////////////////////////////////////////////
// string hash
function str_hash( str ) {
var ch; var hash = 5381;
var len = str.length;
for ( var i=0; i<len; i++ ) {
ch = str.charCodeAt(i) - 65; // 65:'A'
if ( ch < 0 ) ch += 256; // unsigned
if ( ch <= 25 ) // 25:'Z'-'A'
ch += 32; // 32:'a'-'A'
var tmp = hash<<5; tmp = to_unsigned( tmp );
hash += tmp; hash = to_unsigned( hash );
hash = hash ^ ch; hash = to_unsigned( hash );
}
return hash;
}
// hash path
function hash_path( docid ) {
var hash = str_hash( docid );
return ( to_hex(hash%SUB_COUNT_1) +"/"+ to_hex(hash%SUB_COUNT_2) );
}
////////////////////////////////////////////////////////////////////////////////
// append random param suffix
function request_tag( url ) {
var now = new Date();
var seconds = Math.floor( now.getTime()/1000 );
if ( url.indexOf("?") == -1 )
return url + "?random_tag_param=" + seconds;
else
return url + "&random_tag_param=" + seconds;
}
// xmlhttp get
function xmlhttp_get( url, type ) {
if ( url == null ) return "";
var xmlhttp;
if ( window.ActiveXObject && !window.XMLHttpRequest ) // IE
xmlhttp = new ActiveXObject( "Microsoft.XMLHTTP" );
else
xmlhttp = new XMLHttpRequest(); // Mozilla, Opera
xmlhttp.open( "GET", request_tag(url), false );
xmlhttp.send( null );
if( xmlhttp.status==200 || xmlhttp.status==304 ) { // 304 for Opera
if ( type=="EXIST" ) return true;
else if ( type=="XML" ) return xmlhttp.responseXML;
else if ( type=="HTML" ) return xmlhttp.responseText;
} else {
if ( type=="EXIST" ) return false;
else return null;
}
}
// get html
function get_html( url ) {
return xmlhttp_get( url, "HTML" );
}
// get xml
function get_xml( url ) {
return xmlhttp_get( url, "XML" );
}
// check url
function url_exist( url ) {
return xmlhttp_get( url, "EXIST" );
}
///////////////////////////////////////////////////////////////////////////////
// get xml node list
function xml_node_list( node, name ) {
if ( node!=null && name!="" )
return node.getElementsByTagName( name );
else return null;
}
// get xml node
function xml_node( node, name ) {
if ( node!=null && name!="" )
return xml_node_list(node,name)[0];
else return null;
}
// get xml nodes count
function xml_node_count( node, name ) {
if ( node!=null && name!="" )
return xml_node_list(node,name).length;
else return 0;
}
// get xml node attr
function xml_node_attr( node, name ) {
if ( node!=null && name!="" )
return node.getAttribute( name );
else return "";
}
// get xml node data
function xml_node_data( node, name ) {
if ( xml_node(node,name)!=null && xml_node(node,name).firstChild!=null )
return xml_node(node,name).firstChild.data;
else return "";
}
////////////////////////////////////////////////////////////////////////////////
// get channel xml
function channel_xml( channel ) {
return ( XML_PATH + "/" + uri_encode(channel) +
"/" + uri_encode(channel) + SUFFIX_CHANNEL );
}
function channel_cgi( channel ) {
return ( XML_CGI + TYPE_CHANNEL +
"&channel=" + uri_encode(channel) );
}
function get_channel( channel ) {
var url = channel_xml( channel );
if ( !url_exist(url) ) url = channel_cgi( channel );
var xml = get_xml( url );
if ( xml == null ) return null;
var node = xml_node( xml, "channel" );
var Channel = new Object();
Channel.ch_id = xml_node_attr( node, "id" );
Channel.ch_name = xml_node_data( node, "name" );
Channel.ch_skin = xml_node_data( node, "skin" );
Channel.ch_url = xml_node_data( node, "url" );
return Channel;
}
////////////////////////////////////////////////////////////////////////////////
// get news/glist xml
function news_xml( channel, newsid ) {
return ( XML_PATH + "/" + uri_encode(channel) +
"/" + hash_path(newsid) +
"/" + newsid + SUFFIX_NEWS );
}
function news_cgi( channel, newsid ) {
return ( XML_CGI + TYPE_NEWS +
"&channel=" + uri_encode(channel) +
"&newsid=" + uri_encode(newsid) );
}
function glist_xml( channel, newsid ) {
return ( XML_PATH + "/" + uri_encode(channel) +
"/" + hash_path(newsid) +
"/" + newsid + SUFFIX_GLIST );
}
function glist_cgi( channel, newsid ) {
return ( XML_CGI + TYPE_GLIST +
"&channel=" + uri_encode(channel) +
"&newsid=" + uri_encode(newsid) );
}
function get_news_item( node ) {
var News = new Object();
News.n_channel = xml_node_attr( node, "channel" );
News.n_newsid = xml_node_attr( node, "newsid" );
News.n_title = xml_node_data( node, "title" );
News.n_url = xml_node_data( node, "url" );
News.n_datetime = xml_node_data( node, "datetime" );
News.n_column = xml_node_data( node, "column" );
return News;
}
function get_news_list( node_list ) {
var NewsList = new Array();
for ( var i=0; i<node_list.length; i++ )
push_array( NewsList, get_news_item(node_list[i]) ); // IE5
//NewsList.push( get_news_item(node_list[i]) ); // IE5.5+
return NewsList;
}
function get_news( channel, newsid ) {
var url = news_xml( channel, newsid );
if ( !url_exist(url) ) url = news_cgi( channel, newsid );
var xml = get_xml( url );
if ( xml == null ) return null;
return get_news_item( xml_node(xml,"news") );
}
function get_glist( channel, newsid ) {
var url = glist_xml( channel, newsid );
if ( !url_exist(url) ) url = glist_cgi( channel, newsid );
var xml = get_xml( url );
if ( xml == null ) return null;
return get_news_list( xml_node_list(xml,"news") );
}
// get hotlist xml
function hotlist_xml( channel, hotid ) {
return ( XML_PATH + "/" + uri_encode(channel) +
"/" + uri_encode(hotid) + SUFFIX_HOTLIST );
}
function hotlist_cgi( channel, hotid ) {
return ( XML_CGI + TYPE_HOTLIST +
"&channel=" + uri_encode(channel) +
"&hotid=" + uri_encode(hotid) );
}
function get_hotlist( channel, hotid ) {
var url = hotlist_xml( channel, hotid );
if ( !url_exist(url) ) url = hotlist_cgi( channel, hotid );
var xml = get_xml( url );
if ( xml == null ) return null;
return get_news_list( xml_node_list(xml,"news") );
}
////////////////////////////////////////////////////////////////////////////////
// get cmsg/topcmsg xml
function cmsg_xml( channel, newsid, group, nice, rid, page ) {
if ( nice==1 || rid>0 ) return null;
if ( page < 1 ) page = 1;
var rpos = (page-1) * MSGS_PERPAGE;
return ( XML_PATH + "/" + uri_encode(channel) +
"/" + hash_path(newsid) +
"/" + newsid + SUFFIX_CMSG +
group + "_" + rpos + "_" + MSGS_PERPAGE + ".xml" );
}
function cmsg_cgi( channel, newsid, group, nice, rid, page ) {
return ( XML_CGI + TYPE_CMSG +
"&channel=" + uri_encode(channel) +
"&newsid=" + uri_encode(newsid) +
"&group=" + group +
"&nice=" + nice +
"&rid=" + rid +
"&page=" + page );
}
function topcmsg_xml( channel, newsid, group ) {
return ( XML_PATH + "/" + uri_encode(channel) +
"/" + hash_path(newsid) +
"/" + newsid + SUFFIX_TOPCMSG +
group + ".xml" );
}
function topcmsg_cgi( channel, newsid, group ) {
return ( XML_CGI + TYPE_TOPCMSG +
"&channel=" + uri_encode(channel) +
"&newsid=" + uri_encode(newsid) +
"&group=" + group );
}
function get_cmsg_item( node ) {
var Cmsg = new Object();
Cmsg.m_id = parseInt( xml_node_attr(node,"id") );
Cmsg.m_rid = parseInt( xml_node_attr(node,"rid") );
Cmsg.m_rank = parseInt( xml_node_attr(node,"rank") );
Cmsg.m_status = parseInt( xml_node_attr(node,"status") );
Cmsg.m_channel = xml_node_data( node, "channel" );
Cmsg.m_newsid = xml_node_data( node, "newsid" );
Cmsg.m_user = xml_node_data( node, "user" );
Cmsg.m_ip = xml_node_data( node, "ip" );
Cmsg.m_datetime = xml_node_data( node, "datetime" );
Cmsg.m_content = xml_node_data( node, "content" );
Cmsg.m_vote = xml_node_data( node, "vote" );
Cmsg.n_title = xml_node_data( node, "news_title" );
Cmsg.n_url = xml_node_data( node, "news_url" );
Cmsg.s_user = xml_node_data( node, "src_user" );
Cmsg.s_ip = xml_node_data( node, "src_ip" );
Cmsg.s_datetime = xml_node_data( node, "src_datetime" );
Cmsg.s_content = xml_node_data( node, "src_content" );
Cmsg.s_vote = xml_node_data( node, "src_vote" );
Cmsg.m_content = trim( Cmsg.m_content );
Cmsg.s_content = trim( Cmsg.s_content );
Cmsg.m_user = trim( Cmsg.m_user );
Cmsg.s_user = trim( Cmsg.s_user );
return Cmsg;
}
function get_cmsg_list( node_list ) {
var CmsgList = new Array();
for ( var i=0; i<node_list.length; i++ )
push_array( CmsgList, get_cmsg_item(node_list[i]) ); // IE5
//CmsgList.push( get_cmsg_item(node_list[i]) ); // IE5.5+
return CmsgList;
}
function get_cmsg( channel, newsid, group, nice, rid, page ) {
var url = cmsg_xml( channel, newsid, group, nice, rid, page );
if ( url==null || !url_exist(url) )
url = cmsg_cgi( channel, newsid, group, nice, rid, page );
var xml = get_xml( url );
if ( xml == null ) return null;
return get_cmsg_list( xml_node_list(xml,"cmsg") );
}
function get_topcmsg( channel, newsid, group ) {
var url = topcmsg_xml( channel, newsid, group );
if ( !url_exist(url) ) url = topcmsg_cgi( channel, newsid, group );
var xml = get_xml( url );
if ( xml == null ) return null;
return get_cmsg_list( xml_node_list(xml,"cmsg") );
}
////////////////////////////////////////////////////////////////////////////////
// get source cmsg xml
function scmsg_cgi( channel, newsid, rid ) {
return ( XML_CGI + TYPE_SCMSG +
"&channel=" + uri_encode(channel) +
"&newsid=" + uri_encode(newsid) +
"&rid=" + rid );
}
function get_scmsg( channel, newsid, rid ) {
url = scmsg_cgi( channel, newsid, rid );
var xml = get_xml( url );
if ( xml == null ) return null;
return get_cmsg_item( xml_node_list(xml,"cmsg")[0] );
}
////////////////////////////////////////////////////////////////////////////////
// get count xml
function count_xml( channel, newsid, group, nice, rid ) {
if ( rid > 0 ) return null;
return ( XML_PATH + "/" + uri_encode(channel) +
"/" + hash_path(newsid) +
"/" + newsid + SUFFIX_COUNT +
group + ".xml" );
}
function count_cgi( channel, newsid, group, nice, rid ) {
return ( XML_CGI + TYPE_COUNT +
"&channel=" + uri_encode(channel) +
"&newsid=" + uri_encode(newsid) +
"&group=" + group +
"&nice=" + nice +
"&rid=" + rid );
}
function get_count( channel, newsid, group, nice, rid ) {
var url = count_xml( channel, newsid, group, nice, rid );
if ( !url_exist(url) )
url = count_cgi( channel, newsid, group, nice, rid );
var xml = get_xml( url );
if ( xml == null ) return null;
var node = xml_node( xml, "count" );
var Count = new Object();
Count.c_count = xml_node_attr( node, "count" );
Count.c_nice = xml_node_attr( node, "nice" );
return Count;
}
////////////////////////////////////////////////////////////////////////////////
// get rating xml
function rating_xml( channel, newsid, group ) {
return ( XML_PATH + "/" + uri_encode(channel) +
"/" + hash_path(newsid) +
"/" + newsid + SUFFIX_RATING +
group + ".xml" );
}
function rating_cgi( channel, newsid, group ) {
return ( XML_CGI + TYPE_RATING +
"&channel=" + uri_encode(channel) +
"&newsid=" + uri_encode(newsid) +
"&group=" + group );
}
function get_rating( channel, newsid, group ) {
var url = rating_xml( channel, newsid, group );
if ( !url_exist(url) ) url = rating_cgi( channel, newsid, group );
var xml = get_xml( url );
if ( xml == null ) return null;
var Rating = new Object();
var node_list = xml_node_list( xml, "vote" );
for ( var i=0; i<node_list.length; i++ ) {
var option = xml_node_attr(node_list[i],"option");
var count = xml_node_attr(node_list[i],"count");
if ( option!=null && count!=null )
Rating[ option ] = count;
}
return Rating;
}
////////////////////////////////////////////////////////////////////////////////
// page functions
// get params list
function params( location ) {
var url = new String(location);
var pos = url.indexOf("?");
if ( pos == -1 ) return "";
if ( url.charAt(url.length-1) == "#" )
url = url.substr( 0, url.length-1 );
return url.substr(pos+1);
}
// return value by name
function cgi_param( params, name ) {
if ( params=="" || name=="" ) return "";
var pos1 = params.indexOf( name+"=" );
if( pos1 == -1 ) return "";
var pos2 = params.indexOf( "&", pos1 );
if( pos2 == -1 ) pos2 = params.length;
return unescape( params.substring(pos1+name.length+1,pos2) );
}
// show string
function _s( str ) {
if ( str==null || str==undefined ) str = "";
document.write( str );
}
// open window
function _o( url, target ) {
window.open( url, target )
}
// error message
function error_page( msg, auto_refresh ) {
if ( auto_refresh==null || auto_refresh==undefined )
auto_refresh = "0";
document.location = ERRPR_PAGE + "?auto_refresh=" +
auto_refresh + "&msg=" + msg;
}
// get skin url
function skin_url( skin ) {
return ( SKIN_PATH + "/" + skin + ".html" );
}
// get view url
function view_url( channel, newsid, style, nice, rid, page, face, hot ) {
return ( VIEW_CGI+"?channel="+channel+"&newsid="+newsid+"&style="+style+
"&nice="+nice+"&rid="+rid+"&page="+page+"&face="+face+"&hot="+hot );
}
// auto fill user info
function auto_fill( post_form ){
var nickname = get_cookie( "nick" );
if ( nickname!=undefined && nickname!=null && nickname!="" ) {
var pos = nickname.indexOf( "(" );
if ( pos != -1 ) nickname = nickname.substr( 0, pos );
post_form.user.value = nickname;
}
}
/*
// get server ip address
function get_server_addr() {
if ( url_exist(SERVER_ADDR) )
BASE_HOST = trim( get_html(SERVER_ADDR) );
}
*/