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

获取Bitrac皮肤的程序

写了一个获取Bitrac皮肤的工具,如下:
attachments/200806/4166524282.png
可惜的是Bitrac实际使用的.htm文件有几种编码格式,所以获取的皮肤要做适当转换。
特别是.htm含有汉字的,要将.htm用notepad打开另存为Unicode编码格式。好在.htm文件个数不多。
不明白为什么不直接使用UTF-8编码,难道是故意的:)
这里下载下载文件GetBitracTheme.rar (6.25 KB , 下载:93次)。
标签: Bitrac

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 , 下载:75次)。
只要安装了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

取得CString内存缓冲区的字节数

当在MFC程序里调用C程序时,可能需要知道CString内存缓冲区的字节数,尤其是在Unicode的情况下。
CString str
str.GetLength()取得的是字符数,在Unicode的情况下一个汉字占两个字节,因此GetLength不能取得正确的字节数。
有一个方法是使用WideCharToMutiByte函数,
但有一个小技巧更简单,
CStringA asciiStr(str)
asciiS

[阅读全文]

标签: MFC

用ruby读写文本文件

用ruby读写文本文件的简单例子,除了演示文本文件的读写外,这段ruby程序可以从文本文件中删除包含某些字符串的行。
用法:ruby delline.rb 文件名 字符串1 字符串2 字符串n
将删除同时包含字符串1 字符串2 字符串n的行。
ruby的开发环境这里下载
http://www.ruby-lang.org/en/downloads/
直接下载最近的稳定版Windows安装包
http://rub

[阅读全文]

标签: Ruby

合并lib文件及obj文件的方法

关链接词: Visual C++, 静态链接库
本文针对Visual C++ 2005及以上。
问题来源:
有*.h和*.lib,自己使用这些文件制作一个扩展库my.h和my.lib,为了让用户只使用my.h和my.lib这两个文件即可,因此要将*.lib合并。
解决方案:
可以使用VC带的lib.exe合并即可。
lib /out:my.lib my.lib A1.lib A2.lib ... An.lib

[阅读全文]

标签: C语言

自定义的用于C语言的TRACE和DUMP

关键词:C语言 调试
1.C语言调试时,可能需要用printf打印调试信息,但是又不希望在release版本中起作用。
    a)最不可取的作法,先写着,然后Release时注释掉。
    b)在打印调试信息的地方
          #ifdef _D

[阅读全文]

标签: C语言

jQuery的attr设置属性无效的解决办法

今天用$("#div1").attr("scrollLeft","300");设置div滚动条的初始位置,结果在Firefox下不起作用,上次碰到的是设置maxlength在IE下无效。
在网上一查,没有相关的问题,不由得想到:如果attr确实有问题又没有人抱怨的话,那一定是有别的办法。
测试的结果是直接用
document.getElemen

[阅读全文]

标签: jQuery FAQ

jQuery设置Input 的maxlength在IE中无效

用jQuery设置input元素的maxlength在IE6.0中不起作用
$("#username").attr({maxlength:"20",size:"10"});
or
$("#username").attr("maxlength","20");
这个问题早已出现了,并且说是已

[阅读全文]

标签: jQuery FAQ