2025年6月7日 星期六 乙巳(蛇)年 三月十一 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > PHP

使用 PHP 批量删除 新浪微博内容

时间:12-14来源:作者:点击数:10

新浪微博开放平台的删除 API 已经关闭了,目前来说没有其他的方式能有效地删除微博,微博网页版可通过 AJAX 请求删除,唯一的参数是 mid,我们可以理解为微博的唯一 ID,那么我们只要获取到了这个 ID,然后发起请求即可。

新浪微博的翻页是使用直接嵌套的 HTML 代码,里面包含了你看到的所有信息,那么我们可以模拟用户的操作,批量删除微博。

原理分析

首先构建一个 curl 方法,为了标识登录用户,我们要先设置 cookie:

  • function post($url, $post_data, $method = 'post', $location = 0, $reffer = null, $origin = null, $host = null){
  • $header = array(
  • 'Host: weibo.com',
  • 'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0',
  • 'Accept: */*',
  • 'Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
  • 'Accept-Encoding: gzip, deflate, br',
  • 'Connection: keep-alive',
  • 'Referer: https://weibo.com/p/1006061848719402/home?from=page_100606&mod=TAB&is_all=1',
  • 'Cookie: SUB=_2A25Nei59DeRhGedG71oW8SfIyz6IHXVuDhi1rDV8PUNbmtANLWTxkW9NUTJhgRrUko8Y3kcSMy2qik69SLr5cWOz; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9W5hXoza0gdfeO6EFBAyGQ6P5JpX5KzhUgL.Fo2RShnNeK.Xehz2dJLoIpjLxK.L1KMLB--LxKnLB-qLBoBLxKMLB.BL1K2t; login_sid_t=d86405009f566cd57c8b433b74b96be8; cross_origin_proto=SSL; WBStorage=8daec78e6a891122|undefined; _s_tentry=passport.weibo.com; Apache=2936390402941.201.1618894353597; SINAGLOBAL=2936390402941.201.1618894353597; ULV=1618894353599:1:1:1:2936390402941.201.1618894353597:; wb_view_log=1920*10801; ALF=1650430381; SSOLoginState=1618894382; wb_view_log_1848719402=1920*10801; webim_unReadCount=%7B%22time%22%3A1618894400887%2C%22dm_pub_total%22%3A0%2C%22chat_group_client%22%3A0%2C%22chat_group_notice%22%3A0%2C%22allcountNum%22%3A0%2C%22msgbox%22%3A0%7D',
  • 'X-Requested-With: XMLHttpRequest',
  • );
  • $curl = curl_init(); // 这里并没有带参数初始化
  • curl_setopt($curl, CURLOPT_URL, $url); // 这里传入url
  • curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
  • curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查,不开启次功能
  • curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); // 从证书中检测 SSL 加密算法
  • curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36");
  • curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
  • curl_setopt($curl, CURLOPT_POST, $method == 'post'?true:false); // 开启 post
  • curl_setopt($curl, CURLOPT_ENCODING, "gzip, deflate" );
  • curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); // 要传送的数据
  • curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制,防止死循环
  • curl_setopt($curl, CURLOPT_HEADER, 0);
  • curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  • $tmpInfo = curl_exec($curl);
  • return $tmpInfo;
  • }

通过浏览器调试工具,我们可以查到翻页的 url 地址:

https://weibo.com/p/1006061848719402/home?pids=Pl_Official_MyProfileFeed__21&is_search=0&visible=0&is_all=1&is_tag=0&profile_ftype=1&page=2&ajaxpagelet=1&ajaxpagelet_v6=1&__ref=%2Fp%2F1006061848719402%2Fhome%3Ffrom%3Dpage_100606%26mod%3DTAB%26is_all%3D1%23place&_t=FM_161847052339555

其中的 page 参数就是页码,这个请求获取到的是一段 JS 代码,放到页面执行就能加载更多的微博内容,但是我们仅仅需要里面的 mid 参数。

可使用正则匹配到:

  • preg_match_all('/mid=\\\"(.+?)\\\"/', $res, $match);

同理删除的 url 为:

https://weibo.com/aj/mblog/del?ajwvr=6

参数是 mid,如果请求成功,就会得到:

  • {"code":"100000","msg":"","data":{}}

完整代码

到这里我们基本分析清楚了,完整代码如下:

  • include_once('curl_post.php');
  • while(1){
  • $url = "https://weibo.com/p/1006061848719402/home?pids=Pl_Official_MyProfileFeed__21&is_search=0&visible=0&is_all=1&is_tag=0&profile_ftype=1&page=2&ajaxpagelet=1&ajaxpagelet_v6=1&__ref=%2Fp%2F1006061848719402%2Fhome%3Ffrom%3Dpage_100606%26mod%3DTAB%26is_all%3D1%23place&_t=FM_161847052339555";
  • $res = post($url, null, 'get');
  • preg_match_all('/mid=\\\"(.+?)\\\"/', $res, $match);
  • print_r($match[1]);
  • foreach($match[1] as $key => $mid){
  • echo "start del ".$mid." ==============\r\n";
  • $res = post('https://weibo.com/aj/mblog/del?ajwvr=6', array('mid' => $mid));
  • echo $res."\r\n";
  • echo 'await 5s ================='."\r\n";
  • sleep(5);
  • }
  • if(count($match[1]) < 10) break;
  • }

执行 php delWeibo.php,结果如下:

如果你嫌等待时间太长,可自行修改,建议不要调用的太频繁了。

'PHP' 不是内部或外部命令,也不是可运行的程序或批处理文件。

将 PHP 的安装路径添加到环境变量,就可以在命令行中执行 PHP 文件。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐