我是豆瓣的会员,又用的是MSN Spaces的BLOG,目前用得还不错,都不打算退出。但是豆瓣提供的那个豆瓣秀服务,在MSN Spaces上用不成19.gif

  没办法,只能自己动手了。实际效果,见:[url]http://spaces.msn.com/members/zbw25/[/url]

  1、搞一个Custom HTML
  2、在公司的服务器上,装一个软件,ImageMagick。下载地址:[url]http://www.p_w_picpathmagick.org/download/binaries/ImageMagick-6.2.5-4-Q16-windows-dll.exe[/url]

  3、下载一个JMagick。下载地址:
[url]http://www.yeo.id.au/jmagick/quickload/win-6.2.4/jmagick-6.2.4-1-IM-6.2.5.zip[/url]

  4、将dll文件,copy到Windows的System32目录下。将jar文件copy到某lib目录下。

  5、写一个Servlet,代码如下:
  1  package  tv.recool.misc;
  2 
  3  import  java.io. * ;
  4  import  java.text. * ;
  5  import  java.util. * ;
  6  import  javax.servlet. * ;
  7  import  javax.servlet.http. * ;
  8  import  java.net.MalformedURLException;
  9  import  java.net.URL;
 10  import  java.net.URLConnection;
 11 
 12  import  magick.ImageInfo;
 13  import  magick.MagickImage;
 14  import  magick.MontageInfo;
 15 
 16  public   class  PutBooks  extends  HttpServlet {
 17 
 18       // 根据url,取得图片的byte[]
 19       private   static   byte [] getImageBytes(String url){
 20           try  {
 21               return  StreamUtils.read(( new  URL(url)).openStream());
 22          }  catch  (Exception e) {
 23               return   null ;
 24          }
 25      }
 26      
 27       // 根据url,取得文字
 28       private   static  String getImageText(String url){
 29           try  {
 30              URL u = new  URL(url);
 31              URLConnection uc = u.openConnection();
 32 
 33               // 要做足功夫,不然豆瓣就会拒绝你的请求
 34              uc.setRequestProperty( " Host " , " [url]www.douban.com[/url] " );
 35              uc.setRequestProperty( " Accept " , " */* " );
 36              uc.setRequestProperty( " Referer " , " [url]http://www.douban.com/[/url] " );
 37              uc.setRequestProperty( " User-Agent " , " Mozilla/4.0 (compatible; MSIE 5.00; Windows 98) " );
 38              uc.setRequestProperty( " Pragma " , " no-cache " );
 39              uc.setRequestProperty( " Cache-Control " , " no-cache " );
 40              uc.setRequestProperty( " Connection " , " close " );
 41 
 42               // StreamUtils是一个辅助工具,就不再给出了
 43               return   new  String(StreamUtils.read(uc.getInputStream()), " utf-8 " );
 44          }   catch  (Exception e) {
 45               return   "" ;
 46          }
 47      }
 48 
 49       public   void  doGet(HttpServletRequest req, HttpServletResponse res)  throws  ServletException, IOException{
 50           // 取得参数
 51          String uid = req.getParameter( " uid " );
 52          String n = req.getParameter( " n " );
 53          String columns = req.getParameter( " columns " );
 54          String select = req.getParameter( " select " );
 55          String picsize = req.getParameter( " picsize " ) + "" ;
 56          String show = req.getParameter( " show " );        
 57 
 58           try  {
 59               // 设置JMagick的ClassLoader,否则会报错
 60              System.setProperty( " jmagick.systemclassloader " , " no " );
 61 
 62              String str =  getImageText( " [url]http://www.douban.com/service/badge/[/url] " +
 63                  uid + " /?show= " + show
 64                   + " &select= " + select
 65                   + " &n= " + n
 66                   + " &picsize= " + picsize
 67                   + " &columns= " + columns);
 68 
 69               int  getSize = Integer.parseInt(n);
 70               int  colSize = Integer.parseInt(columns);
 71               int  len = getSize / colSize;
 72 
 73               // 申请一个数组
 74              MagickImage p_w_picpaths[]  =   new  MagickImage[getSize];
 75 
 76               // 用最简单的办法解析字符串,因为豆瓣的输出是固定的
 77              String imgstr[] = str.split( " .jpg " );
 78 
 79               for ( int  i = 0 ;i < getSize;i ++ ){
 80                   if (i < imgstr.length){
 81                      String picurl = "" ;
 82 
 83                       // 根据图片大小的设定,解析有所不同
 84                       if (picsize.equals( " medium " )){
 85                          String temps[] = imgstr.split( " [url]http://www.douban.com/mpic/[/url] " );
 86                          picurl = " [url]http://www.douban.com/mpic/[/url] " + temps[ 1 ] + " .jpg " ;
 87                      }  else  {
 88                          String temps[] = imgstr.split( " [url]http://www.douban.com/spic/[/url] " );
 89                          picurl = " [url]http://www.douban.com/spic/[/url] " + temps[ 1 ] + " .jpg " ;
 90                      }
 91                      MagickImage p_w_picpath  =   new  MagickImage( new  ImageInfo(),getImageBytes(picurl));
 92                      p_w_picpaths = p_w_picpath;
 93                  }
 94              }
 95 
 96               // 建立一个图片组
 97              MagickImage seqImage  =   new  MagickImage(p_w_picpaths);
 98 
 99               // 建立一个图片框架
100              MontageInfo montageInfo  =   new  MontageInfo( new  ImageInfo());
101 
102               // setGeometry(String)设置图片的几何特征
103               if (picsize.equals( " medium " )){
104                  montageInfo.setGeometry( " 99x149+1+1> " );
105              }  else  {
106                  montageInfo.setGeometry( " 66x99+1+1> " );
107              }
108 
109               // NxM的一个表格
110              montageInfo.setTile(colSize + " x " + len);
111              montageInfo.setBorderWidth( 0 );
112 
113               // 得到一张组合后的图片
114              MagickImage montage  =  seqImage.montageImages(montageInfo);
115              montage.writeImage( new  ImageInfo());
116              montage.setMagick( " JPG " );
117 
118               // 输出到byte[]
119               byte  data[] = montage.p_w_picpathToBlob( new  ImageInfo());
120 
121               // 通过Servlet输出
122              res.setContentType( " p_w_picpath/* " );
123              OutputStream toClient = res.getOutputStream();
124              toClient.write(data);
125              toClient.close();
126          }
127           catch  (Exception ex) {
128          }
129      }
130  }

  6、在MSN Spaces的Custom HTML中,写以下HTML:
None.gif < href ="http://www.douban.com/people/1019112/" >< img  src ="http://www.recool.tv:8080/Recool-WebServer/putBooks?uid=1019112&show=collection&select=random&n=12&columns=3"  border =0  width =178 ></ a >
  7、搞定,收工。