余川分享

2020
余川分享
首页 » 脑洞大开 » PHP 自动爬毒汤日历搭建一言 API接口

PHP 自动爬毒汤日历搭建一言 API接口

通过zhuabao得到了毒汤日历的 API https://www.dutangapp.cn/u/toxic?date=2018-6-18
API 后面的data=xxxx-xx-xx 为日期

<?php header("Content-type: text/html; charset=utf-8"); //设置编码 utf-8  $utime = date("Y-m-d");//api的尾缀时间 //使用curl提高运行速度 不用动 function httpsGet($url) {
    $curl = curl_init();
    $httpsheader[] = "Accept:*/*";
    $httpsheader[] = "Accept-Language:zh-CN,zh;q=0.8";
    $httpsheader[] = "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_httpsHEADER, $httpsheader);
    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 =httpsGet('https://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"; ?> 

访问这个页面后 会在自动生成 binduyan.txt 文件,大概 200 多条。
搭建 一言API

<?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;
} 

食用方法
将 API 代码保存为 index.php 与 binduyan.txt 上传到网站 binduyan 目录内
请求地址
https://你的域名/binduyan/(返回随机一句)
https://你的域名/binduyan/index.php/?encode=js(返回 js 格式)
网站集成

<script type="text/javascript" src="https://你的域名/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 httpsGet($url) {
    $curl = curl_init();
    $httpsheader[] = "Accept:*/*";
    $httpsheader[] = "Accept-Language:zh-CN,zh;q=0.8";
    $httpsheader[] = "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_httpsHEADER, $httpsheader);
    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 =httpsGet('https://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 上传到网站(记得更改监控秘钥),每天访问下这个https://域名/papapa.php/?p=key 就会自动抓取当天的毒言并保存到 binduyan.txt 但是并不能达到全自动的目的。这时候需要监控平台,阿里云,360 都可以.本人推荐宝塔面板。

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

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

文章如无特别注明均为原创! 作者: 余川
转载或复制请以 超链接形式 并注明出处 余川分享-余川资源网
原文地址: https://28te.cn:443/post-54.html
发布于2020-3-8

分享到:
打赏

评论

游客

切换注册

登录

您也可以使用第三方帐号快捷登录

切换登录

注册