想要批量定时备份osc的所有文章,最简单的办法就是利用博客导出功能了。
当然鼠标一点也不是什么难事,甚至可以通过浏览器插件录制一个宏动作来实现自动点击链接…
先看看有没有现成的资源,找了一圈,发现有python版本的:python模拟登录开源中国,嗯,稍微有点麻烦;
还有Java版本的:HttpClient 登录 oschina。这个版本不太好,居然用jjs去运行js…
(吐槽:你输入的内容包含敏感文字:zuidaima,这是打压竞争对手嘛?以上链接中的“最代码”更改为拼音后访问)
好八,我觉得还是shell比较简单,看代码:
email=$1 pwd=$(echo -n "$2" | sha1sum | cut -d' ' -f1) username=$3 wget -qO - --user-agent Mozilla --post-data="email=$email&pwd=$pwd" --keep-session-cookies --save-cookies cookies.txt https://www.oschina.net/action/user/hash_login wget -mkEpP os --user-agent Mozilla --load-cookies cookies.txt http://my.oschina.net/$username/blog-export
就这样完了?
核心代码不过两行便把登录和备份都完成了。当然,照着python版本的做法,当然其他操作也是可以的。
eval $(wget -qO - --user-agent="Mozilla/5.0 (Windows NT 6.1; WOW64)" --load-cookies cookies.txt http://www.oschina.net/ | egrep -o "name='(user_code|user)' value='.*'/>" | awk -F\' '{print $2"="$4}') wget -qO /dev/null --user-agent Mozilla --load-cookies cookies.txt --post-data="user_code=$user_code&user=$user&msg=test" http://www.oschina.net/action/tweet/pub
msg 中的内容就是发出的动弹信息。
j=- for i in `seq 1 100`; do msg=$("%-${i}s\n" "$j" | sed "s/ /$j/g") wget -qO /dev/null --user-agent Mozilla --load-cookies cookies.txt --post-data="content=$msg" http://www.oschina.net/action/news/comment?news=67399 done
最后数字为新闻ID。
备注:
更多参数见:HTTP Options、Make Offline Mirror of a Site using `wget`、
Learn the Wget Command with 20 Practical Examples
虽然加了这么大一堆参数,但是好像并没有递归下载所有url,还是得单独执行:
wget -qO os.html --user-agent=Mozilla --load-cookies cookies.txt http://my.oschina.net/$username/blog-export # 找出所有图片后并发下载到images目录 egrep -o 'http://static.oschina.net[^"]*.(jpg|gif|png)' os.html | xargs -rL 1 -n 1 -P 10 wget -nc -qP images # 替换备份文件中的图片链接为本地路径 sed -i -re 's/http:\/\/static.oschina.net\/uploads\/[^"]*\/(.*\.(jpg|gif|png))/images\/\1/g' os.html
so easy!
wget -qO - --user-agent="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36" -A '*' --header="Accept-Language: zh-CN,zh;q=0.8" --header="Content-Type: application/x-www-form-urlencoded" --post-data="email=$email&pwd=$pwd" --keep-session-cookies --save-cookies cookies.txt https://www.oschina.net/action/user/hash_login
测试发现有时 user-agent 只写Mozilla会请求失败,但是用完整的标识信息就没问题。
echo -n 'pwd' | openssl dgst -sha1 -hex | cut -d' ' -f2
最后,备份文件中使用了 SyntaxHighlighter 来做代码高亮(其实highlight.js 更简单),所以还要引入它:
fs='syntaxhighlighter.zip' [ -d ${fs%.*} ] || rm -rf ${fs%.*} wget 'http://alexgorbatchev.com/SyntaxHighlighter/download/download.php?sh_current' -qo $fs unzip -q $fs && rm -f $fs # 注意一定要先加载 core.js 后引入语法文件 echo '<script type="text/javascript" src="syntaxhighlighter/scripts/shCore.js"></script>' >> os.html egrep -o 'brush:[a-z]*' os.html | cut -d: -f2 | sort -u | sed -e '/^$/d' -e 's/\w/\U&/' -e 's/.*/<script type="text\/javascript" src="syntaxhighlighter\/scripts\/shBrush&.js"><\/script>/' >> os.html echo '<link type="text/css" rel="stylesheet" href="syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript">SyntaxHighlighter.all();</script>' >> os.html
推荐使用 curl 替换wget,优点有DNS解析更快、参数更多等。
eof.