posts - 59,  comments - 323,  trackbacks - 0

            我是豆瓣的會(huì)員,又用的是MSN Spaces的BLOG,目前用得還不錯(cuò),都不打算退出。但是豆瓣提供的那個(gè)豆瓣秀服務(wù),在MSN Spaces上用不成

            沒(méi)辦法,只能自己動(dòng)手了。實(shí)際效果,見(jiàn):http://spaces.msn.com/members/zbw25/

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

            3、下載一個(gè)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、寫(xiě)一個(gè)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     //根據(jù)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     //根據(jù)url,取得文字
           28     private static String getImageText(String url){
           29         try {
           30             URL u=new URL(url);
           31             URLConnection uc=u.openConnection();
           32 
           33             //要做足功夫,不然豆瓣就會(huì)拒絕你的請(qǐng)求
           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是一個(gè)輔助工具,就不再給出了
           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         //取得參數(shù)
           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             //設(shè)置JMagick的ClassLoader,否則會(huì)報(bào)錯(cuò)
           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             //申請(qǐng)一個(gè)數(shù)組
           74             MagickImage images[] = new MagickImage[getSize];
           75 
           76             //用最簡(jiǎn)單的辦法解析字符串,因?yàn)槎拱甑妮敵鍪枪潭ǖ?/SPAN>
           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                     //根據(jù)圖片大小的設(shè)定,解析有所不同
           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             //建立一個(gè)圖片組
           97             MagickImage seqImage = new MagickImage(images);
           98 
           99             //建立一個(gè)圖片框架
          100             MontageInfo montageInfo = new MontageInfo(new ImageInfo());
          101 
          102             //setGeometry(String)設(shè)置圖片的幾何特征
          103             if(picsize.equals("medium")){
          104                 montageInfo.setGeometry("99x149+1+1>");
          105             } else {
          106                 montageInfo.setGeometry("66x99+1+1>");
          107             }
          108 
          109             //NxM的一個(gè)表格
          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             //通過(guò)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中,寫(xiě)以下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 讀書(shū)、思考、生活 閱讀(1247) 評(píng)論(2)  編輯  收藏


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

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2005年11月>
          303112345
          6789101112
          13141516171819
          20212223242526
          27282930123
          45678910

          常用鏈接

          留言簿(20)

          隨筆檔案

          友情BLOG

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 仁布县| 贵州省| 绥化市| 黔东| 桂林市| 巴马| 花垣县| 渭南市| 西盟| 志丹县| 砚山县| 鹤庆县| 绥阳县| 曲靖市| 名山县| 沂源县| 饶河县| 寻甸| 普兰县| 喜德县| 峡江县| 吉木萨尔县| 遂平县| 海伦市| 宣威市| 嘉定区| 从江县| 富阳市| 蒲江县| 出国| 松阳县| 吴旗县| 都兰县| 金平| 龙胜| 报价| 扎赉特旗| 宁阳县| 宜阳县| 乐业县| 大悟县|