毒湯日曆搭建一言 API介面

  • 2020 年 1 月 20 日
  • 筆記

什麼是毒湯日曆 毒湯日曆是一本有毒的日曆,每天用毒雞湯來喚醒你。 你甚至不用翻開日曆,翻開 App 的推送,每天會守時送上一杯毒雞湯。 自己也能製作毒雞湯?那太好了,毒性夠強,如果讓他人扎到心你就厲害了。 每條毒湯能夠點扎心、發毒評,或許轉發給他人,讓他人也扎扎心。

準備工作

通過抓包得到了毒湯日曆的 API http://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 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";  ?>

訪問這個頁面後 會在自動生成 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 目錄內

請求地址

http://heibai.org/binduyan/(返回隨機一句)

http://heibai.org/binduyan/index.php/?encode=js(返回 js 格式)

heibai.org更換為自己域名

網站集成

<script type="text/javascript" src="http://heibai.org/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://api.qqsuu.net/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 "老鐵 搞事情嗎";  ?>

將以上程式碼保存為 pa.php 上傳到網站(記得更改監控秘鑰),每天訪問下這個http://heibai.org/pa.php/?p=key 就會自動抓取當天的毒言並保存到 binduyan.txt 但是並不能達到全自動的目的。這時候需要監控平台,阿里雲,360 都可以.本人推薦寶塔面板。

添加計劃任務–訪問url–設置每天訪問

監控格式http://域名/文件目錄/pa.php/?p=key   key自己修改 PHP程式碼第七行