使用 Serverless SCF 快速封装百度指数API接口

最近,因为一些原因,项目有希望可以通过API的方式去推送每天的百度指数信息。故此,就有了这篇文章。

首先所有人都会想到的一个办法,使用集成接口,这个虽然简单,但是却是收费的。

而且还贼贵。关键是这个数据在页面是免费可以拿到,但是到了黑心供应商这里,就奇货可居了。

还有同学会问,百度指数官方应该是有接口的啊? 为啥不用呢? 阿西吧,最坑的就是这个了,百度指数不提供任何形式的API接口。

不慌不慌,我们先抓个包看看请求把:

果不其然,随便一抓包,我们就发现了相关暴露的API。但是需要做一些预处理,比如添加Cookie头等等等。

不过好在我们解决了第一步,找到预处理的接口。

下面我们来看如何通过云函数把冗余代码做二次封装把:

1. 首先,我们需要创建一个 PHP 云函数  (PHP劝退,哈哈哈哈)  https://console.cloud.tencent.com/scf/

2.其次,我们创建一个空白函数,它大致长这样

<?php
function main_handler($event, $context) {
$event = json_decode(json_encode($event), true);
$context = json_decode(json_encode($context), true);

$word = $event['queryString']['word'];  //获取需要查询的关键词
$startDate  = $event['queryString']['startDate'];   //获取需要查询起始时间
$endDate = $event['queryString']['endDate'];   //获取需要查询截至时间

$curlzb = curl_init();

curl_setopt_array($curlzb , array(
  CURLOPT_URL => "https://index.baidu.com/api/SearchApi/index?area=0&word=".$word."&startDate=".$startDate."&endDate=".$endDate, //输入参数
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array(
    "Cookie: BIDUPSID=B0C30AEB4CE3D; PSTM=95574; BAIDUID=1D274ED03FE39D4D1C38A4:FG=1..."   // 百度的 Cookie
),
));
$responsezb = curl_exec($curlzb);
curl_close($curlzb);
$echo_arrzb = json_decode($responsezb, true);
return $echo_arrzb['data']['generalRatio'][0]; //返回 generalRatio 字段取值
}
?>

3. 我们创建一个APIGW触发器,大致长这样:

然后,我们尝试访问下:

https://service-cr84yhrd-1251746107.sh.apigw.tencentcs.com/release/zhishuchaxun/?word=残梦&startDate=2019-12-21&endDate=2020-01-19

这样,一个查询百度指数的API就算是封装好了。我们也可以上架云市场去卖钱了。哈哈哈

作为良心博主,我当然不会做这样的事情的。一个小思路,献给大家。