posts - 59,  comments - 323,  trackbacks - 0

            我是豆瓣的會員,又用的是MSN Spaces的BLOG,目前用得還不錯,都不打算退出。但是豆瓣提供的那個豆瓣秀服務,在MSN Spaces上用不成

            沒辦法,只能自己動手了。實際效果,見:http://spaces.msn.com/members/zbw25/

            1、搞一個Custom HTML
            2、在公司的服務器上,裝一個軟件,ImageMagick。下載地址:http://www.imagemagick.org/download/binaries/ImageMagick-6.2.5-4-Q16-windows-dll.exe

            3、下載一個JMagick。下載地址:
          http://www.yeo.id.au/jmagick/quickload/win-6.2.4/jmagick-6.2.4-1-IM-6.2.5.zip

            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","www.douban.com");
           35             uc.setRequestProperty("Accept","*/*");
           36             uc.setRequestProperty("Referer","http://www.douban.com/");
           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("http://www.douban.com/service/badge/"+
           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 images[] = 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[i].split("http://www.douban.com/mpic/");
           86                         picurl="http://www.douban.com/mpic/"+temps[1]+".jpg";
           87                     } else {
           88                         String temps[]=imgstr[i].split("http://www.douban.com/spic/");
           89                         picurl="http://www.douban.com/spic/"+temps[1]+".jpg";
           90                     }
           91                     MagickImage image = new MagickImage(new ImageInfo(),getImageBytes(picurl));
           92                     images[i]=image;
           93                 }
           94             }
           95 
           96             //建立一個圖片組
           97             MagickImage seqImage = new MagickImage(images);
           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.imageToBlob(new ImageInfo());
          120 
          121             //通過Servlet輸出
          122             res.setContentType("image/*");
          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:

          <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、搞定,收工。

          posted on 2005-11-14 21:20 讀書、思考、生活 閱讀(1247) 評論(2)  編輯  收藏


          FeedBack:
          # re: 干成一樁大事
          2005-11-14 21:32 | calvin
          MSN space不讓人貼JS真不爽阿。
          看圖識字學會ImageMagick:)  回復  更多評論
            
          # re: 干成一樁大事
          2005-11-14 23:48 | scud(飛云小俠)
          突然覺得這個文章好像看過一遍...原來老莊有新家了  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2005年11月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          常用鏈接

          留言簿(20)

          隨筆檔案

          友情BLOG

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 开平市| 娄烦县| 剑河县| 佛冈县| 北京市| 泗阳县| 田阳县| 鲁甸县| 乐亭县| 乌什县| 香港 | 永宁县| 南和县| 镇坪县| 郁南县| 和龙市| 光泽县| 南郑县| 民县| 湾仔区| 潮州市| 肥乡县| 眉山市| 沿河| 南丰县| 镇远县| 林口县| 莱芜市| 柳州市| 贵阳市| 安达市| 东港市| 霍邱县| 息烽县| 大方县| 黄平县| 夏津县| 白山市| 麻阳| 墨脱县| 龙陵县|