PHP 自动爬毒汤日历搭建一言 API [转载]

分享 2019-11-30

什么是毒汤日历

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

以上为毒汤日历 APP 介绍,官网 http://www.dutangapp.cn/ 当然官网什么都没有

准备工作

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

开始爬

爬虫

Code   ViewPrint
  1. <?php
  2. header(“Content-type: text/html; charset=utf-8”); //设置编码 utf-8 
  3. $utime = date(“Y-m-d”);//api的尾缀时间
  4. //使用curl提高运行速度 不用动
  5. function httpGet($url) {
  6.     $curl = curl_init();
  7.     $httpheader[] = “Accept:*/*”;
  8.     $httpheader[] = “Accept-Language:zh-CN,zh;q=0.8”;
  9.     $httpheader[] = “Connection:close”;
  10.     curl_setopt($curl, CURLOPT_USERAGENT, “Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1” );
  11.     curl_setopt($curl, CURLOPT_HTTPHEADER, $httpheader);
  12.     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  13.     curl_setopt($curl, CURLOPT_TIMEOUT, 3);
  14.     curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
  15.     curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
  16.     curl_setopt($curl, CURLOPT_URL, $url);
  17.     $res = curl_exec($curl);
  18.     curl_close($curl);
  19.     return $res;
  20. }
  21. $myfile = fopen(“binduyan.txt”“a+”);//创建文件保存抓取的句子
  22. //循环次数 2018-3-21 至现在日期相差的天数 
  23. for ($i=1; $i<83; $i++) {
  24.     $json_string =httpGet(‘http://www.dutangapp.cn/u/toxic?date=’.$utime);//curl 自定义函数访问api
  25.     $data= json_decode($json_string,true);//解析json 转为php
  26.  //2018-4-11之前只有一条数据 so 加判断
  27. if (isset($data[‘data’][‘0’][‘data’])) {
  28.      $text1$data[‘data’][‘0’][‘data’].“\n”;
  29.     fwrite($myfile$text1);
  30. }
  31. if (isset($data[‘data’][‘1’][‘data’])) {
  32.     $text2$data[‘data’][‘1’][‘data’].“\n”;
  33.    fwrite($myfile$text2);
  34. }
  35. if (isset($data[‘data’][‘2’][‘data’])) {
  36.     $text3$data[‘data’][‘2’][‘data’].“\n”;
  37.     fwrite($myfile$text3);
  38. }
  39.     $utimedate(“Y-m-d”,strtotime(“-“.strval($i).” day”)); //每循环一次 当前日期减去循环变量
  40.  }
  41. fclose($myfile);
  42. echo “ok”;
  43. ?>

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

搭建 API

 

Code   ViewPrint
  1. <?php
  2. header(“Content-type: text/html; charset=utf-8”); //设置编码 utf-8 
  3. //获取句子文件的绝对路径
  4. //如果你介意别人可能会拖走这个文本,可以把文件名自定义一下,或者通过Nginx禁止拉取也行。
  5. $path = dirname(__FILE__);
  6. $file = file($path.“/binduyan.txt”);
  7. //随机读取一行
  8. $arr  = mt_rand( 0, count$file ) – 1 );
  9. $content  = trim($file[$arr]);
  10. //编码判断,用于输出相应的响应头部编码
  11. if (isset($_GET[‘charset’]) && !emptyempty($_GET[‘charset’])) {
  12.     $charset = $_GET[‘charset’];
  13.     if (strcasecmp($charset,“gbk”) == 0 ) {
  14.         $content = mb_convert_encoding($content,’gbk’, ‘utf-8’);
  15.     }
  16. else {
  17.     $charset = ‘utf-8’;
  18. }
  19. //格式化判断,输出js或纯文本
  20. if ($_GET[‘encode’] === ‘js’) {
  21.     echo “function binduyan(){document.write(‘” . $content .“‘);}”;
  22. else {
  23.     echo $content;
  24. }
  25. ?>

使用方法

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

请求地址
http://你的域名/binduyan/(返回随机一句)

http://你的域名/binduyan/index.php/?encode=js(返回 js 格式)

博客集成

Code   ViewPrint
  1. <script type=“text/javascript” src=“http://你的域名/binduyan/index.php/?encode=js&charset=utf-8”></script>
  2. <div id=“binduyan”><script>binduyan()</script></div>

你也可以自己美化

你以为这就完了吗?

番外

区区 200 条怎么能够用呢

毒汤日历每日都会更新 那么为什么不自动每天抓取呢?

Code   ViewPrint
  1. <?php
  2. header(“Content-type: text/html; charset=utf-8”); //设置编码 utf-8 
  3. $utime = date(“Y-m-d”);
  4. $str = file_get_contents(‘data.txt’);
  5. $d=date(‘Y/m/d H:i’,strtotime($str));
  6. //请更改监控key 默认binduyan
  7. if($_GET[‘p’]===’binduyan’){
  8. //判断今天是否已爬
  9.     if(strtotime($utime)>strtotime($d)){
  10. //爬虫开始    
  11. $utime = date(“Y-m-d”);//api的尾缀时间
  12. //使用curl提高运行速度 不用动
  13. function httpGet($url) {
  14.     $curl = curl_init();
  15.     $httpheader[] = “Accept:*/*”;
  16.     $httpheader[] = “Accept-Language:zh-CN,zh;q=0.8”;
  17.     $httpheader[] = “Connection:close”;
  18.     curl_setopt($curl, CURLOPT_USERAGENT, “Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1” );
  19.     curl_setopt($curl, CURLOPT_HTTPHEADER, $httpheader);
  20.     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  21.     curl_setopt($curl, CURLOPT_TIMEOUT, 3);
  22.     curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
  23.     curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
  24.     curl_setopt($curl, CURLOPT_URL, $url);
  25.     $res = curl_exec($curl);
  26.     curl_close($curl);
  27.     return $res;
  28. }
  29. //定义写入函数 
  30. function myfile($txt){
  31.     $myfile = fopen(“binduyan.txt”“a+”);
  32.     fwrite($myfile,$txt);
  33.     fclose($myfile);
  34. }
  35.     $json_string =httpGet(‘http://www.dutangapp.cn/u/toxic?date=’.$utime);//curl 自定义函数访问api
  36.     $data= json_decode($json_string,true);//解析json 转为php
  37.  //2018-4-11之前只有一条数据 so 加判断 
  38. if (isset($data[‘data’][‘0’][‘data’])) {
  39.      $text1=“\n”$data[‘data’][‘0’][‘data’].“\n”;
  40.      myfile($text1);
  41.  }
  42. if (isset($data[‘data’][‘1’][‘data’])) {
  43.     $text2$data[‘data’][‘1’][‘data’].“\n”;
  44.     myfile($text2);
  45. }
  46. if (isset($data[‘data’][‘2’][‘data’])) {
  47.     $text3$data[‘data’][‘2’][‘data’];
  48.     myfile($text3);
  49. }
  50. $myfile = fopen(“data.txt”“w”);
  51. fwrite($myfile,$utime);
  52. fclose($myfile);
  53. echo “ok”;
  54. //爬虫结束
  55. }else{
  56.     echo “已爬”;
  57. }
  58. }else
  59. echo “老铁 搞事情吗”;
  60. ?>

转载自:Bin’BLog 文章链接:http://fooor.cn/index.php/archives/43/

赞 (0)
评论 (0)
© 2019 All Rights Reserved Copycat by 左右 桂ICP备19003786号