论坛首页 Ruby版 ruby

从blogspot成功搬家到javaeye

浏览 1307 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2007-11-28 关键字: mechanize

今天终于把blogspot上面的帖子全部搬到javaeye来了。自从把blogspot上面的帖子下载到本地服务器之后,一直想找个地方来安顿。选择了几个,不过很多网页是gbk格式的,转换的时候老是出现乱码,我试过的163的就这样,后来还是找utf8格式的。却发现csdn和blogjava都是要验证码登录,也作罢了。第一次迁移成功是在yahoo上,后来找到了javaeye更新的办法,衡量了一下,终究还是选择了javaeye做个窝。

这个过程主要用到了WWW::Mechanize。首先为了快点获取网页,我对javaeye登录和发博客的页面信息进行提取,保存到本地。其中登录页面很好提取,发布页面由于有个富文本编辑框,而且有个预览的功能,所以对页面进行了一些预处理。至于页面最后是怎样的,我就不明说了。

ruby 代码
  1. #使用本地form   
  2. javaeye_login = 'http://localhost:8080/robot/javaeye_login.html'   
  3. javaeye_blog = 'http://localhost:8080/robot/javaeye_blog.html'   
  4.   
  5. require 'rubygems'    
  6. require 'mechanize'    
  7. require 'pp'    
  8. require 'active_record'   
  9. require 'active_support'   
  10. require 'hpricot'   
  11. require 'open-uri'   
  12. require 'cgi'   
  13.   
  14. #id,title,link,content,created_at   
  15. ActiveRecord::Base.establish_connection(:adapter => 'mysql',   
  16.                                         :host => 'localhost',   
  17.                                         :database => 'blog_backup',   
  18.                                         :username => 'root',   
  19.                                         :password => 'root',   
  20.                                         :encoding => 'utf8')   
  21.   
  22. class Blog < ActiveRecord::Base   
  23. end  
  24.   
  25. blogs = Blog.find(:all:order => 'created_at')   
  26. #post blogs   
  27. blogs.each_with_index do |blog, index|   
  28.   agent = WWW::Mechanize.new    
  29.   page = agent.get(javaeye_login)    
  30.   form = page.forms.first   
  31.   page = agent.submit(form, form.buttons.first)    
  32.   
  33.   sleep(3)  
  34.    
  35.   page = agent.get(javaeye_blog)   
  36.   form = page.forms.name('post').first   
  37.   form.fields.name("title").value = blog.title   
  38.   form.fields.name("message").value = blog.content   
  39.   page = agent.submit(form, form.buttons.first)   
  40.   p index   
  41. end  

其中有几点要注意:标题不能少于2个字,就这样有几次我还以为给封了,后来发现是标题太短造成的。另外,加了个耗时操作,因为怕提交太快给封了帐号。javaeye管理员看到我一天发了几百个博客,不要以为我是来搞破坏的哦,抱歉了。

不管怎么说,还算是搞定了。还有,我的blogspot是http://uptolife.blogspot.com

多谢rainchen ,改成了sleep(3)

   
最后更新时间:2007-11-27
mechanize很不错,稍微封装下就可以支持文件UPLOAD了,很方便。
   
0 请登录后投票
最后更新时间:2007-11-27
是呀,还封装了hpricot。 不用自己管理cookie,省了不少精力。 本来是直接使用javaeye的页面来发布的,不知为什么,mechanize识别不了form的title和message。后来手动添加了field进去,还是没测试成功,只好把页面保存到本地来修改了。
   
0 请登录后投票
最后更新时间:2007-11-27
mechanize确实很好用,还可以用来做爬虫,呵呵。
   
0 请登录后投票
最后更新时间:2007-11-27
发现代码中居然有这个
  for i in (1..10000000)   
    i=i   
  end  

可以用sleep(3),效果更好
   
0 请登录后投票
最后更新时间:2007-11-27
JavaEye3.0的博客我们会提供REST API,到时候本地发布博客文章,就用不着像你这样hack了。
   
0 请登录后投票
最后更新时间:2007-11-28
老大,blog可以支持Google Ads.不阿
   
0 请登录后投票
最后更新时间:2007-11-28
t0uch 写道
老大,blog可以支持Google Ads.不阿


两周后推出
   
0 请登录后投票
最后更新时间:2007-11-28
还是这里人气旺
   
0 请登录后投票
最后更新时间:2007-11-29
引用
liushao    11 小时前
还是这里人气旺


liuzhao兄?
   
0 请登录后投票
论坛首页 Ruby版 ruby

跳转论坛:
JavaEye推荐