1.为什么做这个
今天一个朋友问能不能拿到百度指数的折线图数据,便上网查了相关资料,参考了网上的一位作者,链接地址:http://www.pianshen.com/artic...,教了朋友怎么拿数据。
2.观察
经过观察,百度指数并没有返回包含真实数据的json文件,而是加密过后的数据,但是为了渲染,在前端应该有对应的解密代码。
3.实验
实验工具:谷歌浏览器
请求截图
发现请求的返回数据中返回了:data及uniqid两个值,猜测data为加密的数据,以及uniqid为密钥
解密,由上文的参考文章中得知js解密代码如下:
function decrypt(t,e){
for(var a=t.split(""),i=e.split(""),n={},s=[],o=0;o
n[a[o]]=a[a.length/2+o]
for(var r=0;r
s.push(n[i[r]])
return s.join("")
}
var e="j5TnWEU5,jEU5,LEU55jEVUnTEU,VUEjjrT5EjjW,rEU5,TEVTTnEVT,jEVnLTEUjjTEjLVWrEjL,nVEV5VjErU,VErTT5Err,5EVnULEUr,WEUWLVErUrUErrWLEVL5,EVn,jEVW5rEjL5WUEUV,UEVj,W" //加密后的数据
var t="xWEvn5UVITL,jtr.6,%3298-5041+7" //密钥
var data = decrypt(t,e)
console.log(data) //12536,9241,9240,9221,8935,9489,11752,11647,9245,8553,8541,8305,9115,10867,10438,8281,7948,7552,7742,8390,9746,9608,7979,7760,8024,8341,8627,10269,9849,8146
写了个html解密小工具,如下图所示
工具的源码如下(瞎写的一个工具,望大家见谅):
百度指数数据解密输入data
输入uniqid请求返回的数据
解密
解密的结果为
function decrypt(t,e){
for(var a=t.split(""),i=e.split(""),n={},s=[],o=0;o
n[a[o]]=a[a.length/2+o]
for(var r=0;r
s.push(n[i[r]])
return s.join("")
}
function showdata(){
document.getElementById("data").value = ""
var encryptedData = document.getElementById("encryptedData").value
var key = document.getElementById("key").value
var data = decrypt(key,encryptedData)
document.getElementById("data").value = data
}