网站调用新浪微博内容(批量删除新浪微博的原理分析(图)JS代码 )
优采云 发布时间: 2021-11-01 21:20网站调用新浪微博内容(批量删除新浪微博的原理分析(图)JS代码
)
新浪微博开放平台删除接口已关闭。目前没有其他方法可以有效删除微博。网页版微博可以通过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地址:
%2Fp%2F19402%2Fhome%3Ffrom%3Dpage_100606%26mod%3DTAB%26is_all%3D1%23place&_t=FM_9555
page 参数是页码。这个请求得到的是一段JS代码,在页面上执行可以加载更多的微博内容,但是我们只需要里面的mid参数即可。
您可以使用常规匹配来:
preg_match_all('/mid=\\\"(.+?)\\\"/', $res, $match);
同样,删除的url是:
参数为中。如果请求成功,您将获得:
{"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文件了。