历史上的今天(百度百科)完整接口源码

上次写过历史上的今天接口,采集的维基百科,相对比较麻烦,今天逛小航博客才发现原来百度百科也有历史上的今天的数据,所以果然利用其接口编写了一个更方便使用的接口。

源码如下:

<?php

//允许跨域
header("Access-Control-Allow-Origin:*");

$month=date( 'm',time() );
$day=date( 'd',time() );
//当前年月日
$today = date('Y年m月d日');
//获取接口数据
$url="https://baike.baidu.com/cms/home/eventsOnHistory/".$month.'.json'; 
$data = httpGet($url);
$json = json_decode($data,true);
//统计当日总数
$countnum = count($json[$month][$month.$day])-1;
//获取输出数量(可以get调整)
$num = $_GET['num'] ? $_GET['num'] : $countnum;
$arr = array('code'=>'200','day'=>$today);
for ($x=0; $x<=$num; $x++) {
  $arr['content'][$x].= match_chinese(strip_tags($json[$month][$month.$day][$x]['title']));
}
//创建随机数
$rand = rand(0,$countnum);
//下面是输出类型
if($_GET['format']=='json'){
  //输出当日所有 类型为json
  header('Content-type: application/json');
  echo json_encode($arr,JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
}elseif($_GET['format']=='js'){
  //以js类型输出一条
  header('Content-type: text/javascript;charset=utf-8'); 
  echo 'function briefing(){document.write("'.$arr['content'][$rand].'");}';
}else{
  //以html类型输出一条
  header("Content-Type: text/html;charset=utf-8"); 
  echo $arr['content'][$rand];
}


//下面是需要用到的封装

function httpGet($a, $b = '', $c = '', $d = ''){
//curl模拟get请求
  $e = curl_init();
  $f = mt_rand(11, 191) . "." . mt_rand(0, 240) . "." . mt_rand(1, 240) . "." . mt_rand(1, 240);
  $i[] = "CLIENT-IP:" . $f;
  $i[] = "X-FORWARDED-FOR:" . $f;
  $i[] = "User-agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11";
  $i[] = "X-Requested-With: XMLHttpRequest";
  if (!empty($d)) {
    $i[] = "Cookie: " . $d;
  }
  curl_setopt($e, CURLOPT_HTTPHEADER, $i);
  curl_setopt($e, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($e, CURLOPT_TIMEOUT, 180);
  curl_setopt($e, CURLOPT_SSL_VERIFYPEER, false);
  curl_setopt($e, CURLOPT_SSL_VERIFYHOST, false);
  if (!empty($c)) {
    curl_setopt($e, CURLOPT_REFERER, $c);
  }
  if (!empty($b)) {
    curl_setopt($e, CURLOPT_POST, 1);
    curl_setopt($e, CURLOPT_POSTFIELDS, $b);
  }
  curl_setopt($e, CURLOPT_URL, $a);
  curl_setopt($e, CURLOPT_ENCODING, "gzip");
  $j = curl_exec($e);
  curl_close($e);
  return $j;
}
function match_chinese($chars,$encoding='utf8')
{
//清除正则
  $pattern =($encoding=='utf8')?'/[\x{4e00}-\x{9fa5}a-zA-Z0-9]/u':'/[\x80-\xFF]/';
  preg_match_all($pattern,$chars,$result);
  $temp =join('',$result[0]);
  return $temp;
}

成品地址:https://api.yum6.cn/briefing/baidu.php?format=json

注释写的很清楚了,请求方式多样化,可参考http://doc.yum6.cn/web/#/1?page_id=22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏前端

前端限制上传文件的类型

今天在工作中遇到一个需求,需要在上传文件的时候限制上传文件的类型,比如上传图片的就只能上传图片类型的文件。 现将自己在开发中的代码放到我的博客里,以备在以后的开...

4439
来自专栏匠心独运的博客

消息中间件—RabbitMQ(集群监控篇1)

摘要:任何没有监控的系统上线,一旦在生产环境发生故障,那么排查和修复问题的及时性将无法得到保证

2723
来自专栏Vamei实验室

被解放的姜戈06 假作真时

之前了解了: 创建Django项目 数据库 模板 表格提交 admin管理页面 上面的功能模块允许我们做出一个具有互动性的站点,但无法验证用户的身份。我们这次了...

2086
来自专栏IMWeb前端团队

Nodejs进阶:readline实现日志分析+简易命令行工具

模块概览 readline是个非常实用的模块。如名字所示,主要用来实现逐行读取,比如读取用户输入,或者读取文件内容。常见使用场景有下面几种,本文会逐一举例说明。...

2820
来自专栏Python攻城狮

Python网络爬虫(一)- 入门基础1.通用爬虫 VS 聚焦爬虫2.HTTP & HTTPS3.urllib24.常用的响应报头(了解)

1.选择已有的url地址,将url地址添加到爬取队列 2.从提取url,DNS解析主机IP,将目标主机IP添加到爬取队列 3.分析网页内容,提取链接,继续执...

2274
来自专栏小狼的世界

在Codeigniter框架中使用NuSOAP

NuSOAP 是一组功能强大的PHP类,这个工具的发布让使用和创建SOAP消息变得相当简单。 NuSOAP有Dirtrich Ayala编写,可以无缝的与许多最...

871
来自专栏Python

三、请求库之requests模块

 一 介绍 #介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3) ...

2647
来自专栏Seebug漏洞平台

Joomla 权限提升漏洞(CVE-2016-9838)分析

0x00 漏洞概述 1.漏洞简介 Joomla 于12月13日发布了3.6.5的升级公告,此次升级修复了三个安全漏洞,其中 CVE-2016-9838 被官方定...

33810
来自专栏JavaEdge

操作系统之内存管理内存管理3.1 内存管理的概念3.2 内存覆盖与内存交换3.3 内存连续分配管理方式3.4 内存非连续分配管理方式

6096
来自专栏前端杂货铺

Nodejs cluster模块深入探究

由表及里 HTTP服务器用于响应来自客户端的请求,当客户端请求数逐渐增大时服务端的处理机制有多种,如tomcat的多线程、nginx的事件循环等。而对于nod...

55810

扫码关注云+社区

领取腾讯云代金券