解惑

解己之惑,解人之惑

2006年3月

使用google xslt包实现一个简单的在线rss阅读器

这个只是我试验google xslt的功能的一个小demo,很简单,另外使用到了XHConn。

HTML:
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN”>
<HTML>
<HEAD>
<TITLE>Google Ajaxslt rss reader demo</TITLE>
<script type=”text/javascript” src=”XHConn.js”></script>
<script src=”misc.js” type=”text/javascript”></script>
<script src=”dom.js” type=”text/javascript”></script>
<script src=”xpath.js” type=”text/javascript”></script>
<script src=”xslt.js” type=”text/javascript”></script>
<script type=”text/javascript”>
var _rssxslt=”<xsl:stylesheet><xsl:template match=\”/\”>”;
_rssxslt+=”<xsl:apply-templates select=\”rss/channel/item\”/>”;
_rssxslt+=”</xsl:template>”;
_rssxslt+=”<xsl:template match=\”rss/channel/item\”>”;
_rssxslt+=”<xsl:element name=\”a\”><xsl:attribute name=\”href\”><xsl:value-of select=\”link\”/></xsl:attribute>”;
_rssxslt+=”<xsl:value-of select=\”title\”/>”;
_rssxslt+=”</xsl:element>”;
_rssxslt+=”<br/>”;
_rssxslt+=”<xsl:value-of select=\”description\”/>”;
_rssxslt+=”<br/>”;
_rssxslt+=”</xsl:template>”;
_rssxslt+=”</xsl:stylesheet>”;
var myConn;
  function read()  {
    el('htmldisplay').innerHTML = “Reading”;
    myConn = new XHConn();
   
    if (!myConn) alert(“XMLHTTP not available. Try a newer/better browser.”);
   
    var fnWhenDone = function (oXML) {
    //logging__=false;
    var html = xsltProcess(xmlParse(oXML.responseText), xmlParse(_rssxslt));
    el('htmldisplay').innerHTML = html;
   };
    myConn.connect(“rssReader”, “POST”, “param=”+el('url').value, fnWhenDone);
  }
 
</script>
</HEAD>

<BODY>
<h1>Google Ajaxslt rss reader demo</h1>
<div id=”sample”>
Sample:
<ul>
<li>http://www.javaresearch.org/rss/RSS2_article.xml
<li>http://www.nytimes.com/services/xml/rss/nyt/AsiaPacific.xml
</ul>
</div>
Log:
<div id=”log”></div>
<br />
<br />

RSS feed: <input type=”text” id='url' size=80 value='http://www.javaresearch.org/rss/RSS2_article.xml'><INPUT id='readbutton' TYPE=”button” value=”Read” onclick=”read()” />
<div id=”htmldisplay”></div>
</BODY>
</HTML>

AJAX据说可以读取外部的数据,但是我试验了一下好像不行,XMLHttpRequest打开的链接不能是以http开头的外部链接,不得以写了一个servlet:
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class RssReaderServlet extends HttpServlet {
  public void init() throws ServletException {
  }

  public void service(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    response.setContentType(“text/xml”);
    response.setHeader(“Cache-Control”, “no-cache”);
    OutputStream pw = response.getOutputStream();
    URL url = new URL(request.getParameter(“param”));
    URLConnection connection = url.openConnection();
    BufferedInputStream reader = new BufferedInputStream(connection
        .getInputStream());
    int length = 0;
    byte[] buffer = new byte[1024];
    length = reader.read(buffer);
    while (length != -1) {
      pw.write(buffer, 0, length);
      length = reader.read(buffer);
    }
    pw.flush();
  }

}

web.xml里面的片段
  <servlet>
    <servlet-class>org.jr.ajax.RssReaderServlet</servlet-class>
    <servlet-name>rssReader</servlet-name>
  </servlet>
  <servlet-mapping>
    <servlet-name>rssReader</servlet-name>
    <url-pattern>/rssReader</url-pattern>
  </servlet-mapping>

反spam的战斗

随着网络的发展,现在的spam真的是越来越多,而我去年也差点为了一点小钱为别人写spam程序。

由于现在搜索引擎特别是google的地位日益巩固,针对google的左侧排名算法而进行的spam越来越多,光这个BLOG就遇到了comments spam和referer spam,现在comments spam好像平静了一些,但是近期referer spam很猖獗,而周末修改的过滤器将referer spam的危害降低到了不影响系统性能的程度,但是不能根除,看来2006年众多网站要为spam头疼了。

可能防止spam最好的方式是使用专有系统,我想应该不会有人专门针对影响特别大,系统又特殊的网站写spam程序吧?

服务器的硬件问题

去年一年JR的服务器一直处于时常崩溃的境地,后面我写了一个shell脚本监测服务进程的状态并可以自动重启从一定程度解决了这个问题,但是没有从根本上解决,我一直怀疑是服务器的硬件问题,因为我们的那个服务器投入使用的调试期竟然有三个月之久,最开始服务商并不承认是他们的服务器的硬件问题,怀疑我们的软件有问题,但是我们在另外一个机器上正在跑的JR是完全正常的,后来我好不容易在第N次重装系统的时候发现他们的硬盘有问题,换了硬盘后问题缓解,但是还不是非常稳定,最终他们的人换了内存才更好了一点。今年春节前服务器彻底崩溃,更换了服务器,他们并没有给服务器配置那个监控服务,但是服务器稳定的工作到我回来,至今也没有发生过宕机的问题,由此证明了去年一年我在服务器维护上的时间投入全是拜奸商所赐。

新的链接spam

到上次成功解决blog的问题的时候才搞清楚我们又遇到了一个新的spam类型,他针对roller这种blog显示访问来源的方式制造链接spam达到提高排名的目的,周末修改了过滤器,已经解决了这个spam造成JR服务器不能正常工作的问题。由此也证明了其实roller的性能不太高的问题。这些spam在这里选择的blog也有点特别,选择的是首页显示blog数量最多的jcoder的(25个),在我的印象中roller是有页面缓存的啊,应该不会这么弱不禁风啊。

访问sourceforge的两种方法

最近sourceforge又不能访问了,一个朋友告诉我了一个方法,另外今天看别人辟谣的分析文章有给出了一种方法,要访问sf,目前感觉最好的方式就是下载一个tor装上(上google搜索tor,第一个就是),把浏览器的代理设置为localhost:8118,需要提醒的是这个方式速度有点慢,不过我总的感觉还是可以忍受的(家里是2M的ADSL),另外一个方法就是用https访问,但是可能最后要下载文件的时候还是不行。

Blog的奇怪问题

JRoller存在一个非常奇怪的问题,昨天对所有的请求进行过滤后,发现提交的内容都是乱码了,今天修改了过滤器,只过滤一些非登录用户的请求就恢复了。

另外就是别人的blog都是好的,唯独我的坏了,查看系统日志,有相关的异常,但是google不到相同的错误,今天修改了下使用的页面文件,把显示最近留言的部分去掉了就好了。

© 2025 解惑

本主题由Anders Noren提供向上 ↑