文章目錄
- 一、序
- 二、API分析
- 三、Apipost測試
- 四、腳本
- 五、Apipost中完成
一、序
去年開始再51CTO同步更新文章,一年多過去了,只漲了3個粉絲。看了下這個平臺就是賣課、搞培訓的,退出了。決定把文章也刪除了(有人私信我說專門注冊了個賬號感謝我的一篇文章,還挺有意義的)。
不過這和C站一樣,文章不支持批量操作,100多篇文章,手動刪了幾篇后就不想繼續了。于是決定寫個python腳本(聯系客服應該也能全部刪除吧)。
之前寫過批量查詢CSDN文章質量分的文章,本文思路是一樣的。
【python】我用python寫了一個可以批量查詢文章質量分的小項目(純python、flask+html、打包成exe文件)
二、API分析
在51CTO的創作中心,文章列表頁面,打開瀏覽器的檢查,然后刪除一篇文章,就可以看到刪除操作的http請求參數:
載荷部分是具體操作(delBlog
)和文章id
,只需要在http請求的body里面設置要刪除的文章的id,就可以刪除對應的文章了。
下面的list操作,就是獲取文章列表信息,從中提取出文章id就可以了:
核心操作就這兩個。
三、Apipost測試
還是用Apipost來測試一下吧。
把operation操作的參數填寫在Apipost里面就可以了。
請求頭:
請求體:
現在開始測試接口,以這篇文章為例:
id
是7883577
。
在請求體中將id設置為7883577。點擊發送,可以看到操作成功:
文章已經被刪除:
批量獲取文章id的操作是類似的,不過獲取id請求體只需要cookie就可以了(按照前面的全填,永遠只返回第一頁的信息)
在page這里設置頁面即可(和csdn一樣,是按page來顯示的,不是全部返回):
四、腳本
參考之前批量查詢文章質量分代碼。
五、Apipost中完成
直接在Apipost中獲取文章id,然后保存下來,再將這些id對應的文章全部刪除。
首先是獲取文章id并保存,可以使用Apipost的“后執行腳本”功能,即編寫腳本(js)對http請求(POST)的響應進行進一步操作。
腳本:
if (response.rawBody) {try {let responseData = JSON.parse(response.rawBody);let blogIds = responseData.data.list.map(item => item.blog_id);apt.globals.set("blog_ids", blogIds);console.log(blogIds);} catch (error) {console.error("解析JSON時出錯: ", error);}
} else {console.error("響應體為空");
}
注意這里是rawBody,而通常的response響應體名稱是body。自己先打印response(console.log(response);
)就可以看到了。
現在,這些id已經保存到了全局變量blogIds
中了。在刪除文章的接口中使用這個全局變量就可以了。
因為每次POST只能刪除一篇文章(即一個id),說以需要再刪除文章的接口中添加預處理腳本,對前面的全局變量進行設置,每次只取一個。
// 從全局變量中獲取 blog_ids 字符串,并將其轉換回數組
let blogIds = JSON.parse(apt.globals.get("blog_ids") || "[]");
let blogId = blogIds.shift().toString(); // 將 blog_id 轉換為字符串
// 將更新后的數組轉換回字符串,并保存到全局變量中
apt.globals.set("blog_ids", JSON.stringify(blogIds));
// 保存 blog_id 到全局變量中
apt.globals.set("blog_id", blogId);
然后再請求中將ids設置為對應的變量:
現在,點擊“發送”,就會刪除全局變量中保存的多個文章id對應的文章了。
比如我獲取了一頁(page)文章對應的id,假設有10個,那么全局變量就會保存這10篇文章的id,然后在刪除文件的接口中刪除這些id對應的文章。
不過有一個問題,刪除一篇文章就要點擊一次“發送”。這種方法還是不如寫腳本來得快(循環發送,刪除)。Apipost應該有相應的這種高級功能,我還沒學。
即使不寫腳本,也比一篇一篇地刪除快了。