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

PHP接口教程 3年前 (2018) Mgo
0
什么是毒汤日历

毒汤日历是一本有毒的日历,每天用毒鸡汤来唤醒你。

你甚至不用打开日历,打开 App 的推送,每天会定时送上一杯毒鸡汤。

自己也能制作毒鸡汤?那太好了,毒性够强,如果让别人扎到心你就厉害了。

每条毒汤可以点扎心、发毒评,或者转发给别人,让别人也扎扎心。

准备工作

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

API 后面的data=xxxx-xx-xx 为日期

开始爬虫

	
  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.  
  40. $utime= date("Y-m-d",strtotime("-".strval($i)." day")); //每循环一次 当前日期减去循环变量
  41.  
  42. }
  43. fclose($myfile);
  44. echo "ok";
  45. ?>

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

搭建 一言API

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

食用方法

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

请求地址

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

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

网站集成

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

你以为这就完了吗?PHP 自动爬毒汤日历搭建一言 API

区区 200 条怎么能够用呢

	
  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.  
  36. $json_string =httpGet('http://www.dutangapp.cn/u/toxic?date='.$utime);//curl 自定义函数访问api
  37. $data= json_decode($json_string,true);//解析json 转为php
  38. //2018-4-11之前只有一条数据 so 加判断
  39. if (isset($data['data']['0']['data'])) {
  40. $text1="\n". $data['data']['0']['data']."\n";
  41. myfile($text1);
  42. }
  43. if (isset($data['data']['1']['data'])) {
  44. $text2= $data['data']['1']['data']."\n";
  45. myfile($text2);
  46. }
  47. if (isset($data['data']['2']['data'])) {
  48. $text3= $data['data']['2']['data'];
  49. myfile($text3);
  50. }
  51. $myfile = fopen("data.txt", "w");
  52. fwrite($myfile,$utime);
  53. fclose($myfile);
  54. echo "ok";
  55. //爬虫结束
  56. }else{
  57. echo "已爬";
  58. }
  59. }else
  60. echo "老铁 搞事情吗";
  61. ?>

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

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

监控格式http://域名/文件目录/papapa.php/?p=key   key自己修改

PHP代码第七行

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

 

 

 

 

版权声明:Mgo 发表于 2018-06-21 20:09:16。
转载请注明:PHP 自动爬毒汤日历搭建一言 API | 站长聚集地

暂无评论

暂无评论...