Why?
简书把写作的门槛降到了最低,但是又不想放弃Blog.因此萌生了使用使用简书作为写作base,同步文章到hexo的想法.
思路
同步策略
如果仅仅是同步文章,太简单了,对于一个开放性的网站,抓取就够了.但是如果能同步markdown就完美了,但是简书这边没有提供api.
这里就两个方案
- 同步html,然后动态解析为markdown,复杂度较高
- 登陆,然后同步markdown,滑动验证码没研究过,感觉投入产出比相对较高,因此可以使用selenium做半自动登陆,下面是关键代码.
@driver.get(BASE_URL + "/sign_in")
@driver.find_element(:id, "sign_in_name").clear
@driver.find_element(:id, "sign_in_name").send_keys username
@driver.find_element(:id, "sign_in_password").clear
@driver.find_element(:id, "sign_in_password").send_keys password
#等待1000秒直到滑动验证码被验证成功,点击登录
wait = Selenium::WebDriver::Wait.new(:timeout => 1000)
wait.until { @driver.find_element(:class_name, "gt_ajax_tip").attribute('class').include? 'success' }
@driver.find_element(:class_name, 'ladda-button').click
这里选择了方案2
登陆状态的保存可以将cookie写入到文件,这样就不需要每次都启动selenium重新登陆一次.
同时,同步文章的时候考虑到如果使用selenium打开浏览器挨个请求一遍效率太低.所以在已有登陆cookie的情况下,将cookie写入到mechanize,使用mechanize做网络请求.
图片的问题
这是开发到后面的是发现的,简书的图片是动态cache访问的,也就是说没有永久存在的地址,所以这个需要先下过来.
用到的工具
- ruby
- selenium
- mechanize
总结
- 同样的思路可以用于登陆门槛较高的场景,比如说需要手机验证码登陆,等.
- 简书将很多写作体验就简化了,比如标签的设定,SEO的设定等的.要接受这点,才能让你专心到写作上.其实想想也是,如果你不做自媒体,又何必关心搜索引擎是否会收录.
- 花了点时间把想做的事做了,得益于这些前辈们开发了这么好的工具,让我如此简单的能达到我的目的,在此表示感谢.
- 写作的目的,如果想多了,自然负担就多了.
完整代码 gist
网友评论