Linux下RubyGems简明指南
作者: 王者之剑(http://www.albertsong.com/) 日期: 2008-11-06 14:31
Ruby HTTP简单应用—下载Bitrac皮肤
作者: 王者之剑(http://www.albertsong.com/) 日期: 2008-06-09 23:58
关键词: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源代码
打包后的在这里下载
get_bitrac_theme.zip (44.65 KB , 下载:179次)。
只要安装了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#写一个好用的。
本文涉及
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源代码
- #Albert
- #www.albertsong.com
- #2008-6-9
- require 'net/http'
- require 'iconv'
- #皮肤文件名及编码
- arr_file_name=[
- ["Archive.htm","UTF-16LE"],
- ["Artcomm.htm","ISO-8859-1"],
- ["Article.htm","ISO-8859-1"],
- ["Comment.htm","ISO-8859-1"],
- ["Counter.htm","ISO-8859-1"],
- ["Default.htm","UTF-8"],
- ["Folders.htm","UTF-16LE"],
- ["Footer.htm","UTF-8"],
- ["Header.htm","UTF-8"],
- ["Labels.htm","UTF-16LE"],
- ["Recomm.htm","UTF-16LE"],
- ["Search.htm","UTF-16LE"],
- ["Theme.css","UTF-8"],
- ["Theme.js","UTF-8"]
- ]
- #
- if ARGV.length<1 then
- puts "USAGE: ruby get_bitrac_theme.rb www.yourdomain.com"
- exit
- end
- #建立http连接
- h = Net::HTTP.new(ARGV[0], 80)
- resp, data = h.get("/", nil )
- if resp.code != "200" then
- puts "Code = #{resp.code}"
- puts "Message = #{resp.message}"
- exit
- end
- #取得皮肤名称
- if data =~/Themes\/(.*)\/Theme.js/ then
- puts "Theme is #{$1}"
- theme_name=$1
- if !FileTest.exist?(theme_name) then
- Dir.mkdir theme_name
- end
- if !FileTest.exist?("#{theme_name}/Images") then
- Dir.mkdir "#{theme_name}/Images"
- end
- else
- puts "This is not a Bitrac powered blog."
- end
- #取得模板文件
- arr_file_name.each{|file_name|
- puts "get /Themes/#{theme_name}/#{file_name[0]}"
- resp, data = h.get("/Themes/#{theme_name}/#{file_name[0]}", nil )
- if resp.code == "200" then
- data = Iconv.conv("UTF-8",file_name[1],data)
- o_file = File.new("#{theme_name}/#{file_name[0]}", "w")
- o_file.puts data
- o_file.close
- else
- puts "/Themes/#{theme_name}/#{file_name[0]} not found."
- end
- }
- #取得图像文件
- resp, data = h.get("/Themes/#{theme_name}/Theme.css", nil )
- data.gsub(/Images\/(.*)\.(gif|png|jpg)/){|match|
- puts "get /Themes/#{theme_name}/#{match}"
- resp, image_data = h.get("/Themes/#{theme_name}/#{match}", nil )
- if resp.code == "200" then
- File.open("#{theme_name}/#{match}", "wb"){|o_file|
- o_file.print image_data
- }
- else
- puts "/Themes/#{theme_name}/#{match} not found. "
- end
- }
打包后的在这里下载
get_bitrac_theme.zip (44.65 KB , 下载:179次)。只要安装了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://www.albertsong.com/) 日期: 2008-04-01 22:00
用ruby读写文本文件的简单例子,除了演示文本文件的读写外,这段ruby程序可以从文本文件中删除包含某些字符串的行。
用法:ruby delline.rb 文件名 字符串1 字符串2 字符串n
将删除同时包含字符串1 字符串2 字符串n的行。
ruby的开发环境这里下载
http://www.ruby-lang.org/en/downloads/
直接下载最近的稳定版Windows安装包
http://rub
用法:ruby delline.rb 文件名 字符串1 字符串2 字符串n
将删除同时包含字符串1 字符串2 字符串n的行。
ruby的开发环境这里下载
http://www.ruby-lang.org/en/downloads/
直接下载最近的稳定版Windows安装包
http://rub
标签: Ruby
- 1










