批量删除新浪微博及自动发布微博

批量删除新浪微博及自动发布微博


前言

最新有批量删除新浪微博的需求,于是在网上查相关代码并动手试了一下。除了实现批量删除微博功能之外,还尝试了自动发布微博,整个过程很有趣,学到了很多东西,于是记录下来。
注意:批量删除会全部删除微博,请慎重操作!
注意:批量删除会全部删除微博,请慎重操作!
注意:批量删除会全部删除微博,请慎重操作!


一、微博批量删除

删除部分代码参考了这篇文章:[详见](https://blog.csdn.net/qq_37537375/article/details/104242890) 通过在控制栏在控制栏输入代码,向指定接口发起请求,实现删除功能。下面是我对源代码加了自己的理解。
//向删除接口发起请求,删除对应节点
function del_weibo(id){
    console.log(id);
    var postdata = "mid="+id;
    fetch("https://www.weibo.com/aj/mblog/del?ajwvr=6", 
    {
        "credentials":"include",
        "headers":{
                "content-type":"application/x-www-form-urlencoded",
        },
        "referrer":"https://www.weibo.com",
        "body":postdata,
        "method":"POST",
        "mode":"cors"
    }).then(response => console.log(response) )
    .then(data => console.log(data))
    .catch(error => console.log(error));
}
 // 查找到所有微博节点并根据其name属性删除(name为唯一标识)
function del_page(){
    var wb_list = document.querySelectorAll(".S_txt2");
    if(wb_list.length == 0){
        console.log("暂无可删除微博");
    }
    var i = 1;
    for(var t of wb_list){
    	// 每条微博都有一个<a>标签,其name属性为唯一标识,删除需要用到
        if(t.name){
            setTimeout(function(t) {
            	// 发起删除请求,从数据库中删除该条微博
                del_weibo(t.name);
                // 从元素结构中删除该条微博,此处不加也可,只暂时影响页面效果,刷新即可全部删除
                var pppp_node = t.parentNode.parentNode.parentNode.parentNode;
                pppp_node.parentNode.removeChild(pppp_node);
            }, 200*i,t);
            i++;
        }
    }
}
 //尝试自动刷新
function auto_update_page(){
	// 到达页面的底部时,会出现class=".W_pages"的下一页按钮,点击加载下一页
    var pages = document.querySelectorAll(".W_pages > a");
    if(pages.length > 0){
        var next_page = pages[pages.length-1];
        console.log("下一页");//or上一页...
        next_page.click();
    }else{
    	//若当前也还没加载完,则跳转到底部触发加载
        console.log(new Date().toLocaleTimeString() + ":加载中,请稍等");
        window.scrollTo(0, 100000);
    }
}
 // 主函数
function del_all_weibo(){
    del_page();
    auto_update_page();
}
 
window.setInterval(del_all_weibo,4000);

二、微博自动发布

使用上面代码删除全部微博后,想看懂上面的代码,却没微博可删了。于是想着既然能代码删除,那是不是也可以代码发布了。于是通过在控制栏查看发布微博的请求,成功实现!

1 代码

function publish(num){
    num++;
    // 请求需加上时间戳
    var timevalue = new Date().getTime();
    var url = "https://weibo.com/p/aj/v6/mblog/add?ajwvr=6&domain=100505&__rnd="+ timevalue;
    var params =  {
        title: '有什么新鲜事想告诉大家? ',
        location: 'page_100505_home',
        text: '发布时间:'+ new Date(parseInt(timevalue)).toLocaleString(),
        style_type: "1",
        appkey : "",
        pdetail: "yourID", //这里换成自己主页上16位的值 https://weibo.com/p/**yourID**/home
        isReEdit: false,
        rank: "1", // 1为仅自己可见,0为公开
        pub_source: "page_2",
        topic_id: "1022:",
        pub_type: "dialog",
        _t: "0"
    };
    var format_params = "";
    for (var i in params) {
        format_params = format_params + i + '=' + params[i] + '&';
    }
    format_params = format_params.slice(0, -1);

    fetch(url,
        {
            "credentials":"include",
            "headers":{
                "content-type":"application/x-www-form-urlencoded",
            },
            "body": format_params,
            "method":"POST","mode":"cors"
        }).then(response => console.log('1', response) )
        .then(data => console.log('2', data))
        .catch(error => console.log(error));

    // 15 为想要发布的微博条数
    if(num < 15) {
        console.log(num)
        setTimeout(publish, 10000, num);
    }
}
publish(0)

2.踩坑总结

 在使用fetch发起POST请求时,请求体携带在'body'参数中,一开始使用JSON.stringify(params)转化参数,一直显示 302。后来才发现是content-type不同导致的。  Content-Type是Http报头中实体头的一个字段,代表发送端(客户端|服务器)发送的实体数据的数据类型/格式。常见的有以下4种:

 

  1. application/x-www-form-urlencoded。提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。是浏览器的原生 form 表单默认参数。
  2. application/json。 参数以JSON序列化字符串表示,支持比键值对复杂得多的结构化数据,并且参数结构清晰,易读性更高。
  3. multipart/form-data。使用表单上传文件时,必须让 form 的 enctyped 等于这个值。
  4. text/xml。类型为文本,格式为xml。

 过程中尝试使用JSON.stringify(params) + application/json的组合方式,依然无效,应该是服务端只接受第一种格式的。

参考文章

https://blog.csdn.net/qq_37537375/article/details/104242890
https://segmentfault.com/a/1190000013056786

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值