700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 批量删除新浪微博及自动发布微博

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

时间:2020-01-28 15:40:41

相关推荐

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

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

文章目录

批量删除新浪微博及自动发布微博前言一、微博批量删除二、微博自动发布1 代码2.踩坑总结参考文章

前言

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


一、微博批量删除

删除部分代码参考了这篇文章:[详见](/qq_37537375/article/details/104242890) 通过在控制栏在控制栏输入代码,向指定接口发起请求,实现删除功能。下面是我对源代码加了自己的理解。

//向删除接口发起请求,删除对应节点function del_weibo(id){console.log(id);var postdata = "mid="+id;fetch("/aj/mblog/del?ajwvr=6", {"credentials":"include","headers":{"content-type":"application/x-www-form-urlencoded",},"referrer":"","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 = "/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位的值 /p/**yourID**/homeisReEdit: 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种:
application/x-www-form-urlencoded。提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。是浏览器的原生 form 表单默认参数。application/json。 参数以JSON序列化字符串表示,支持比键值对复杂得多的结构化数据,并且参数结构清晰,易读性更高。multipart/form-data。使用表单上传文件时,必须让 form 的 enctyped 等于这个值。text/xml。类型为文本,格式为xml。

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

参考文章

/qq_37537375/article/details/104242890

/a/1190000013056786

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。