一、前言

  据王思聪引爆全民HQ也3个星期了,总结下最新做的一个有关"答题热"的工具。并借由这个工具的开发,分析当下HybridApp中H5的一些技术。

  在百万英雄等节目刚出来的时候,就有很多大咖预测会有人工智能AI介入。但是AI需要大量的运算分析,更贴近服务端,前端主要还是做客户端的工作。

  所以我的思路是借助一些互联网公司开发的免费AI答题助手,做一个整合到PC端AI参考答案的界面,并支持批量答题操作。助手包括:

  丶百度:简单搜索  Hybrid-App

  丶搜狗:汪仔助手  Hybrid-App

  丶UC:UC答题助手  Hybrid-App 或者 Web

二、开发

  目前全部代码已放在github:https://github.com/SmileSmith/autoAnswer(欢迎star和issue)

  效果图:

  

  1、各个助手代码分析(借用Charles抓取手机的请求和返回包)

    简单搜索:Hybrid-App,简单的静态页面做webscoket请求,特点如下:

      丶主要JS逻辑和代码放在index.html中,引入zepto和自己开发的scoket.io.js

      丶API用WebSocket实现实时响应,不需要轮询

      丶API请求简单的请求头即可,支持跨域,没有做安全策略,也不检验referrer

    点评:官方命名是DAN哥直播间,除了显示AI搜索的结果外,还有比较答案等功能,互动性较强。技术上用了Webscoket等,减少通讯数量,降低服务器的压力。但是业务层的代码没有做模块化工程化,且有一些低级错误,比如函数名为:stepTow。总结是设计和架构不错,业务逻辑代码有点像赶工的。。。

    模拟:直接抓取相关代码,静态托管即可。

    

    汪仔助手:Hybrid-App,与简单搜索差不多,简单的静态页面,差别在于用Ajax轮询,特点如下:

      丶主要JS逻辑和代码放在index.html中,引入zepto

      丶API需要轮询

      丶API使用jsonp支持跨域,并且做了CSP以及校验域名和校验User-Agent

    点评:与上面的简单搜索对比,无时无刻的轮询肯定是耗费大量资源的。前几天API接口从wd.sogou.com换到一个ip地址,不知道是不是服务器压力还是技术升级的原因。

    模拟:抓取相关代码,静态托管,对API请求做反向代理,修改Refer和User-Agent

     

    UC答题助手:Web访问或Hybrid-App,一个Vue的SPA应用,在特定时间段Ajax轮询,特点如下:

      丶Vue构建的SPA应用,webpack打包并做了版本控制,看上去是最工程化

      丶使用了服务端渲染SSR,(当前期数,奖金,开始轮询的时间)是动态渲染到首页的一个变量中的

      丶API在答题开始时开始轮询,12题结束后结束轮询,由前端控制,API不支持跨域

      丶API做了校验域名

    模拟:抓取相关代码,静态托管,对API请求做反向代理,修改Refer和User-Agent。首页动态渲染的参数,需要先请求真实地址(这里也需要反向代理),拿到相关参数eval,并修改请求数据的API地址

    

    2、本地服务器静态文件托管和反向代理、以及收集数据和点击手机

    用Python3写了简单的sever,方便后续分析处理数据。

    静态托管:

    

    动态代理(感觉这里用urllib模拟的反向代理,和我以前常用的Koa和Nginx中的反向代理有些不同:Charles抓的包能看到代理访问的地址):

    

    收集答题数据:

    

    3、收据收集和分析

    后续工作:

    1、根据各个助手的情况,分配权重值。再出题5秒后,用户还未点击的情况下,自动点击平均各个助手的答案权重值后的最终结果。

    2、收集各个助手的答题情况:每个答案的确信百分比,最终答案,准确率,做数据分析

【原创】最新的"答题热"中,前端的一点小工作的更多相关文章

  1. 关于C#中readonly的一点小研究

    可能园子里有不少文章已经说明了这个问题了,但是我在这里写这篇博客只是写写自己的一些体会,也权当是整理归纳,高手莫见笑. ===============正文分割线================== 现 ...

  2. VB.NET开发中遇到的一点小问题

    在用vb.net开发的security support时,遇到一个问题,在trainingCourses.aspx页面上增加了一个HyperLink控件 <asp:HyperLink runat ...

  3. js中全局变量的一点小知识点

    js中有三种方式定义全局变量: 在任何函数外面直接执行var语句,例如:var f="value"; 直接添加一个属性到全局变量上,在web浏览器中,全局对象名为window.例如 ...

  4. 使用yii中CSecurityManager的一点小技巧

    当我们使用CSecurityManager::encrypt对字符串进行加密, 加密后的字符串是一串乱码(看起来确实像乱码, 具体是什么有待考证), 这不利于我们的下一步操作. 我们可以使用base6 ...

  5. 前端必备——js中前端与后台的数据交互全解

    只要编程语言能够支持网卡端口的监听和发送,理论上都是可以实现服务器后台设计的.也因此造成了实现后台的语言偏多,而web前端语言以html/css/js为主.所以在这里我们不涉及后台的设计,只介绍在we ...

  6. 当下较热web前端技术汇总

    Web前段技术发展很快,主流技术日新月异,想想自己刚毕业那会用的asp技术,现在已经很少有主流网站在使用了.再到后来的J2EE框架,然后SpringMVC大行其道,但是最近各种js框架被广为传播,Ht ...

  7. 网站建设中前端常用的jQuery+easing缓动的动画

    网站建设中前端人员利用jQuery实现动画再简单不过了,只是要实现更酷的效果还需要插件来帮忙,easing就是一款帮助jQuery实现缓动动画的插件,经过试用,效果很不错! 下载该插件:jquery. ...

  8. Solidity 最新 0.5.8 中文文档发布

    本文首发于深入浅出区块链社区 热烈祝贺 Solidity 最新 0.5.8 中文文档发布, 这不单是一份 Solidity 速查手册,更是一份深入以太坊智能合约开发宝典. 翻译说明 Solidity ...

  9. PDF.Js的使用—javascript中前端显示pdf文件

    PDF.Js的使用—javascript中前端显示pdf文件 写于2018/12/6 起因是一个图片展示页面需要展示pdf格式的文件,所以查了半天决定使用pdf.js,我也不求有多了解它,能实现我想要 ...

随机推荐

  1. ElasticSearch 学习记录之如任何设计可扩容的索引结构

    扩容设计 扩容的单元 一个分片即一个 Lucene 索引 ,一个 Elasticsearch 索引即一系列分片的集合 一个分片即为 扩容的单元 . 一个最小的索引拥有一个分片. 一个只有一个分片的索引 ...

  2. Macaca环境搭建踩坑总结

    1.使用命令 npm i macaca-android -g 安装一直不成功,使用Macaca  doctor 一直没有显示出android C:\Users\ABC>npm i macaca- ...

  3. django xdmin使用

    我们来看看我们原先django给我们自带的admin后台是什么样子的呢 有人说,你的界面怎么那么丑,我说这个还叫丑吗,他说丑,我说你来,我看看你的,上图 看到登录界面后,我说别看了,我去修改,修改,我 ...

  4. solr 的 field, copyfield ,dynamic field

    Field: Field就是一个字段,定义一个Field很简单: <field name="price" type="sfloat" indexed=&q ...

  5. Xamarin.Forms (Android制作启动画面)

    http://blog.csdn.net/zapzqc/article/details/38496117     Xamarin.Forms 在启动的时候相当慢,必须添加一个启动界面,步骤如下: 1. ...

  6. 房上的猫:了解java与学习java前的准备

    一.java 概述:  1.通常指完成某些事情的一种既定方式和过程  2.程序可以看做对一系列动作执行过程的描述  3.计算机按照某种顺序完成一系列指令的集合称为程序  4.计算机仅识别二进制低级语言 ...

  7. GpG使用指南

    1. 简介 1991年,程序员Phil Zimmermann为了避开政府监视,开发了加密软件PGP.这个软件非常好用,迅速流传开来,成了许多程序员的必备工具.但是,它是商业软件,不能自由使用.所以,自 ...

  8. spring boot 之热部署(三)

    热部署:当发现程序修改时自动启动应用程序. spring boot使用的是spring-boot-devtools是一个为开发者服务的一个模块.其原理用了classLoader 其中一个加载不变的类, ...

  9. HTML5新特性:元素的classList属性与应用

    在html5新增的classList之前, 操作元素的class用的是className这个属性,而如果要向jquery封装的hasClass, removeClass, addClass, togg ...

  10. 跨域WebApi的Jquery EasyUI的数据交互

    目录 1       大概思路... 1 2       创建WebAPI 1 3       创建CrossMainController并编写... 1 4       Nuget安装microso ...