我是豆瓣的会员,又用的是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:
<a 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、搞定,收工。
分享到:
相关推荐
"我们在工作中应时刻保持警惕,不能因为任务紧急或者认为小事一桩就忽视安全规则。安全生产需要我们每个人树立"安全第一,预防为主"的观念,从自身做起,从每一次操作做起,防患于未然。事故的教训是惨痛的,但它们...
最后,下周任务部分设定了明确的工作目标,计划完成钻孔桩60根、地连墙13幅和搅拌桩700幅,这为下一周的工作规划提供了清晰的方向。 总的来说,这份教案详尽地反映了中铁地铁施工的管理流程、进度控制和问题解决...
8. **平衡生活**:"有一份宠爱的工作,有一桩成长的婚姻,有一个聪慧的孩子,有几个工作之外的乐趣",提醒我们要平衡工作与生活,享受多方面的幸福。 9. **目标一致**:"全部的人都以欢快幸福作为他们的目的",这...
如果每个人都认为丢弃零食包装袋是小事一桩,那么校园环境将迅速恶化,不仅影响美观,还可能对学生的身心健康产生负面影响。反之,如果我们都能主动捡起地上的垃圾,虽然看似微不足道,但这样的小善举累积起来,就能...
紧接着,我回到了家乡,加入了xx分部,负责第四作业区的灌注桩施工,打下了公司在此高速铁路的第一个灌注桩,对我来说,这是一个里程碑式的成就。 在思想层面上,我积极向党组织靠拢,关注国家大事,学习党的方针...
3. "百闻不如一见,百见不如一干" 强调实践的重要性,理论知识固然重要,但亲身实践才能真正理解和掌握。 4. "篱笆扎得紧,野狼钻不进" 教导我们要保持警惕,做好防范,预防总是优于补救。 5. "狐狸没捉到,惹了一...
本期监理月报记载了自2007年12月4日至2007年12月23日期间的现场工作大事记,包括:Ⅰ区补桩完成、地下室柱子钢筋直螺纹连接试件不合格、Ⅵ区域地下室柱、顶板、梁砼浇筑、Ⅵ区余留土方外运完成、Ⅵ区锚杆支护施工...
- **BFD**:全称是“Big Fing Deal”,一种非正式的表达,意味着“大事一桩”。 - **BFN**:全称是“Bye For Now”,与B4N相似,表示暂时告别。 - **BHOF**:全称是“Bald Headed Old Fool”,这里可能是幽默地形容...
- 赞美老师的名言:李商隐的"春蚕到死丝方尽,蜡炬成灰泪始干"描绘了教师无私奉献的精神。杜甫的"随风潜入夜,润物细无声"形象地比喻老师默默无闻的教诲。陶行知的"捧着一颗心来,不带半根草去"体现了教师的全心...
22. **当一个小小的心念变成行为时,便能成了习惯**:思想转化为行动,进而形成习惯,塑造个人性格。 23. **奋斗没有终点,任何时候都是一个起点**:鼓励孩子们始终保持奋斗精神。 24. **构成我们学习最大障碍的是...
施工方法涉及现场测量、施工便桥、老闸拆除、围堰、土方、灌注桩、桥梁施工、桥面及附属工程、模板、钢筋、混凝土、砌石等多个方面。 在质量管理上,设立了专门的组织和制度,采取了具体的质量控制措施,确保施工...
2. **团队合作**:“一个篱笆三个桩,一个好汉三个帮。”这句话强调了团结协作的重要性,无论是学习还是生活中,只有大家齐心协力,才能创建优秀的集体。 3. **有效学习方法**:为了更好地完成初中阶段的学习任务,...
基坑深度约为14米,采用排桩加内撑的支护形式,并有深层三轴水泥搅拌桩作为止水帷幕。 【工程地质概况】 场地属于第四纪冲积—海积平原,地层主要为人工杂填土、素填土、粉质粘土、淤泥质粘土等,其中基坑设计相关...
安全工作被视作头等大事,项目部配置了专职安全管理人员,制定了全面的安全防范措施。工地实行封闭式管理,设置安全标识,对关键区域增加安全巡视员,确保所有工人接受安全教育并正确佩戴安全装备。通过安全防范、...
1. **人际交往与社会生活**:试题中的谚语“一个篱笆三个桩,一个好汉三个帮”强调了人际交往对于个人成长和社会生活的重要性。小华一家的例子展示了家庭成员如何在不同领域(学习、工作、娱乐)参与社会生活,说明...
1. **海塘水利建设**:在林则徐担任浙江杭嘉湖道时,他将水利建设作为主要工作之一。亲自勘查海塘,修复脆弱的旧塘,新建的塘堤比旧塘高出约二尺,并增设桩石以增强稳定性。这种深入实地、亲自参与的工作态度为他...
2. **工程管理资料**:包括工程开工报告、停工报告、停工报告、施工进度分析表、大事记、施工日记、不合格项处理记录、工程质量事故调查(勘)查记录和工程质量事故报告书,这些文档用于跟踪和记录项目的整体进度和...