欢迎转载,但请注意,除非特别声明,本站采用许可:署名,非商业。需要联系我可发邮件至
预览模式: 普通 | 列表

Ruby HTTP简单应用—下载Bitrac皮肤

关键词:ruby HTTP 下载页面

本文涉及
1.ruby iconv的使用
2.ruby http页面下载
3.新建目录
4.写文本文件和二进制文件
5.正则表达式
6.命令行参数传递

一、问题来源
找Loveyuki要皮肤未果,只有发扬自力更生精神,写一个获取皮肤的工具。
要知道什么是Bitrac,请看这里http://www.loveyuki.com/Article/Bitrac_Alpha_Update_List.aspx
二、安装ruby
下载http://rubyforge.org/frs/download.php/29263/ruby186-26.exe
想了解更多关于ruby的东西,看这里
三、下载皮肤的ruby源代码
  1. #Albert
  2. #www.albertsong.com
  3. #2008-6-9
  4. require 'net/http'
  5. require 'iconv'
  6.  
  7. #皮肤文件名及编码
  8. arr_file_name=[
  9. ["Archive.htm","UTF-16LE"],
  10. ["Artcomm.htm","ISO-8859-1"],
  11. ["Article.htm","ISO-8859-1"],
  12. ["Comment.htm","ISO-8859-1"],
  13. ["Counter.htm","ISO-8859-1"],
  14. ["Default.htm","UTF-8"],
  15. ["Folders.htm","UTF-16LE"],
  16. ["Footer.htm","UTF-8"],
  17. ["Header.htm","UTF-8"],
  18. ["Labels.htm","UTF-16LE"],
  19. ["Recomm.htm","UTF-16LE"],
  20. ["Search.htm","UTF-16LE"],
  21. ["Theme.css","UTF-8"],
  22. ["Theme.js","UTF-8"]
  23. ]
  24. #
  25. if ARGV.length<1 then
  26.   puts "USAGE: ruby get_bitrac_theme.rb www.yourdomain.com"
  27.   exit
  28. end
  29. #建立http连接
  30. h = Net::HTTP.new(ARGV[0], 80)
  31. resp, data = h.get("/", nil )
  32. if resp.code != "200" then
  33.     puts "Code = #{resp.code}"
  34.     puts "Message = #{resp.message}"
  35.     exit
  36. end
  37. #取得皮肤名称
  38. if data =~/Themes\/(.*)\/Theme.js/ then
  39.     puts "Theme is #{$1}"
  40.     theme_name=$1
  41.     if !FileTest.exist?(theme_name) then
  42.         Dir.mkdir theme_name
  43.     end
  44.     if !FileTest.exist?("#{theme_name}/Images") then
  45.         Dir.mkdir "#{theme_name}/Images"
  46.     end
  47. else
  48.     puts "This is not a Bitrac powered blog."
  49. end
  50. #取得模板文件
  51. arr_file_name.each{|file_name|
  52.     puts "get /Themes/#{theme_name}/#{file_name[0]}"
  53.     resp, data = h.get("/Themes/#{theme_name}/#{file_name[0]}", nil )
  54.     if resp.code == "200" then
  55.         data = Iconv.conv("UTF-8",file_name[1],data)
  56.         o_file = File.new("#{theme_name}/#{file_name[0]}", "w")
  57.         o_file.puts data
  58.         o_file.close
  59.     else
  60.         puts "/Themes/#{theme_name}/#{file_name[0]} not found."
  61.     end
  62. }
  63. #取得图像文件
  64. resp, data = h.get("/Themes/#{theme_name}/Theme.css", nil )
  65. data.gsub(/Images\/(.*)\.(gif|png|jpg)/){|match|
  66.     puts "get /Themes/#{theme_name}/#{match}"
  67.     resp, image_data = h.get("/Themes/#{theme_name}/#{match}", nil )
  68.     if resp.code == "200" then
  69.         File.open("#{theme_name}/#{match}", "wb"){|o_file|
  70.             o_file.print image_data
  71.         }
  72.     else
  73.         puts "/Themes/#{theme_name}/#{match} not found. "
  74.     end
  75. }

打包后的在这里下载下载文件get_bitrac_theme.zip (44.65 KB , 下载:497次)。
只要安装了ruby,就可以直接运行压缩包里的run.bat下载loveyuki.com的皮肤,如果要下载其它blog的,修改run.bat就可以了。
四、问题
1、没有找到好的判断获取的页面的文本编码的方法,现在是写死的,用起来不方便。
      使用时可以将get_bitrac_theme.rb中的
      data = Iconv.conv("UTF-8",file_name[1],data)前面加上#,注释掉,然后执行。
     下载的文件如有乱码,通过能识别编码的文本编辑器识别后再修改定义的数组,取消注释,再次执行。
2、没有对图片文件是不是已经下载过进行判断,所以有的文件会下载几次,对ruby不熟,不知道有什么好的方法存储不重复的文件名。
      并且只下载了.css中的图片,虽然目前这样做没有问题。
3、没有对异常进行处理,超时等会导致程序终止。这没什么,再执行一遍即可。
总之,不好用!明天用C#写一个好用的。
标签: Ruby HTTP Bitrac

c# multiple threads interact with UI

keyword: c# event multithread UI

the most valuable article I ever found
WaitHandles for the confused
if you only want to&nb

[阅读全文]

标签: 多线程

什么是“普世价值”?

所谓“普世价值”无可争议的是由下面7个国际公约组成:《公民权利和政治权利国际公约》、《经济、社会和文化权利国际公约》、《消除一切形式种族歧视国际公约》、《消除对妇女一切形式歧视公约》、《禁止酷刑和其他残忍、不人道和有辱人格的待遇或处罚的公约》、《儿童权利公约》、《保护所有移徙工人及其家庭 成员权利公约》--(转羽良的博客)--其实还包括不属于公约的《世界人权宣言》。

来自:
h

[阅读全文]

标签: 随笔杂感

一个可以批量复制文件名和路径到剪贴板的Windows Shell扩展

给大家介绍一个小工具,这是一个Windows Shell Extension
解压后,将文件夹copy到 System32或者Program files下面,运行install.bat
用鼠标选中一个或多个文件或文件夹,按右键
会看到右键菜单中增加了四项
1.Copy File Path to Clipboard
   可以将选择的文件的文件名带路径一起copy到剪贴板上
2.Copy File Name to Clipboard
  只copy文件名,不含路径
3.Add Modified Date to File Name
  给选中的文件名后加上他的修改日期
4.Add Current Date to File Name
  给选中的文件名后加上当前日期
对我来说有这样几个用处,我将项目文件放在服务器上,然后要告诉小组成员看哪些文件,此时可以用第一个功能;当我将有些文档压缩保存后,可以用第四个功能给它加上日期;如果当时忘了,后来又要压缩,为了防止覆盖,可以用第三个功能。
菜单上看不到的功能:按住Ctrl 键,选第一项,会将路径加上双反斜杠;如果你一天之类将一个文件压缩备份几次,并加当前日期,它会自动在后面加后缀,比如doc20040915.rar,doc20040915_1.rar,doc20040915_2.rar
用不上的不要下载,我相信每个人硬盘里的垃圾已经够多了。

Update:
2008-5-26 增加了第五个菜单
 5.Command Prompt
  打开命令行窗口,并转到选中的目录

下载(不含源码):下载文件copypathext.rar (53.27 KB , 下载:719次)
标签: 免费软件

搞定了Bitrac博客程序在XP Pro下的安装

Bitrac博客程序是一个C#写的ASP.net 2.0版的单用户博客程序,目前还在开发中。
软件主页:http://www.loveyuki.com/Article/Bitrac_Alpha_Update_List.aspx
1)下载,请到主页下载
2)安装IIS,请通过添加或删除程序中的添加/删除windows组件来安装
3)安装.net 2.0,请到这里下载
http://www.microsoft.

[阅读全文]

标签: C# FAQ Bitrac

怎样提高大批量insert数据的速度

即要往一张表大量插入数据,怎样最快?
最重要的一条:
如果表有索引,先将索引删除,然后插入数据,最后重建索引。

不太重要的几条:
用该数据库专用的导入工具比自己(调用API)写的程序快。
插入多少条数据提交一次需要考虑,1000到10000之间比较好
数据库表本身的物理位置
如果要清空表里的数据,要用truncate table,不要用delete

用jar命令将java class文件打包以及编写方便执行jar文件的批处理文件

关键词 jar 打包 命令行

1.jar文件打包
假设需要打包的文件如下:
classes\com\albertsong\MyApp.class
classes\com\albertsong\Aaaa.class
classes\com\albertsong\util\Bbbb.class
(其中MyApp包含main函数)
建一个mymanifest.mf 文件,内容如下:
Main-Class: com.al

[阅读全文]

标签: Java

78回JTEST考完了

上午。明治大学明泉校区。78回JTEST考试。
因为种种原因没有完成复习计划,这次考试的感觉比上次还糟,上次侥幸考了650分,这回估计不行了。
今年的计划还剩下最后一次机会,加油。
下面两个月的学日语计划:
1.背完日本語能力試験出題基準中的一级所有单词。
   (这次的听力几乎大部分问题都有一个词不懂,FT)
2.复习句型。(目前还没有确定参考基准,句型不够的话,后面的造句没法弄)
3.做

[阅读全文]

标签: 日语