node自动推荐博客

推荐:
代理页面vote.html,也就是我们所说的推荐页面(引入博客园的加密js),请求'/getLoginData'获取账号密码,加密之后发送请求'/doVote'对文章进行推荐。

使用superagent请求登录的主界面,获取token,然后才进行正式的登录。向服务器发起带有cookie、token、content-type的请求,登录成功。获取登录验证之后服务器返回的cookie。

后面就是爬取要推荐的文章。使用async模块来进行流程控制。

async.series:串行执行,一个函数数组中的每个函数执行完之后才能执行下面的函数。每个函数都会有一个作为回调函数的参数,使用该回调函数可以将当前数据传递给下一个回调函数。

先对执行函数进行队列拼装,使用async.series对博客园每个pageurl发送请求,获取每个page的文章url,存放在数组中。

将推荐博客的请求数据封装到postData对象里面(博客名称,博客ID,是否取消推荐,推荐方式),再存放到postDatas数组里面

async.mapLimit控制并发数量,对每个postDatas数组遍历,使用superagent发送diggData数据。
在处理函数中,使用setTimeOut设定一个随机的延时时间,防止网站对并发连接数的限制,但请求太快的时候会返回空或者报错。

使用eventproxy管理这些异步操作是否完成。一般情况下可以维护一个计数器,每当异步操作完成的时候计数器加+,然后用handle处理函数来判断计数器是否到达。可以使用回调嵌套。

使用eventproxy,异步流程控制、事件代理
after 在某个事件之后在限制的次数之内执行某个监听器
emit 触发事件,并且执行所有监听器
需要设置监听器,比较消耗内存。

期间遇到的问题:
1.获取博客园的账号密码加密格式。期间尝试过使用cherrio(Node.js库,可以从一堆html片段中构建DOM结构,然后提供像jquery一样的css选择器查询)+superagent(node.js的请求代理模块,可以处理get、post、head、put、delete)请求。来获取js的那段加密代码,但是发现要使用window对象。所以直接引入博客园的加密js。

2.promise参数传递
在then方法中加入状态改变的回调函数,在调用resolve函数的时候,只能传入一个参数,但是我可以多个数据合成一个参数,然后再用es6的解构赋值。

3.判断是否重复登录
用一个缓存变量来获取。

4.判断博客推荐完成

5.请求太快会报错或者返回空
因为博客园有并发连接数的限制。所以使用async.maplimit来控制并发量

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,380评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,155评论 19 139
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,717评论 4 61
  • 今天买了200来块钱的书,关于独立思考,关于演讲技巧,关于职业生涯规划→_→ 今天排了两个微信推送,看了几篇带劲的...
    King木子木木亦大阅读 1,454评论 0 0
  • 最近上新的校园偶像剧《致我们单纯的小美好》可谓是在学生市场又引起一次爆动啦!剧情不狗血,没有堕胎,没有同学之间的处...
    鹿女神奇阅读 1,841评论 0 0

友情链接更多精彩内容