PHP 截取百度贴吧内容

应一个同学的请求(呃……据距所讲系「要求」),想要把某一个帖子中楼主的所有回帖截出来,原因是他常在贴吧看小说,而他又是一个程序员中的战斗机、设计师中的乔布斯,觉得贴吧的样式太丑- -(他居然喜欢看纯文本),就决定写一写~

其实也挺有用的,贴吧中也有不少的精品贴,一层一层地复制实在很累~

实现功能

  • 截取帖子中楼主的所有回复。
  • 将 txt 格式的文件上传至 oss。
  • 提供 txt 下载。

演示

访问 http://rainman.me/tieba.php?url= 后跟帖子地址。

例如:http://rainman.me/tieba.php?url=http://tieba.baidu.com/p/2996970680

(https 地址:https://ssl.rainman.me/tieba.php?url=http://tieba.baidu.com/p/2996970680,无防盗链)

PHP 截取百度贴吧内容

访问后即会上传 txt 文件到 oss:

PHP 截取百度贴吧内容

点击下载就可以下载 txt 文本了~

PHP 截取百度贴吧内容 PHP 截取百度贴吧内容

源码

Code   ViewPrint
  1. <?php
  2.     echo "<meta charset=\"UTF-8\">";//这里就是输出页面代码,如果换成gb2312就会乱码
  3.     function filter_mark($text){ //将标点符号和特殊字符替换为'-'
  4.         if(trim($text)=='')return '';
  5.         $text=preg_replace("/[[:punct:]\s]/",'-',$text);
  6.         $text=urlencode($text);
  7.         $text=preg_replace("/(%E2%80%94|%20|%7E|%60|%21|%40|%23|%24|%25|%5E|%26|%27|%2A|%28|%29|%2B|%7C|%5C|%3D|\-|_|%5B|%5D|%7D|%7B|%3B|%22|%3A|%3F|%3E|%3C|%2C|\.|%2F|%A3%BF|%A1%B7|%A1%B6|%A1%A2|%A1%A3|%A3%AC|%7D|%A1%B0|%A3%BA|%A3%BB|%A1%AE|%A1%AF|%A1%B1|%A3%FC|%A3%BD|%A1%AA|%A3%A9|%A3%A8|%A1%AD|%A3%A4|%A1%A4|%A3%A1|%E3%80%82|%EF%BC%81|%EF%BC%8C|%EF%BC%9B|%EF%BC%9F|%EF%BC%9A|%E3%80%81|%E2%80%A6%E2%80%A6|%E2%80%9D|%E2%80%9C|%E2%80%98|%E2%80%99|%EF%BD%9E|%EF%BC%8E|%EF%BC%88)+/",'-',$text);
  8.         $text=urldecode($text);
  9.         return trim($text);
  10.     }
  11.     function get_title($url) { // 获取帖子的标题
  12.         $lines_array = file($url);
  13.         $lines_string = implode(''$lines_array);
  14.         $pos = strpos($lines_string,'utf-8');
  15.         if($pos===false){$lines_string = iconv("gbk","utf-8",$lines_string);}
  16.         eregi("<title>(.*)</title>"$lines_string$title);
  17.         return $title[1];
  18.     }
  19.     function str_substr($start$end$str) { //源代码截取
  20.         $temp = explode($start$str, 2);
  21.         $content = explode($end$temp[1], 2);
  22.         return $content[0];
  23.     }
  24.     $novel_url = $_GET['url']; // 通过 get 请求得到帖子地址
  25.     $novel_title = get_title($novel_url);
  26.     for ($i = 0; $i < 2; $i++) {
  27.         $suffix_pos = strrpos($novel_title, '_');
  28.         $novel_title = substr($novel_title, 0, $suffix_pos);
  29.     }
  30.     $object_name = filter_mark($novel_title).'.txt'; // 得到文件名
  31.     $file_dir = './tieba_cache/'.$object_name;
  32.     $txt = fopen($file_dir"w+"); // 先保存到本地
  33.     echo '<a href="http://resource.rainman.me/database/tieba/'.$object_name.'" target="_blank" style="color: rgb(91, 165, 230); font-family: &#39;comic sans ms&#39;; text-decoration: none;"><span style="color: rgb(91, 165, 230); font-family: &#39;comic sans ms&#39;;"> 点此下载txt文本</span></a><HR style="border:3 double #987cb9" width="100%" color=#987cb9 SIZE=3>';
  34.     fwrite($txt"原帖地址:".$novel_url."\n-------------------------------------------\n\n");
  35.     $tiebamain = file_get_contents($novel_url."?see_lz=1&pn=1"); // see_lz=1表示只看楼主,pn=1表示第一页
  36.     $pagecount = str_substr('下一页', '尾页', $tiebamain); //这里是截取当前内容有多少页
  37.     if ($pagecount == null || $pagecount == "") {
  38.         $pagecount = 1;
  39.     }
  40.     else {
  41.         $pagecount = str_substr('pn=', '">', $pagecount);
  42.     }
  43.     for($i = 1; $i <= $pagecount; $i++) { //对每一页采集内容
  44.         $tiebacontent = file_get_contents($novel_url."?see_lz=1&pn=".$i);
  45.         $pregcc = "/<cc>(.*)<\/cc>/";//正则
  46.         preg_match_all($pregcc, $tiebacontent, $match);// 截取<cc></cc>之间的内容
  47.         $content = "";
  48.         $txtcontent = "";
  49.         for($k = 0; $k < count($match[1]); $k++) {
  50.             $content = $content.$match[1][$k]."";//获取所有<cc></cc>之间的内容
  51.             $txtcontent = $txtcontent.$match[1][$k]."\n";
  52.         }
  53.         $newcontent = ereg_replace("<div [^>]*>|<\/div>", "", $content); //正则匹配掉div、a等标签
  54.         $newcontent = preg_replace('/<img.+?src=\"(.+?)\".+?>/', '<img src="\1">', $newcontent);
  55.         $newcontent = ereg_replace("<a [^>]*>|<\/a>", "", $newcontent);
  56.         $newcontent = str_replace(">", "><br><br>", $newcontent); // 插入 <br> 标签来控制样式
  57.         $newtxtcontent = ereg_replace("<div [^>]*>|<\/div>", "", $txtcontent); //正则匹配掉div、a等标签
  58.         $newtxtcontent = ereg_replace("<img [^>]*>|<\/>", "", $newtxtcontent); //正则匹配掉<img>标签
  59.         $newtxtcontent = ereg_replace("<a [^>]*>|<\/a>","",$newtxtcontent);
  60.         $newtxtcontent = str_replace("<br>", "\n", $newtxtcontent);
  61.         $newtxtcontent = str_replace("                        ", "    ", $newtxtcontent);
  62.         echo $newcontent;
  63.         fwrite($txt$newtxtcontent);
  64.     }
  65.     fclose($txt);
  66.     require_once '/var/www/rainman/oss/aliyun/aliyun/aliyun.php';
  67.     use \Aliyun\OSS\OSSClient;
  68.     $client = OSSClient::factory(array(
  69.     'AccessKeyId' => '3XCkVEFyvePtnIBn',
  70.     'AccessKeySecret' => 'xxxxxxxxxxxx',
  71.         'Endpoint' => 'http://oss-cn-shanghai.aliyuncs.com',
  72.     ));
  73.     $client->putObject(array(
  74.         'Bucket' => 'kyeremal-shanghai',
  75.         'Key' => 'database/tieba/'.$object_name,
  76.         'Content' => fopen($file_dir, 'r'),
  77.         'ContentLength' => filesize($file_dir),
  78.     ));
  79. ?>

完整包下载

如果我的文章对您有帮助,请我喝杯咖啡吧~

支付宝转账打赏⬆️

微信钱包转账打赏⬆️

目前评论:6   其中:访客  4   博主  2

  1. http://gzwufan.com 0

    爸爸,是您让我拥有了更广阔的天空,是您让我看得更高,更远。敬爱的爸爸,祝福您岁岁愉快,年年如意。
    [url=http://gzwufan.com]http://gzwufan.com[/url]

  2. 韩国时尚购物起义 0

    我们为人和善,这是我们能打败同行的核心原因。

  3. 薛峰 1

    这个方法很好,但是看了半天的代码,博主,这个怎么用啊???

    • rainman rainman

      @薛峰 访问 http://rainman.me/tieba.php?url= 后面跟帖子地址就可以了哦~比如:http://rainman.me/tieba.php?url=http://tieba.baidu.com/p/2996970680,如果想要在自己的网站上用,那么将代码保存到站点根目录下的 tieba.php,同时本地和 oss 缓存相关的代码删除就可以了~

  4. 陌小雨博客 0

    很不错的功能,对于那种分N次写的精华帖子,确实很有效率。 :grin:

评论加载中...

发表评论

:?::razz::sad::evil::!::smile::oops::grin::eek::shock::???::cool::lol::mad::twisted::roll::wink::idea::arrow::neutral::cry::mrgreen: