为什么80%的码农都做不了架构师?>>>   

想要批量定时备份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`; domsg=$("%-${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。

备注:

  • 第一段代码中的 -mkEpP 为以下参数的简写:
  1. 【 –m, --mirror 】递归下载,与 -r 有区别嘛?
  2. 【 -k, --convert-links 】把远程链接转换为本地地址,如:file:///a.jpg...
  3. 【 -E, --adjust-extension 】根据文档类型添加后缀名,也是用于本地加载
  4. 【 -p, --page-requisites 】下载图片和CSS等用于离线浏览
  5. 【 -np, --no-parent 】递归时不上升到父目录,以防下载过量,亦可用 --domains 指定
  6. 【 -P 】指定保存目录前缀

更多参数见: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会请求失败,但是用完整的标识信息就没问题。

  • 如果系统中没有自带 sha1sum 程序,使用 openssl 亦可:
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.

转载于:https://my.oschina.net/cwalet/blog/485824

通过shell登录OSC并备份博文相关推荐

  1. 用shell脚本实现定时备份数据库

    1.备份数据库的方法 可以使用命令查看 ls  /usr/local/mysql/bin 这个mysqldump就是系统内置的用来备份数据库的工具. 2.实现方法 ①先随便进入一个位置创建一个目录 ② ...

  2. shell脚本实现自动化备份

    shell脚本实现自动化备份 1.备份规则: 在生产环境中有若干服务器需要定时将服务器中应用程序,以及数据库等进行备份.要求在本地服务器中保存近一周的备份,备份服务器中保存最近一月的备份文件.     ...

  3. Shell实现MySQL分库备份

    01 前言 工作中经常会用到- 02 实现过程 进入mysql中查看库名 mysql -uroot -p'root'show databases; 如下图 图1 命令行进入MySQL 或者可以不进入M ...

  4. shell登录路由器获取ip 自动通过邮件发送

    一.shell登录路由器 涉及telnet登录路由器ip,expect进行交互式操作进行登录. vim get_route_ip.sh 内容如下: #! /usr/bin/expect spawn t ...

  5. bat自动登录服务器取文件,批处理(.bat)一键备份资料,自动登录局域网进行备份,加~批处理.bat加密软件...

    复制代码到txt 另存为xx.bat 即可 需要修改call :s 源地址即本机例如D:\XX 目标地址即服务器例如\\server\xx 服务器用户 密码 %output% 改成自己的 例如 cal ...

  6. shell 登录mysql 然后quit_MySQL 数据库简单操作

    对于想要从事或爱好mysql相关工作的童鞋们,有必要掌握在命令行下对mysql实现一些简单的操作.本文从描述了如何登录到mysql数据库服务器,如何在mysql提示符下发布命令,创建数据库,以及执行一 ...

  7. Linux shell脚本、定时备份mysql数据库、sendMail邮件发送

    数据库备份 定时任务 邮件发送 一.数据库备份 vim /sqlbackup/mysql_backup.sh#!/bin/sh ###定义变量#### date=`date "+%Y-%m- ...

  8. python shell背景颜色改变_科学网—Python Shell Background Color - 李旭的博文

    ArcGIS在安装时就已经默认在本机安装了Python.可是,Python Shell的界面看起来太亮了,对眼睛不太好啊,如图1. 图1 在网上搜索一番,之前也有和我同样问题的帖子,不过,时间有点久了 ...

  9. shell 登录mysql 然后quit_使用工具Xshell实现在linux上登录mysql和退出mysql的相关操作讲解...

    这两天想着把自己买的服务器和域名使用起来搭建一个个人博客,使用Xshell工具在Linux系统下操作以及一些命令使用上的一些随笔小记吧. 首先在Linux上的mysql的登录和退出 1.查看自己的my ...

  10. 如何自定义Shell登录组件

    Windows XP Embedded 中的组件开发通常分为以下几类: 1. 设备驱动程序组件开发: 2. 应用程序组件开发: 3. 自定义壳程序组件开发: 4. 其他组件开发: 本贴主要介绍了如何自 ...

最新文章

  1. 我在互联网大厂,和同事谈恋爱
  2. jquery.autocomplete修改 实现键盘上下键 自动填充
  3. android 价格排序筛选页面,Android应用开发之基于Popupwindow实现的筛选房源信息等相关的可自由排序控件...
  4. 光伏产业的发展推动太阳能组件技术进步
  5. JavaOne 2012:Lambda之路
  6. (140)FPGA面试题-FPGA IP简介
  7. vue4 跳转外部链接_vue跳转到外部链接
  8. 50阶乘c语言思想,求10000的阶乘(c语言代码实现)
  9. 北京联通华为光猫HG8346R破解改桥接
  10. Eclipse 中Alt+/快捷键失效的解决办法。
  11. 笔记:常见TCP端口号
  12. tf.app.flags
  13. 物联网云平台系统设计
  14. 0人报名!清华转专业20+学科无人问津引热议,网友:一切为了吃饭
  15. 极客日报:中国批准AMD收购赛灵思;微信可直接打开淘宝链接购买商品;​马斯克称今年将实现全自动驾驶
  16. 工作11年后一切归零
  17. 班主任工作中如何融入生态文明教育?
  18. 便利贴--17{移动端滑动模块}
  19. 戴尔服务器温度显示器,选择Dell UltraSharp 27的四大理由:有温度的科技更近人心...
  20. python时间索引_Python时间戳作为索引

热门文章

  1. ARM裸机开发(三)SDRAM编程
  2. 根据crash学习ARM64虚拟地址空间布局
  3. Ubuntu16.04 安装Tensorflow-CPU
  4. Linux电源管理(1)_整体架构
  5. Linux 进程地址空间1_数据结构和接口
  6. G - 取石子游戏 HDU - 2516 (斐波那契博弈)
  7. 队列queue中的常用函数
  8. 生态系统服务——水源涵养水源涵养分布数据
  9. hadoop 用MR实现join操作
  10. 递归 非递归 遍历二叉树