本站承诺永不接任何虚假欺骗、联盟广告、弹窗广告、病毒广告、诱导充值等影响用户体验的广告,广告屏蔽插件会影响本站部分功能,还请不要屏蔽本站广告,感谢支持!

当前位置:首页 / 正文

2019-10-29 | 编程技术 | 2220 次阅读 | 等你评论 | 0 次点赞 | 繁体

什么是毒汤日历?毒汤日历是一本有毒的日历,每天用毒鸡汤来唤醒你。 你甚至不用打开日历,打开 App 的推送,每天会定时送上一杯毒鸡汤。 自己也能制作毒鸡汤?那太好了,毒性够强,如果让别人扎到心你就厉害了。 每条毒汤可以点扎心、发毒评,或者转发给别人,让别人也扎扎心。

准备工作

通过抓包得到了毒汤日历的 API http://www.dutangapp.cn/u/toxic?date=2019-4-27
API 后面的 data=xxxx-xx-xx 为日期

初始化

访问下边这个页面后,会在自动生成 binduyan.txt 文件,大概 200 多条。

<?php
header("Content-type: text/html; charset=utf-8"); //设置编码 utf-8 
$utime = date("Y-m-d");//api的尾缀时间
//使用curl提高运行速度 不用动
function httpGet($url) {
    $curl = curl_init();
    $httpheader[] = "Accept:*/*";
    $httpheader[] = "Accept-Language:zh-CN,zh;q=0.8";
    $httpheader[] = "Connection:close";
    curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1" );
    curl_setopt($curl, CURLOPT_HTTPHEADER, $httpheader);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_TIMEOUT, 3);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curl, CURLOPT_URL, $url);
    $res = curl_exec($curl);
    curl_close($curl);
    return $res;
}
$myfile = fopen("binduyan.txt", "a+");//创建文件保存抓取的句子
//循环次数 2018-3-21 至现在日期相差的天数 
for ($i=1; $i<83; $i++) { 
    $json_string =httpGet('http://www.dutangapp.cn/u/toxic?date='.$utime);//curl 自定义函数访问api
    $data= json_decode($json_string,true);//解析json 转为php
 //2018-4-11之前只有一条数据 so 加判断
if (isset($data['data']['0']['data'])) {
     $text1= $data['data']['0']['data']."\n"; 
    fwrite($myfile, $text1);
}
if (isset($data['data']['1']['data'])) {
    $text2= $data['data']['1']['data']."\n";
   fwrite($myfile, $text2);
}   
if (isset($data['data']['2']['data'])) {
    $text3= $data['data']['2']['data']."\n";
    fwrite($myfile, $text3);
}
 
    $utime= date("Y-m-d",strtotime("-".strval($i)." day")); //每循环一次 当前日期减去循环变量
 
 } 
fclose($myfile);
echo "ok";
?>
搭建一言 API

将以下 API 代码保存为 index.php 与 binduyan.txt 上传到网站 binduyan 目录内

<?php
//获取句子文件的绝对路径
//如果你介意别人可能会拖走这个文本,可以把文件名自定义一下,或者通过Nginx禁止拉取也行。
$path = dirname(__FILE__);
$file = file($path."/binduyan.txt");
 
//随机读取一行
$arr  = mt_rand( 0, count( $file ) - 1 );
$content  = trim($file[$arr]);
 
//编码判断,用于输出相应的响应头部编码
if (isset($_GET['charset']) && !empty($_GET['charset'])) {
    $charset = $_GET['charset'];
    if (strcasecmp($charset,"gbk") == 0 ) {
        $content = mb_convert_encoding($content,'gbk', 'utf-8');
    }
} else {
    $charset = 'utf-8';
}
 
//格式化判断,输出js或纯文本
if ($_GET['encode'] === 'js') {
    echo "function binduyan(){document.write('" . $content ."');}";
} else {
    echo $content;
}
?>
请求地址
http://你的域名/binduyan/(返回随机一句)
http://你的域名/binduyan/index.php/?encode=js(返回 js 格式)
网站集成
<script type="text/javascript" src="http://你的域名/binduyan/index.php/?encode=js&charset=utf-8"></script>
<div id="binduyan"><script>binduyan()</script></div>
自动爬虫

你以为这就完了吗?
区区 200 条怎么能够用呢

<?php
header("Content-type: text/html; charset=utf-8"); //设置编码 utf-8 
$utime = date("Y-m-d");
$str = file_get_contents('data.txt');
$d=date('Y/m/d H:i',strtotime($str));
//请更改监控key 默认binduyan
if($_GET['p']==='binduyan'){
//判断今天是否已爬
    if(strtotime($utime)>strtotime($d)){
//爬虫开始    
$utime = date("Y-m-d");//api的尾缀时间
//使用curl提高运行速度 不用动
function httpGet($url) {
    $curl = curl_init();
    $httpheader[] = "Accept:*/*";
    $httpheader[] = "Accept-Language:zh-CN,zh;q=0.8";
    $httpheader[] = "Connection:close";
    curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1" );
    curl_setopt($curl, CURLOPT_HTTPHEADER, $httpheader);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_TIMEOUT, 3);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curl, CURLOPT_URL, $url);
    $res = curl_exec($curl);
    curl_close($curl);
    return $res;
}
//定义写入函数 
function myfile($txt){
    $myfile = fopen("binduyan.txt", "a+");
    fwrite($myfile,$txt);
    fclose($myfile);
}
 
    $json_string =httpGet('http://www.dutangapp.cn/u/toxic?date='.$utime);//curl 自定义函数访问api
    $data= json_decode($json_string,true);//解析json 转为php
 //2018-4-11之前只有一条数据 so 加判断 
if (isset($data['data']['0']['data'])) {
     $text1="\n". $data['data']['0']['data']."\n";
     myfile($text1);
 }
if (isset($data['data']['1']['data'])) {
    $text2= $data['data']['1']['data']."\n";
    myfile($text2);
}   
if (isset($data['data']['2']['data'])) {
    $text3= $data['data']['2']['data'];
    myfile($text3);
}
$myfile = fopen("data.txt", "w");
fwrite($myfile,$utime);
fclose($myfile);
echo "ok";
//爬虫结束
}else{
    echo "已爬";
}
}else
echo "老铁 搞事情吗";
?>

将以上代码保存为 papapa.php 上传到网站(记得更改监控秘钥),每天访问下这个 http://域名/papapa.php/?p=key 就会自动抓取当天的毒言并保存到 binduyan.txt 但是并不能达到全自动的目的。这时候需要监控平台,阿里云,360 都可以。

这里以宝塔面板的计划任务为例:

添加计划任务--访问url--设置每天访问

监控格式 http://域名/文件目录/papapa.php/?p=key
key自己修改,在PHP代码第七行

标签: php源码api

猜你喜欢
Typecho纯代码生成sitemap站点地图
想要实现 Typecho 纯代码生成 sitemap 站点地图只需要 2 步就够了。1、在博客主题目录新建 sitemap.php 页面,放入以下代码:<?php /** *HTML版网站...
typecho使用文件缓存加快打开速度
typecho 是一个伪静态的博客系统,如果不使用缓存,每次打开页面都会查询数据库,访问人数多了以后服务器压力倍增。但是,typecho 是一个 php 的程序,我们可以利用 php 将实时页面...
javascript | 原生JS多语言切换简单实现
由于项目需要实现一个前端的多语言切换,不想因为一个简单的功能就引入 jQuery,所以经过 google 编程大法摸索出一个原生 JS 就可以实现的多语言前端切换的小例子,仅供参考。<bo...
Typecho 评论弹幕插件下载及食用教程
视频弹幕大家已经很熟悉了,他是直接显现在视频上的评论,可以以滚动、停留甚至更多动作特效方式出现在视频上,是观看视频的人发送的简短评论。最近在开发 超赞网站导航,突发奇想能不能给网页也加上弹幕,这...
基于本地数据库的 IP 地址查询 |PHP 源码
网上有很多第三方的 IP 地址查询 API 接口,直接调用第三方的接口很方便,但也容易失效导致无法使用。因此今天来分享一个基于本地数据库的 IP 地址查询源码!模块代码<?php /** ...
typecho使用文件缓存加快打开速度
typecho 是一个伪静态的博客系统,如果不使用缓存,每次打开页面都会查询数据库,访问人数多了以后服务器压力倍增。 但是,typecho 是一个 php 的程序,我们可以利用 php 将实时页
云萌 Windows10 激活工具
最新教程: 数字权利激活工具 HWIDGen 的使用教程,一劳永逸的 Win10 完美激活,再也不怕重装系统了 - https://blog.wangtwothree.com/windows/133
(首次提交评论需审核通过才会显示,请勿重复提交)